2016-01-06 71 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