17

私が間違っているかもしれませんが、今のところ、C#/.NET 用の直接的な flex/bison (lex/yacc) ポートはないようです。

LALR パーサーでは GPPG/GPLEX を見つけ、LL パーサーでは有名な ANTLR があります。しかし、flex/bison 文法をできるだけ再利用したいと考えています。

  • C# 用の flex/bison の直接ポートはありますか?
  • 人々が通常 C# に使用するレクサー/パーサーは何ですか? その選択に理由はありますか?
4

3 に答える 3

18

あなたの最善の策はGPLEX/GPPGになると思います。これは、私が知っているC#のYacc / Lexに最も近いものであり、アクションをC#に移植する必要があります。

また、Coco / R、ANTLR(もちろん)を使用し、最近ではIrony.net、fslex / fsyacc(F#)、およびfparsec(F#)で遊んだことがあります。

ここにいくつかのリンクがあります

Fparsec

ココ/R

Irony.net

GardensPointパーサジェネレータ

ガーデンズポイントレックス

どちらか一方を使用する技術的な理由はありません。主に楽しみのためにこれらをいじっています。私はかなりの数年前に作業プロジェクト用にいくつかのDSLを作成しましたが、それらにスキャナー/パーサーを手動でロールしました(当時、私は主にPascalで作業していましたが、TP Lex/Yaccが私の好みに合わないことがわかりました。 DSLは十分に単純でした)。FParsecとIronyは私の好みに最も合っていることがわかりました。もう一方はやや「乱雑」(エレガンスに欠けている)であることがわかりました。

于 2010-06-04T17:17:41.780 に答える
2

ANTLRは非常に成熟した(そして素晴らしい)パーサー/レクサージェネレーターです。元々はJavaコードを生成していましたが、現在はC#を含むいくつかの言語をターゲットにできます。

于 2010-06-09T16:15:19.703 に答える
1

「Managedbabel」拡張機能を見てください。lexとyaccのかなりクラシックなスタイルの移植版があります。

http://msdn.microsoft.com/en-us/library/bb165037(VS.80).aspx

于 2010-06-05T10:19:10.430 に答える