区分歧义和无歧义语法
在了解歧义语法和无歧义语法之间的区别之前,让我们先了解一下这些概念。
歧义语法
如果对于给定的输入字符串存在多个最左派生或多个最右派生或多个分析树,则称该文法是二义性的。
如果文法没有歧义,那么我们称其为无歧义文法
如果语法有歧义,那么它有利于编译器构造
没有任何方法可以自动检测和去除歧义,但我们可以通过重写整个没有歧义的语法来去除歧义。
例子
让我们考虑一个带有生产规则的语法-
E=I E=E+E E=E*E E=(E) E= ε|0|1|2|3……9
明确的语法
如果语法不包含歧义,这意味着对于给定的输入字符串,它不包含一个以上最左派生或一个以上最右边派生或一个以上解析树,则该文法可以是无歧义的。
例子
S -> AB A -> Aa / a B -> b
差异
歧义和无歧义语法之间的主要区别如下-
S→S+S/SxS/id
(AmbiguousGrammar)
S→S+E/E
E→ExF/F
F→id
(无歧义语法)