2016-01-06 2 views
0

Я использую программу в ocaml и использую ocalmyacc для генерации парсера. Один очень полезно перо OCaml является его вариант типа, как это:Как элегантно обрабатывать правило с несколькими компонентами в bison

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

с таким типом, можно построить структуру данных AST очень элегантно в синтаксический анализатор для представления ехр так:

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

Так что если в C++ и бизоне есть аналогичный механизм?

ответ

1

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

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

Но где PrimaryExp и AddExp @ltcmelo – shengyushen

+0

Это функция, которая создаст узел AST?. Это просто пример. –

+0

являются PrimaryExp и AddExp некоторыми типами объединения? или что-то, что может быть выведено бизоном? – shengyushen

Смежные вопросы