如何在bison中优雅地处理具有多个组件的规则

how to elegantly handle rule with multiple components in bison

本文关键字:组件 规则 处理 bison      更新时间:2023-10-16

我使用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); }