目录中的“语法中的歧义”是什么意思?
如果给定一个输入字符串,存在多个最左推导或多个最右推导或多棵解析树,则称该语法是模棱两可的。
- 如果语法不是模棱两可的,则称其为明确的语法。
- 如果语法有歧义,那么这对编译器构建是有好处的。
- 没有办法可以自动检测和消除歧义,但是我们可以通过重新编写整个明确语法来消除歧义。
示例
我们考虑一个具有如下所示的产生规则的语法 -
E = I
E = E+E
E = E*E
E = (E)
E = ε|0|1|2|3...9
让我们考虑一个字符串“3*2+5”
如果上述语法通过使用最左推导(LMD)生成两棵分析树,那么我们可以说给定的语法是有歧义的语法。


由于一个字符串有两个解析树,因此我们可以说给定的语法是有歧义的语法。
考虑另一个例子
检查语法是否有歧义。
A->AA
A->(A)
A->a
对于字符串“a(a)(a)a”,上述语法可以生成两棵解析树,如下所述 -

广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP