Я использую для программирования в 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?
Да просто матч против exp + exp
, Обратите внимание, что для данного правила все его действия должны иметь одно и то же %type
назначен на $$
, В вашем случае это будет выглядеть примерно так:
exp: number { $$ = PrimaryExp($1); }
| exp '+' exp { $$ = AddExp($1, $2); }
Других решений пока нет …