3
我一直在試圖解決看似簡單的轉換/減少衝突無濟於事。當然,如果我只是忽略衝突,分析器工作正常,但如果我重新組織規則,我會感覺更安全。在這裏,我已經簡化一個比較複雜的語法的單衝突:由於先行令牌限制,在yacc中移位/減少衝突?
statement_list
: statement_list statement
|
;
statement
: lvalue '=' expression
| function
;
lvalue
: IDENTIFIER
| '(' expression ')'
;
expression
: lvalue
| function
;
function
: IDENTIFIER '(' ')'
;
隨着yacc的詳細選項,我得到的描述與衝突提到的狀態此輸出文件:
state 2
lvalue -> IDENTIFIER . (rule 5)
function -> IDENTIFIER . '(' ')' (rule 9)
'(' shift, and go to state 7
'(' [reduce using rule 5 (lvalue)]
$default reduce using rule 5 (lvalue)
謝謝你的任何幫助。
我沒有考慮過這樣的輸入。那麼,我解析的語言需要這種模糊性,所以我想我會忽略這個衝突。 – Skyler 2011-01-15 09:07:42