我用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 :(得分:1)
是的,只需与exp + exp
匹配即可。请注意,对于给定规则,其所有操作必须具有分配给%type
的相同声明$$
。在你的情况下,它看起来像这样:
exp: number { $$ = PrimaryExp($1); }
| exp '+' exp { $$ = AddExp($1, $2); }