2015-09-11 39 views
1

我是OCaml的初學者,並試圖構建一個解析器,我想要一個列表將所有方法存儲在我的類中。這是我在.mly文件中的一部分。運算符:: OCaml

init_method_list: 
    { [] } 
    | method_list method_decl { List.rev($1) } 
; 

method_list: 
    method_decl { [ $1 ] } 
    | method_list method_decl { $2 :: $1 } 
; 

任何人都可以解釋到底發生了什麼?特別是::操作。一直在搜索,但無法在文檔中找到運營商。

我得到這個列表可以是空的,或者我們做出正確的遞歸調用來填充它在類中的所有方法。 method_decl只是查找代表方法的特定標記組合的匹配。

+0

預先加上'$ 2'和'$ 1'? – cchantep

+0

在Ocaml中,運算符'::'用於將''a'類型的元素連接到''list'類型的列表。 – alifirat

+0

好的謝謝,它是否將元素預先列在列表的前面? @alifirat – novalain

回答

4

正如我在我的評論說,運營商::是用來'a類型的元素串聯到'a list類型的列表。一個小例子:

1 :: [2;3]產生列表[1;2;3]所以是它將元素前置到列表的前面。

+1

的基本教程'::'不是一個真正的運算符,而是一個句法符號 - 這就是爲什麼它被允許出現在匹配模式運營商不是。 –

0

正如其他人所說,::將一個元素連接到相同類型的列表上。僅作爲一個額外的處理,如果需要連接兩個列表,則可以使用@符號,例如:

[1; 2; 3] @ [4]將給出列表[1; 2; 3; 4]