我需要生成明确的语法来访问语言L= { a^i b^j c^k | i, j, k ≥ 0 , i = j or i = k }
我已经拥有的是:
S : X | Y
X : TC
T : aTb | ԑ
C : cC | ԑ
Y : aYc | F
F : bF | ԑ
但是这个语法是模糊的,它可以用两种不同的方式识别具有相同数量的a,b,c的字符串。有没有更好的建议让它明确无误?
答案 0 :(得分:1)
S : X | Y | Z
X : aXb | ԑ
Y : aYc | F
Z : Zc | X | ԑ
F : Fb | ԑ
上面的规则较少,产生正确的字符串,但我承认它仍然含糊不清。
问题中语言L的语法可以分为两个子语法,产生以下字符串:a^i b^i c^j
和a^i b^j c^j
,这两者的交集会产生这种表达式:{{ 1}}。可以证明,如果两个语法的交集产生这种表达式,那么语法本质上是模糊的:http://en.wikipedia.org/wiki/Ambiguous_grammar#Inherently_ambiguous_languages
答案 1 :(得分:0)