如何找到上下文无关语法的语言?

How do I find the language for a context free grammar?

我无法根据给定的上下文无关语法确定语言。我已经得到提示,该语言有两个部分,但无法弄清楚。

G= ({S,A,B,C,D,E,Z},(0,1),R,S),

S→E|Z
E→A|C 
A→01B|0A|e
B→1B|10A 
C→10D|1C|e
D→01C|0D 
Z→0Z1|e

e 是空字符串。我发现如果它是 Z,0 和 1 的数量是相等的,但无法弄清楚如果它转到 E

有点跑题了,但是您可以很容易地将语法分解成可以独立分析的子语法。

首先,E 规则只出现在 RHS 的一个地方,所以你可以简单地替换它并通过制作 S 规则 S→A|C|Z 来摆脱它。这些非终结符中的每一个都导致一个独立的子语言(语言 A 仅包含 AB 的规则,语言 C 仅包含 CD,以及语言Z 仅 Z。您的语言 G 只是这三种子语言的结合。

语言 A 是平凡规则的(由于所有非终结符都位于规则 RHS 的末尾),并且可以平凡地转换为 2 状态 E-NFA,从而简化为正则表达式 (0|011 *10)*

语言 C 类似地简化为正则表达式 (1|100*01)*

语言 Z 是唯一的非常规子部分,并且是语言 { 0i1i |我≥ 0}

这三者的结合就是语言 G,除了语法之外,没有任何特别好的描述方式。