为以下语言生成上下文无关语法

时间:2015-03-07 02:25:56

标签: grammar

**{a^i b^j c^k d^m | i+j=k+m | i<m}**

语法应该允许语言按abbccd而不是cbbcda。首先应该是a,然后是b,依此类推。

我知道你必须“计算”你要添加的a和b的数量,以确保有相同数量的c和d。我似乎无法弄清楚如何确保在语言中有更多的c而不是a。我感谢任何人都能给予的帮助。我现在已经工作了好几个小时了。

编辑:

语法应该是无上下文

我目前只有这两个,因为所有其他人都证明是非常错误的:

S - &gt; C A D.   |乙

B - &gt; C B D.   |

C - &gt;一个 | B'/ P>

D - &gt; C   | d

S - &gt; S d   |甲

A - &gt; b A c   |

(接近但不满足i&lt; k部分)

2 个答案:

答案 0 :(得分:2)

编辑:这是为了当我&lt; k,不是我&lt;米OP改变了问题,但我认为这个答案可能仍然有用。

这不是一个无上下文语法,这可以通过泵引理证明,该引理表明如果语法是无上下文的,则存在整数p> 1。 0,使得长度为> = p的语言中的所有字符串都可以分成子字符串uvwxy,其中len(vx)&gt; = 1,len(vwx)&lt; = p,和uv n wx n y是所有n&gt; = 0的语言成员。

假设存在p值。我们可以创建一个字符串:

k = i + 1
j = m + 1
j > p
k > p

v和x不能包含多种类型的字符,或者既可以在左侧,也可以包含在右侧,因为将它们提升到幂会立即破坏语法。它们不能是彼此相同的字符,因为然后乘以它们会破坏i + j = k + m的规则。 v不能是if if是d,因为那时w包含bs和cs,这使得len(vwx)&gt;页。通过相同的推理,v不能好像x是cs,如果x是ds,则v不能是bs。唯一剩下的选项是bs和cs,但是将n设置为0将使i> = k并且j> = m,从而破坏了语法。

因此,它不是一个无上下文语法。

答案 1 :(得分:1)

必须至少有一个d因为i < m,所以必须有一个b来抵消它。 TV保证此标准,然后转移到接受状态S

T ::= bd | bTd
U ::= bc | bUc
V ::= bUd | bVd
S ::= T | V | aSd