2

.Netプラットフォームで解析する必要のある非常に単純なDSLがあります。パーサーの経験があまりないので、F#(fsLex、fsYacc、FParsec)を使用した例を見てきました。私はF#にあまり詳しくありませんが、ワークフローとLINQの経験はあります。

DSLの単純さを考えると、LINQを使用してレクサーを実装する必要はありません。ワークフロー(私はV4を使用します)は文法を実装するのに魅力的です。私はそれをよく知っているので、そのグラフィックの性質を考えると他の人に説明しやすく、Microsoftによってサポートされており、おそらく進化し続けます。

ただし、DSLがより洗練されたものになると、WF実装がネストされたアクティビティの地獄になり、LINQベースのレクサーが同じように機能することを想像できます。その時点で、F#を学習し、F#ツールの1つを使用する方が理にかなっています。

他の人がWFとF#の解析ツールを比較して単純なDSLインタープリターを実装したかどうか、そして結論はどうなるのか疑問に思います。

4

1 に答える 1

4

DSL が何をするべきか、そして将来どれだけ複雑になるかについてもう少し知らずに答えを出すのは難しいです。DSL がワークフローに関するものである場合、WF は解析結果を保存するための非常に論理的な選択のように思えます。

言語がそれほど複雑でない場合は、LINQ または手動で作成された小さなパーサーでうまくいく可能性があります。シンプルに保ち、同僚が知っているツールを使用することをお勧めします。

ただし、言語がより複雑になると、このアプローチはすぐに崩壊する傾向があります。しかし、利点として、パーサーを切り替えることができます。あなたが決して持っていないかもしれない問題を解決しないでください。

個人的には、解析には FParsec がとても気に入っています。F# についてある程度の知識が必要ですが、頭をつかめば、テキストを AST に変換するのに非常に強力であり、EBNF を意味不明なコードに変換する「魔法のようなステップ」がないという点で非常に無駄がありません。それがどのように機能するかを見て、それを調整してください。

F# と FParsec に飛び込む時間がない場合は、FParsec に似ているが C# 用のIronyもあります。

これはあなたが私たちに言ったことから私が言えることです。具体的な問題があれば教えてください。

Rgds GJ

于 2011-10-03T12:09:34.123 に答える