web-dev-qa-db-ja.com

Lex / Yacc for C#?

実際、本格的なLex/Yaccではないかもしれません。 Webアプリを管理するためのコマンドインタープリターフロントエンドを実装しています。文法定義を取得して、オブジェクトのメソッドを直接呼び出すパーサーに変換するものを探しています。 ASP.NET MVCが呼び出すコントローラーメソッドを把握する方法、および引数をポニーアップする方法と同様です。

したがって、ユーザーがコマンドプロンプトで「createfoo」と入力した場合、メソッドを透過的に呼び出す必要があります。

private void Create(string id) { /* ... */ }

ああ、そしてそれがそれらのコントローラーメソッドの(例えば)属性からヘルプテキストを生成することができれば、それも素晴らしいでしょう。

21
Roger Lipscombe

Lex/Yaccが役立つかどうかはわかりません。必要なのは、手書きで書くのが速い基本的なトークナイザーとインタープリターだけです。まだルートの解析を行っている場合は、 Irony を参照してください。

補足として:PowerShellとそのコマンドレットについて検討しましたか?

11
Anton Gogolev

私はGPLEX/GPPGを使用していくつかの小さなプロジェクトを実行しました。これは、C#でのLex/YACCの非常に単純な再実装です。上記の他のツールを使用したことがないため、実際に比較することはできませんが、これらは正常に機能しました。

GPPGは ここ およびGPLEX ここ で見つけることができます。

そうは言っても、私は同意します。完全なLex/YACCソリューションはおそらくあなたの問題にとってやり過ぎです。 IronPythonを使用してバインディングのセットを生成することをお勧めします。これは.NETコードと簡単にインターフェースし、プログラマー以外の人は基本的な構文がかなり使いやすいと感じているようです。

14
Andy Mortimer

C#をサポートしている Antlr もご覧ください。

8
Kris Erickson

まだ初期のCTPなので、本番アプリでは使用できませんが、Oslo/MGrammarに興味があるかもしれません: http://msdn.Microsoft.com/en-us/oslo/

5
KristoferA

ジソンは最近多くの注目を集めています。これは、javascriptへのBisonポートです。非常に単純な性質であるため、jison解析/字句解析テンプレートをphpに移植し、次にC#に移植しました。それはまだ非常に新しいですが、機会があれば、ここでそれを見てください: https://github.com/robertleeplummerjr/jison/tree/master/ports/csharp/Jison

4
Robert Plummer

Lex/yaccはすでにSDKの1つ(つまりRTM)に含まれていると思います。 Windowsまたは.NETFrameworkSDKのいずれか。

3
Jonathan Parker

Gardens Point Parser Generator here C#にYacc/Bison機能を提供します。ダウンロードできます こちら 。 GPPGを使用した便利な例を示します ここ

3
Tamas Ionut

csflex --flexのC#ポート-最も有名なunixスキャナージェネレーターをお勧めします。

3
Bartek Szabat

アルファ版ソフトウェアを恐れず、独自の言語を作成するためにLex/Yaccに代わるものが必要な場合は、 Oslo を調べるとよいでしょう。 昨年のPDC からのセッションTL27およびTL31のセッション記録を確認することをお勧めします。 TL31は、オスロを使用したドメイン固有言語の作成に直接対応しています。

3

Coco/Rは、.NETを実装したコンパイラジェネレータです。それを試すこともできますが、そのようなライブラリを機能させる方が、独自のトークナイザーを作成するよりも速いかどうかはわかりません。

http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/

3
rix0rrr

念のため、C#for C#でのレクサーとLALRパーサーの実装:

http://code.google.com/p/naive-language-tools/

Lex/Yaccと同じように使用できるはずですが、これらのツール(NLT)はジェネレーターではありません。したがって、速度を忘れてください。

1
greenoldman

アントンが言ったように、PowerShellはおそらく行く方法です。 Lex/yaccの実装が必要な場合は、 Malcolm Crowe が適切なセットです。

編集:コンパイラツールへの直接リンク

1
Kieron