1

私は OCaml の初心者で、パーサーを作成しようとしています。クラスのすべてのメソッドを格納するリストが必要です。これは、.mly ファイルにある一部です。

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

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

ここで何が起こっているのかを正確に説明できる人はいますか? 特に :: 操作。グーグルで検索しましたが、ドキュメントでオペレーターを見つけることができませんでした。

リストが空である可能性があること、またはクラス内のすべてのメソッドでリストを埋めるために適切な再帰呼び出しを行うことがわかりました。method_declメソッドを表す特定のトークンの組み合わせの一致を探すだけです。

4

2 に答える 2

4

コメントで述べたように、演算子は type の要素を typeのリストに::連結するために使用されます。ちょっとした例:'a'a list

1 :: [2;3]リストを生成する[1;2;3]ので、リストの先頭に要素を追加します。

于 2015-09-11T13:45:42.880 に答える
0

他の誰もが言ったように、 :: は要素を同じ型のリストに連結します。余談ですが、2 つのリストを連結する必要がある場合は、@ 記号を使用できます。次に例を示します。

[1;2;3]@[4] はリスト [1;2;3;4] を与える

于 2016-06-07T12:11:23.933 に答える