繁体   English   中英

语法优先与联想

[英]Grammar Precedence and associativity

如果我被给予以下语法

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

从下面的语法中,我看到既然+和-在树的最深处,它们的优先级比*高,我对此是否正确? 另外由于这是左递归,所以我可以假设左联想? 由于运算符可以具有不同的关联性,因此混淆如何区分哪个具有哪个。 我想我要问的是如何根据语法告诉算子关联性?

从...开始

T->L S T|L

并考虑可以从T产生的a+b+c ,如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM