как элегантно обрабатывать правило с несколькими компонентами в зубрах

Я использую для программирования в ocaml и использовать ocalmyacc для генерации парсера. Одним из очень полезных перьев ocaml является его тип варианта:

type exp = Number of int
| Addexp of exp*exp

с таким типом я могу очень элегантно построить структуру данных AST в синтаксическом анализаторе для представления exp следующим образом:

exp :
number {Number($1)}
| exp1 + exp2 {Addexp($1,$3)}

Так существует ли подобный механизм в C ++ и Bison?

0

Решение

Да просто матч против exp + exp, Обратите внимание, что для данного правила все его действия должны иметь одно и то же %type назначен на $$, В вашем случае это будет выглядеть примерно так:

exp: number      { $$ = PrimaryExp($1); }
|    exp '+' exp { $$ = AddExp($1, $2); }
1

Другие решения

Других решений пока нет …