我是新來的野牛解析,我不明白它是如何工作的。我有以下語法,我一直保持最低限度以突出問題。野牛減少/減少
%left '~'
%left '+'
%token T_VARIABLE
%%
start: expr;
expr: composite_expr | variable_expr;
variable_expr: T_VARIABLE;
composite_expr:
expr '+' expr
| '~' variable_expr { do_something_1(); }
| '~' composite_expr { do_something_2(); }
;
%%
正如你所看到的,我想這取決於接下來的那種表情的不同功能,適用於'~'
運營商。但是,這會產生2個減少/減少衝突。
當然,如果我重寫這樣的composite_expr規則...
composite_expr:
expr '+' expr
| '~' expr { /* ??? */ }
;
...那麼有沒有衝突,但現在我不能把任何do_something_1()
或do_something_2()
因爲我再也無法分辨expr
是variable_expr
或composite_expr
。
有沒有其他辦法可以做到這一點?任何人都可以解釋爲什麼那裏首先減少/減少衝突?
請記住,這是一個精簡版本,實際上,規則composite_expr
是非常長的。所以重複它是不可能的。
感謝您的回答。我非常喜歡我將立即使用的最後一個解決方案。 – linepogl