如果给我以下语法
E->E W T|T
T->L S T|L
L->a|b|c
W->*
S->+|-
从下面的语法我看到,因为+和 - 在树下更深处,它们的优先级高于*,我是否正确? 此外,由于这是递归,我可以假设左关联? 由于操作员可以有不同的关联性,我很困惑如何分辨哪一个具有哪一个。 我想我要问的是如何根据语法告诉操作员关联性?
答案 0 :(得分:0)
从
开始T->L S T|L
并考虑a+b+c
,可以从T
生成如下:
T -> L S T
-> L S (L S T)
-> L S (L S (L))
-> L S (L S (c))
-> L S (b + (c))
-> L + (b + (c))
-> a + (b + (c))
(括号仅作为解析树的简写。)
最右边的推导是唯一的; T
无法与(a + b) + c
匹配,因为a + b
不是L
。
因此,+
和-
是"右关联"。
相比之下,我们有
E->E W T|T
所以a*b*c
将按如下方式生成:
E -> E W T
-> E W L
-> E W c
-> E * c
-> (E W T) * c
-> (E W L) * c
-> (E W b) * c
-> (E * b) * c
-> ((T) * b) * c
-> ((L) * b) * c
-> ((a) * b) * c
同样,该解析是明确的。
我没有做a+b*c
,所以这是一个很好的练习。