Compiler construction 重新生成上下文无关语法

Compiler construction 重新生成上下文无关语法,compiler-construction,context-free-grammar,ambiguity,computation,context-free-language,Compiler Construction,Context Free Grammar,Ambiguity,Computation,Context Free Language,我需要生成明确的语法来访问语言L={a^ib^jc^k | I,j,k≥ 0,i=j或i=k} 我已经拥有的是: S : X | Y X : TC T : aTb | ԑ C : cC | ԑ Y : aYc | F F : bF | ԑ 但是这种语法是不明确的,它可以用两种不同的方式识别a、b、c数相等的字符串。有没有更好的建议使它明确无误 S : X | Y | Z X : aXb | ԑ Y : aYc | F Z : Zc | X | ԑ F : Fb | ԑ 上面的规则较少,并且生

我需要生成明确的语法来访问语言
L={a^ib^jc^k | I,j,k≥ 0,i=j或i=k}

我已经拥有的是:

S : X | Y
X : TC
T : aTb | ԑ
C : cC | ԑ
Y : aYc | F
F : bF | ԑ
但是这种语法是不明确的,它可以用两种不同的方式识别a、b、c数相等的字符串。有没有更好的建议使它明确无误

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
,这两个子语法的交集将产生此类表达式:
a^i b^i c^i
。可以证明,如果两个语法的交集产生了这种表达式,那么语法本身就是不明确的:

我想这个主题会对你有所帮助
如果我错了,请纠正我,但此行
X:aXb | T
将导致类型为
aaaaaaccbbb
的字符串,而不是
aaaabbbbccc
。这是故意的吗?根据你的语言描述,这是不允许的。是的,你是对的。我修正了这一行,但语法仍然是一个模棱两可的语法。
Z
在这里没有被任何其他产品引用?谢谢你的回答,但我认为语法仍然可以从Y和Z中派生出aabbcc(相等数量的a,b,c)。意思是它仍然模棱两可。我会设法解决它。我首先弹出它来解决错误字符串的问题,但你已经在编辑中更正了它。我认为这种语言天生就是模棱两可的,意味着它没有不模棱两可的语法,对吗?