![](/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.