学習演習として、機能パーサーライブラリfparsec(FParsec )を使用してgraphvizドット言語( DOT言語)のパーサーを実装しようとしています。言語はグラフを記述します。
言語の定義を見て、私は次の定義を書き留めることを余儀なくされました。
let rec pstmt_list = opt(pstmt .>> opt(pchar ';') >>. opt pstmt_list)
ここpstmt
で、およびpchar ';'
はパーサーで.>>
あり>>.
、左側のパーサーの出現と右側のパーサーの出現を組み合わせ、opt
オプション値としてその引数パーサーのオプションの出現をパーサーします。ただし、この定義は「...結果の型は無限になります...」と文句を言っても機能しません。
この例は、上記のリンク先のDOT言語を見るとおそらく最も簡単に理解できます。
私は次の一見リンクされた質問を知っています:
しかし、私のF#の知識は、それらがここに当てはまるとしても、まだそれらを翻訳するには十分ではないかもしれません。