2009-05-06 18 views
3

私は、このようなベスト・モダン・テキスト解析? AKAいつLexとYaccを使うのですか?

XYZ ARG1,ARG2,ARG3,...,ARGN 

などのコマンドと引数を持つテキストの入力ブロック、1行に1つずつ、としていると私はXYZへの引数は、よくその特定のコマンドのために形成されるとの正しいブロックを実行していることを確認したいですもしあればコード。 〜100コマンドのようなものがありますが、その中には引数の数が異なり、リレーションシップが異なります(コマンドXYZが呼び出された場合は、コマンドABCも呼び出す必要があります)。テキストがCOMMANDENDCOMMAND内に含まれていることが重要である

COMMAND 
XYZ ARG1 
BEF ARG1 ARG2 
ENDCOMMAND 

また、コマンドは、次のような存在します。

通常、このようなものは、正規表現ではなくLexとYaccを使用しますが、もっと現代的なものはありますか?コードはC#で書かれています。 MSDNに古い学校のC LexとYaccではなく、これを行うものはありますか?

答えて

1

「年齢」よりも大きな問題があります。これは、有名なC-ishコンパイラコンパイラがC#で動作するかどうかわからないからです。 Boostの新しい派手な解析テンプレートも同じです。おそらくGrammaticaまたはSpartのような難解なものに行かなければならないとしている

EDIT(私のトップ2 Google hitsを選択する): をもう少し見た後、ANTLRは、C#をサポートしていることが表示されます。 ANTLRは非常によく知られており、LEX/YACCよりはるかに新しいので、私はそれをチェックアウトすることをお勧めします。

+0

まあ、間違っていると思います。 私はCの構文解析ライブラリ、C#ラッパーライブラリ、およびC#アプリケーションを持っています。 –

+0

これは機能しませんか?返事をありがとう、しかし、なぜこれは動作しません教えてください。再度、感謝します。 –

+0

ああ、実際にはパーサをC言語にしてC#でラップすることができます。あなたがLEX/YACCのVisualStudio互換バージョンを見つけることができると仮定します。 Gnuのプリビルドは、一般的にGnuライブラリ形式を使い、Gnuリンカ(ld)を必要とします。 –

0

.NET Frameworkには特別なことはありません。

一見すると、コマンド構造は比較的シンプルなので、ここでの手動解析はうまくいくでしょう。ほとんどの場合、絶え間ない解決策です。 これにより、コマンドの引数の実際の値が構文の妥当性だけでなく正確であるかどうかを確認することもできます。

5

Lex/Yaccの代替品をお探しの場合は、ANTLRをご覧ください。これは、さまざまなlanagagesのコード生成、including C#をサポートしています。

+0

Ick。私は同じことを投稿している間にこれを投稿しました。そのようなことが起きたときの私の一般的な方針は、あなた(恋人)が明らかに天才であり、したがってアップヴォートに値するということです。 :-) –

+0

Hehe、素晴らしい心は似ていると思います。 ;) ありがとうございました! –

4

ANTLRは、レキシングと解析の両方を処理でき、C#(Java、C++、Pythonに加えて)を生成することができます。非常に成熟しており、多くのドキュメントとたくさんの例があります。また、YACCよりもずっと良いエラーメッセージを生成します。

+0

アイマンと同じコメントです。 –

1

このような単純な解析の問題については、再帰的な降下構文解析プログラムを書くことができます。もちろん、あなたの言語は比較的固定されており、完全なプログラミング言語に成長することはありません。それが危険な場合は、弾丸を噛んでANTLRまたは同等のものを使用してください。

1

C#とJavaにリターゲットされたjay、yaccを見てください。これはモノラルプロジェクトに含まれています。

http://code.google.com/p/jayc/

関連する問題