什么是TOC中的无歧义语法?


如果语法不包含歧义,则该语法可以是无歧义的。这意味着如果它不包含多个最左推导(LMD)或多个最右推导(RMD)或给定输入字符串的多个语法树,则它是一个无歧义的语法。

规则

为了将歧义语法转换为无歧义语法,我们应用以下规则:

规则 1 - 如果在产生式规则中使用左结合运算符(+、-、*、/),则在产生式规则中应用左递归。左递归就是右侧最左边的符号与左侧的非终结符相同。

X->Xa

规则 2 - 如果在产生式规则中使用右结合运算符(^),则在产生式规则中应用右递归。

右递归就是左侧最右边的符号与右侧的非终结符相同。例如,X->aX

考虑上面提到的规则的一个例子。

检查语法是否模糊。

A->AA

A->(A)

A->a

对于字符串“a(a)aa”,上述语法可以生成两棵语法树,如下所示

由于存在两棵语法树,因此语法是模糊的。

考虑另一个语法

S->S+S

S->S*S

S->2

假设语法树为 2+2*2

语法树如下所示:

给定的语法是模糊的语法。因此,通过应用关联规则将模糊语法转换为无歧义语法,如下所述:

S->S+T

S->T

T->T*F

T->F

F->2

更新于: 2021年6月12日

5K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告