-2
我有以下語法:YACC降低/減少衝突
- X:(Z)O
- X:N
- Z:X
- Z:ZX
- ○:+ | - |/| *
- N:[0..9]
解析器堆CURREN tly是:「(z(zx」,下一個令牌是)+)*
規則3或4中的哪一個要解析器來減少,爲什麼?
謝謝
我有以下語法:YACC降低/減少衝突
解析器堆CURREN tly是:「(z(zx」,下一個令牌是)+)*
規則3或4中的哪一個要解析器來減少,爲什麼?
謝謝
答案是:規則4.
直觀地說,這是因爲規則3和規則4是左關聯的一對X的轉換到Z的貪婪方式。
另一個原因是,如果我們減少規則3,我們會在解析棧上結束Z Z,這不是可能的句子形式。語法不會生成具有Z Z的偏導數。
哪些是終端符號?衝突中涉及哪些規則? YACC展示的信息是什麼?這看起來非常像家庭作業。請優化您的問題。 – mschonaker 2012-03-24 20:58:49
是的,這是一項功課。終端符號是0..9和+ -/*。我沒有得到的是分析器是將x減少到z還是將zx減小到z。可能是第一個,因爲規則z:x是第一個,但我不確定。 – user1290468 2012-03-24 21:10:46
'yacc -v'的輸出會告訴你語法是什麼(或'bison -v')。 – 2012-03-24 21:59:24