簡體   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