我是新來的野牛,我試圖做一個文法解析表達式。 我現在面臨着一種轉變/減少困惑,我無法解決。解決表達語法中的移位/減少衝突
語法如下:
%left "[" "("
%left "+"
%%
expression_list : expression_list "," expression
| expression
| /*empty*/
;
expression : "(" expression ")"
| STRING_LITERAL
| INTEGER_LITERAL
| DOUBLE_LITERAL
| expression "(" expression_list ")" /*function call*/
| expression "[" expression "]" /*index access*/
| expression "+" expression
;
這是我的語法,但我面對的轉變/減少與這兩個規則"(" expression ")"
和expression "(" expression_list ")"
衝突。 我該如何解決這個衝突?
編輯:我知道我可以使用優先級攀登來解決這個問題,但我不想這樣做,因爲這只是表達式語法的一小部分,而表達式語法的大小會使用優先級爬升爆炸。
如果這是您的語法的整體,它沒有轉換 - 減少衝突。但是,我懷疑這是你的整個語法。 – rici
哇我現在覺得真是愚蠢......我在另一條規則中發現了一個錯字,這影響了這一條 – Exagon
這就是爲什麼我們要求[mcve],這與「我的代碼的幾行」有很大不同。如果您製作[mcve],它通常會幫助您澄清問題,爲您解決問題。 – rici