これはANTLR対BISONではなく、金属質問への手でコード化されたペダルです。
また、バイナリ形式の解析用です。字句解析はありません。LL(1)パーサーはプレフィックスのエンコーディングで効率的ですが、LR(1)はより効率的です。
答えて
厳密なプレ(またはポスト)順序式を解析するコストは、トップダウン技術またはボトムアップ技術のいずれかを使用して簡単です。それは、他のタスクのいずれか、つまり字句解析でさえも矮小になります。小さなスピードの違いは、アルゴリズムの戦略ではなく実装の詳細の結果になります。
LR(1)パーサーを使用することには意味がありません。プリオーダーまたはポストオーダーの表現ではトークンルックアヘッドは必要ありません。 LR(0)はうまくいくでしょう。便利なLR(0)パーザージェネレーターを見つけることはまずありませんが、実際にパーザーを手書きして作業を単純化する場合は、
現在、LL(1)とLR(1)を無視して、通常は独自の解析コードをローリングしてこれらの種類の解析を解析します。以前に解析され、評価された部分式のスタックを維持し、スタックから上位2つのアイテムをポップし、それらをマージするか(別の演算子を読んだ場合)、何かをスタックにプッシュします。
実際にそのスタックを実装する方法はいくつかあります。スタックを明示的なスタックデータ構造にすることができます。左から右に入力をスキャンし、必要に応じてプッシュしてポップします。これは、LR(1)パーサがどのように動作するかにスタイルに最も近いものです。なぜなら、シフト(pushing)と縮小(popping)の観点から考えているからです。代わりに、再帰的アルゴリズムを使用して、呼び出しスタックを明示的スタックの代わりにすることができます。これは、LL(1)解析がどのように機能するかに精通しています。
この場合、LL(1)とLR(1)の両方を解析すると、生のパフォーマンスを気にするだけで、過剰なオーバーキルのように見えます。彼らは、大量の一般的な文法を扱うように設計されており、テーブルからのオーバーヘッドがあなたのパフォーマンスに悪影響を与える可能性があります。私はちょうど2つの異なる方法(明示的なスタック/ボトムアップ対暗黙のスタック/トップダウン)でコードを書いて、2つのうちどれが実際より速く終わるかを見てみよう。
この記事で、LL and LR Parsing Demystified、私の直感をバックアップします:
ポーランドと直接逆ポーランド記法はそれぞれ、LLとLRの解析に、私の見解では、対応しています。
- 1. Celeryはローカルシステムで効率的ですが、Pythonのマルチプロセッシングは効率的ですか?
- 2. より効率的なスクリプトですか?
- 3. はX^n(1/n)よりも効率的ですか? (nは整数)
- 4. 効率的な方法は、(-1)^ nはC++で
- 5. より効率的なjquery
- 6. Datatableよりも効率的
- 7. より効率的なコード
- 8. より効率的なルート
- 9. より効率的なjQuery
- 10. 1から100までの90%で効率的にソートする
- 11. 各ループでより効率的に
- 12. mysqlでは、ストアドプロシージャはより効率的ですか?
- 13. forループはC++でより効率的ですか?職場で
- 14. アセンブリでx ++はx = x + 1およびx + = 1よりも効率的ですか?
- 15. はThread.Sleep(Timeout.Infinite)です。 while(true){}よりも効率的ですか?
- 16. WPFでデータバインディングが効率的ですか?
- 17. Javascript:lengthメソッドは効率的ですか?
- 18. mySQLクエリは効率的ですか?
- 19. BigIntegerは効率的ですか?
- 20. getElementById()は効率的ですか?
- 21. String.hashCode()は非効率的ですか?
- 22. これは非効率的ですか?
- 23. DOループは非効率的ですか?
- 24. が効率的に
- 25. getまたはbasename()はより効率的ですか?
- 26. sendRedirectまたはリクエストディスパッチはより効率的ですか?
- 27. BoundStatementはCassandraのSimpleStatementよりも効率的ですか?
- 28. varcharフィールド - 2の威力はより効率的ですか?
- 29. @ProducesはEL式のゲッターより効率的です
- 30. どちらがより効率的で、atan2かsqrtですか?
ようこそスタックオーバーフロー!私はあなたの問題を推測できる限りあなたの質問を編集しました。しかし、多くの人々がそれを見ることができるように、より多くの説明を追加してください。 P Good Luck! – manetsus
バイナリ形式の場合でも、トークンを特定する必要があります(たとえば、プロトコルに応じて、入力ストリームから4バイト整数をリトルエンディアンまたはビッグエンディアンのバイト順に抽出する必要があります)。字句解析の道徳的な同等物です。そして、ほとんどの場合、トークンを構文形式に関連づける比較的簡単なコスト(「解析」)よりも多くのサイクルを要します。 – rici