я следующие грамматики:Использование Mid Правило Действия - зубр анализатор
expr : FUNC '(' expr ')' { ... }
| FUNC '(' expr ',' expr ')' { ... }
| expr '+' expr { ... }
| expr '-' expr { ... }
| NUM { ... }
И я хотел бы, чтобы выполнять различные середине правило-действие на правило 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 сопоставлено, мне нужно выполнить действие A перед входом expr. Если func 2 args соответствует, мне нужно выполнить действие B перед входом expr. Это проблема. –