0
我有以下語法:使用Mid規則操作 - 野牛解析器
expr : FUNC '(' expr ')' { ... }
| FUNC '(' expr ',' expr ')' { ... }
| expr '+' expr { ... }
| expr '-' expr { ... }
| NUM { ... }
而且我想進入EXPR,根據不同的規則之前執行的FUNC規則不同中旬規則行動。
含義:
expr : FUNC { DO_ACTION_1 } '(' expr ')' { ... }
或
expr : FUNC '(' { DO_ACTION_1 } expr ')' { ... }
和在另一種情況下:
expr : FUNC { DO_ACTION_2 } '(' expr ',' expr ')' { ... }
或
expr : FUNC '(' { DO_ACTION_2 } expr ',' expr ')' { ... }
,但我一直在減少/減少錯誤,而$ 1(或$ 2,取決於上述用法)永遠不會減少。
Tompsett - 這並不能解決我的問題。我可以使用類似於你所建議的FUNC MIDAC'('expr')'和FUNC MIDAC'('expr','expr')',但這對兩個規則都意味着相同的動作。使用MIDAC規則不會發生衝突。在我的問題中,我指出我需要不同的行動。如果規則與func 1 arg匹配,我需要在進入expr之前執行操作A.如果func 2參數匹配,我需要在進入expr之前執行操作B.這是問題。 –