2012-03-24 142 views
-2

我有以下語法:YACC降低/減少衝突

  1. X:(Z)O
  2. X:N
  3. Z:X
  4. Z:ZX
  5. ○:+ | - |/| *
  6. N:[0..9]

解析器堆CURREN tly是:「(z(zx」,下一個令牌是)+)*

規則3或4中的哪一個要解析器來減少,爲什麼?

謝謝

+0

哪些是終端符號?衝突中涉及哪些規則? YACC展示的信息是什麼?這看起來非常像家庭作業。請優化您的問題。 – mschonaker 2012-03-24 20:58:49

+0

是的,這是一項功課。終端符號是0..9和+ -/*。我沒有得到的是分析器是將x減少到z還是將zx減小到z。可能是第一個,因爲規則z:x是第一個,但我不確定。 – user1290468 2012-03-24 21:10:46

+1

'yacc -v'的輸出會告訴你語法是什麼(或'bison -v')。 – 2012-03-24 21:59:24

回答

0

答案是:規則4.

直觀地說,這是因爲規則3和規則4是左關聯的一對X的轉換到Z的貪婪方式。

另一個原因是,如果我們減少規則3,我們會在解析棧上結束Z Z,這不是可能的句子形式。語法不會生成具有Z Z的偏導數。