如何优雅地处理野牛中的多个组件的规则
问题描述:
我用ocaml进行编程并使用ocalmyacc来生成解析器。 ocaml的的一个非常有用的羽毛是其变体类型是这样的:如何优雅地处理野牛中的多个组件的规则
type exp = Number of int
| Addexp of exp*exp
具有这样的类型,我可以很优雅在解析器构建AST数据结构来表示一个这样的EXP:
exp :
number {Number($1)}
| exp1 + exp2 {Addexp($1,$3)}
那么如果C++和野牛存在类似的机制呢?
答
是的,只是匹配exp + exp
。请注意,对于给定的规则,其所有操作必须具有相同的%type
,分配给$$
。在你的情况下,它会是这个样子:
exp: number { $$ = PrimaryExp($1); }
| exp '+' exp { $$ = AddExp($1, $2); }
但哪一个PrimaryExp和AddExp @ltcmelo – shengyushen
这些都是这将创建一个AST节点的功能?这只是一个例子。 –
是PrimaryExp和AddExp的某种联合类型?或者可以由野牛推断的东西? – shengyushen