第1个回答 2020-01-12
二义性文法
【定义】
若文法中存在这样的句型,它具有两棵不同的语法树,则称该文法是二义性文法。
二义性文法会引起歧义,应尽量避免之!
e
e
e
+
e
e
*
e
i
e
*
e
e
+
e
i
i
i
i
i
都可以表示i+i*i
所以g(e):e
->
e+e
|
e*e
|
(e)
|
i
;文法具有二义性。
文法二义性的消除:
【方法1】不改变文法的原有规则,加进一些非形式规定。
加进运算符的优先顺序和结合规则对g(e),规定*优于+,*和+服从左结合
【方法2】构造一个等价的无二义性文法,将排除
二义性的规则合并到文法中
g(e)
->
g´(e)
:
e
->
e+t
|
t
t
->
t*f
|
f
f
->
(e)
|
i
;