![](/img/trans.png)
[英]Can a BNF grammar that does not follow operator associativity and precedence rules be considered as an unambiguous grammar?
[英]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.