如何在野牛中优雅地处理多个组件的规则

时间:2016-01-06 13:35:37

标签: c++ bison bisonc++

我用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中存在类似的机制呢?

1 个答案:

答案 0 :(得分:1)

是的,只需与exp + exp匹配即可。请注意,对于给定规则,其所有操作必须具有分配给%type的相同声明$$。在你的情况下,它看起来像这样:

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