2011-09-12 4 views
4

私はfsyaccにフィードできるC#v4のBNF文法を探していますが、F#を出力できるEBNFベースのパーサージェネレータが見つからない場合は探しています。BNFのC#文法F#

EDIT: 私はC#のためのパーサが、非常に似た文法のための実験的なパーサを書くために見ていると私はそれが簡単にC#の文法で開始することを見つける2つの文法の間に大きなリテラルの重複がありますので、いませんよ単に逸脱するビットを変更するだけです。しかし、私が見つけたのC#v4のための唯一の文法はEBNF

ある代替答えはWikipediaによるEBNFからBNF

+3

私はあなたが固い何かを見つけるとは思わない。私が考えることができる最良の選択肢は、MonoでC#コンパイラのパーサーを使用することです。あなたはそれをコンパイルし、F#からそれを使用することができるはずです(またはF#フレンドリーになるように変更する)。 –

+1

@Tomas:それを指摘してくれてありがとう。私が持っているEBNF文法を書き直し、fsyaccを使ってみよう。私は文法を変えることができる必要があります。私はC#コンパイラを書くのではなく、非常によく似た文法の実験的なコンパイラです。 –

+0

@TomasPetricekあなたが答えとしてそれを書くなら、私は答えにあなたに報いるでしょう。私はモノラルC#コンパイラを代わりに拡張しました。私が思ったよりもはるかに少ない仕事でした –

答えて

1

は、私の以前のコメントを拡張 - 私が直接使用することができC#のための任意の固体文法はないと思います。いくつかの例がありますが、おそらくLINQのようなすべての新機能をカバーしているわけではなく、あまりうまくテストされていないこともあります。

私が考えることができる最良の選択肢は、MonoでC#コンパイラのパーサーを使用することです。これはC#で書かれています。オープンソースで、最近のすべての機能が含まれています(かなり安定しています)。詳細については、Mono C# compilerを参照してください。あなたはそれをコンパイルし、F#からそれを使用することができるはずです(またはF#フレンドリーになるように変更する)。

1

へのコンバータとなり、ココ/ Rは、EBNFベースのパーサジェネレータです。そして彼らのhomepageによれば、Coco/RのF#ポートがあります(しかし、2007-07-23が最後に更新されました。あなたがそれをチェックアウトすると、私はあなたの経験に興味を持っています。

私はC#v2のBNF文法を見つけた:http://www.devincook.com/GOLDParser/grammars/index.htm

+1

+1;これで、C#v2の文法はhttp://goldparser.org/grammars/に移動しました。 –

1

文法がいくつか見つかりましたhere; C#4.0まで含まれているようです。

関連する問題