[英]Bison/Yacc reduce reduce conflict for a specific grammar example
我的編譯器類有一個解析器項目。 我無法解決其中一項規則的減少/減少沖突。
該語法規則的圖形表示可從以下鏈接獲得(對不起,由於stackoverflow策略,我無法在此處發布圖像):
所有的橢圓都是終端符號。
由於該規則看起來有些復雜,因此我嘗試將其分解為較小的部分。 這是我構造語法的嘗試:
type : id_or_int brackets_or_end
;
id_or_int : IDnum
| INTnum
;
brackets_or_end : brackets remainingpartboe
|
;
brackets : LBRACnum RBRACnum brackets
|
;
remainingpartboe: DOTnum type
|
;
請注意,terminal是以后綴num結尾的單詞,例如DOTnum。 其余為非終結符。
野牛正在報告以下沖突
mj-parser.y: conflicts: 1 reduce/reduce
mj-parser.y:122.18: warning: rule useless in parser due to conflicts:
brackets_or_end: /* empty */
請注意,上面的野牛錯誤是指brackets_or_end規則的第二種替代產生。
請通過建議另一種編寫語法的方法來幫助解決此沖突。 順便說一下,我已經看過Bison的詳細輸出,但是並沒有太大幫助。
謝謝-sas
(在評論中回答的問題。轉換為社區Wiki答案。請參閱無答案的問題,但問題已在評論中解決(或在聊天中擴展) )
@BobDalgleish寫道:
請注意,您有兩個非終結符,它們在同一生產樹中可以為空。 因此,空字符串可以減少為方括號或方括號或括號。 這行不通。
OP寫道:
你是絕對正確的鮑勃。 感謝您的提示:方括號不應該減少ε。 這將消除減少-減少沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.