You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请判断我为正则语言b(bc+a)*a(a+b)*c*编写的CFG是否正确

文法正确性分析

目标正则语言 b(bc+a)*a(a+b)*c* 的字符串结构明确:

  • 以 b 开头
  • 后续接任意个(含0个)bc 或 a 的组合
  • 必须包含一个固定的 a
  • 该 a 之后,先出现任意个(含0个)a/b,最后出现任意个(含0个)c(c 只能位于末尾,不能穿插在 a/b 之间)

你编写的文法规则:

S → bAaB
A → bcA | aA | epsilon
B → cB | aB | epsilon

其中 A 的规则是正确的,能生成 (bc+a)*,但 B 的规则存在两处关键问题,导致文法不符合目标语言要求:

  • 无法生成合法字符串中的 b 片段:目标语言中固定 a 之后允许出现 b(比如 baabc 是合法字符串),但 B 的规则没有生成 b 的选项,这类合法字符串无法被该文法推导。
  • 生成不符合语言结构的字符串:B 可以生成 c 和 a 穿插的组合(比如 ca),最终得到 baca 这类字符串——但该字符串中固定 a 之后先出现 c 再出现 a,违反了“c 只能位于末尾”的要求,不属于目标语言,却能被文法生成。

修正后的参考文法

如果要匹配目标语言,可以将 B 的规则拆分为两部分,分别处理 (a+b)* 和 c*:

S → bAaC
A → bcA | aA | ε
D → aD | bD | ε
C → cC | ε

或者简化为:

S → bAaB
A → bcA | aA | ε
B → aB | bB | C
C → cC | ε

内容的提问来源于stack exchange,提问作者zephyrus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 06:52:45