2016-01-06 70 views
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++和野牛存在类似的机制呢?

回答

1

是的,只是匹配exp + exp。请注意,对于给定的规则,其所有操作必须具有相同的%type,分配给$$。在你的情况下,它会是这个样子:

exp: number  { $$ = PrimaryExp($1); } 
| exp '+' exp { $$ = AddExp($1, $2); } 
+0

但哪一个PrimaryExp和AddExp @ltcmelo – shengyushen

+0

这些都是这将创建一个AST节点的功能?这只是一个例子。 –

+0

是PrimaryExp和AddExp的某种联合类型?或者可以由野牛推断的东西? – shengyushen