0

私は現在、ここに示されている言語をJavaで実装することを検討しています。プレゼンテーションは少し長いですが、基本的には動的な音声を作成するためのDSLです。例:

rule ExampleRule
{
    criteria Criterion1 Criterion2 Criterion3=value
    response ExampleResponse
    remember State:=1
    trigger Object TriggerName
    ApplyFacts "State1:1:0,State2:1:0"
}
response ExampleResponse
{
    say "Text" then object ExampleRule
    say "Text" then any ExampleRule
    say "Text"
    scene "Scenepath"
}

ANTLR、JavaCC、JFlexなどのさまざまなパーサージェネレーターを見てきましたが、趣味のプロジェクトのように、StringTokenizer/Scannerを使用して独自のパーサーをロールするかどうか疑問に思っています。

私は以前にANTLRを決定しましたが、生成されたソースコードでフルパス名を使用するANTLRでいくつかの問題が発生し、ランタイムライブラリは少し重いように見えました。3つのパーサーライブラリまたは組み込みのJavaの代替ライブラリを比較する多くの情報を見つけることができませんでした。

言語の性質を考えると、各パーサーの長所/短所は何ですか?

4

3 に答える 3

2

パーサジェネレータを使用する利点:

  1. 構造による正確さ。生成されたパーサーは、文法で指定された言語を正確に受け入れます。Knuth1965以降、さまざまな種類のジェネレーターに対して、あらゆる種類のCS証明があります。再帰下降など、自分でロールする場合、それをすぐに証明することはできず、簡単にテストすることもできません。

  2. 開発時間。ジェネレーターのfoiblesに頭を悩ませると、パーサーは入力できる速度で構築されます。

「言語の性質を考えると」はそれほど重要ではありません。主要な実務家は、1960年代に算術式よりも複雑なものを実装する際に大きな間違いを犯しました。そのため、私のポイント(1)が私のポイント(1)です。

于 2012-12-12T06:55:58.190 に答える
0

適切な自動化(認識)メカニズムを必要とする言語には4つのタイプがあります。StringTokenizerとScannerは、正規言語(最も単純な言語)に適していますが、文脈自由言語(プログラミング言語、XML、ネストされた構造を含むその他の言語など)には、より高度なメカニズム(プッシュダウンオートマトンなど)が必要です。

非常に詳細な外観がなければ、あなたの場合はANTLRなどのツールを使用したほうがよいようです。それらは学習を必要としますが、文脈自由言語用に独自のレクサーとパーサーを作成する方法を学ぶよりもはるかに少ないです。

于 2012-12-12T07:55:06.367 に答える
-1

一般的に、これはあなたが尋ねる群衆に依存します。

単一のコンパイラを維持し、下位互換性の要件(以前のバージョンまたは他の方言(-options)が1つのパーサーに統合されている)に苦しんでいる、解析速度などの要件があるコンパイラの人々と話す場合は、通常、再帰下降が必要です(ほとんどの本番コンパイラRDです)。

さらに別のベンダーのシリコン用にカスタマイズされたCまたはC++コンパイラを日常的に作成している(プロでもある)コンパイラの人々と話すと、議論はEJPのようなものになります。もちろん、彼らは通常、すでに持っているC(++)標準文法を採用し、アーキテクチャをカスタマイズした構造をいくつか追加します。

于 2012-12-12T18:39:58.203 に答える