什么是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
广告