语法优先级和相关性

时间:2014-10-16 03:54:09

标签: parsing

如果给我以下语法

E->E W T|T
T->L S T|L
L->a|b|c
W->*
S->+|-

从下面的语法我看到,因为+和 - 在树下更深处,它们的优先级高于*,我是否正确? 此外,由于这是递归,我可以假设左关联? 由于操作员可以有不同的关联性,我很困惑如何分辨哪一个具有哪一个。  我想我要问的是如何根据语法告诉操作员关联性?

1 个答案:

答案 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,所以这是一个很好的练习。