22

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

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

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

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

4

12 に答える 12

15

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

GPPG はここにあり、GPLEXはここにあります。

そうは言っても、私は同意します、完全な LEX/YACC ソリューションはおそらくあなたの問題に対して過剰です。IronPython を使用してバインディングのセットを生成することをお勧めします。これは .NET コードと簡単にインターフェースでき、プログラマーではない人でも基本的な構文はかなり使いやすいと思われ、使用することを選択した場合は多くの柔軟性とパワーが得られます。

于 2010-03-31T10:53:40.503 に答える
11

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

于 2009-03-19T14:34:41.453 に答える
11

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

余談ですが、PowerShell とそのコマンドレットについて考えたことはありますか?

于 2009-02-12T09:29:32.743 に答える
5

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

于 2009-02-12T09:36:01.840 に答える
4

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

于 2013-04-21T15:43:11.890 に答える
3

アルファ版ソフトウェアを恐れず、独自の言語を作成するために Lex / Yacc に代わるものが必要な場合は、Osloを検討してください。昨年の PDCのセッション TL27 と TL31 のセッション レコーディングをご覧になることをお勧めします。TL31 は、Oslo を使用したドメイン固有言語の作成に直接取り組んでいます。

于 2009-02-12T09:39:59.303 に答える
3

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

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

于 2009-02-12T09:41:37.007 に答える
3

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

于 2012-05-11T16:51:02.663 に答える
3

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

于 2009-03-02T03:22:51.623 に答える
3

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

于 2009-02-12T10:44:42.487 に答える
1

Anton が言ったように、PowerShell はおそらく進むべき道です。lex/yacc の実装が必要な場合は、Malcolm Croweが良いセットを提供しています。

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

于 2009-02-12T09:31:49.557 に答える
1

記録のために、C# の C# でのレクサーと LALR パーサーの実装:

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

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

于 2012-12-12T20:41:50.217 に答える