Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我曾经在 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 + exp
%type
$$
exp: number { $$ = PrimaryExp($1); } | exp '+' exp { $$ = AddExp($1, $2); }