私が間違っているかもしれませんが、今のところ、C#/.NET 用の直接的な flex/bison (lex/yacc) ポートはないようです。
LALR パーサーでは GPPG/GPLEX を見つけ、LL パーサーでは有名な ANTLR があります。しかし、flex/bison 文法をできるだけ再利用したいと考えています。
- C# 用の flex/bison の直接ポートはありますか?
- 人々が通常 C# に使用するレクサー/パーサーは何ですか? その選択に理由はありますか?
あなたの最善の策はGPLEX/GPPGになると思います。これは、私が知っているC#のYacc / Lexに最も近いものであり、アクションをC#に移植する必要があります。
また、Coco / R、ANTLR(もちろん)を使用し、最近ではIrony.net、fslex / fsyacc(F#)、およびfparsec(F#)で遊んだことがあります。
ここにいくつかのリンクがあります
どちらか一方を使用する技術的な理由はありません。主に楽しみのためにこれらをいじっています。私はかなりの数年前に作業プロジェクト用にいくつかのDSLを作成しましたが、それらにスキャナー/パーサーを手動でロールしました(当時、私は主にPascalで作業していましたが、TP Lex/Yaccが私の好みに合わないことがわかりました。 DSLは十分に単純でした)。FParsecとIronyは私の好みに最も合っていることがわかりました。もう一方はやや「乱雑」(エレガンスに欠けている)であることがわかりました。
「Managedbabel」拡張機能を見てください。lexとyaccのかなりクラシックなスタイルの移植版があります。
http://msdn.microsoft.com/en-us/library/bb165037(VS.80).aspx