0

我曾经在 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中是否存在类似的机制呢?

4

1 回答 1

1

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

exp: number      { $$ = PrimaryExp($1); }
|    exp '+' exp { $$ = AddExp($1, $2); }
于 2016-01-06T13:50:43.803 回答