[論文レビュー] Yacc is dead
この論文では、Brzozowskiの導出概念を一般化することで、文脈自由文脈の文法とパーサー組み合わせの両方のための、2つの新しいパース技法を導入する。このアプローチにより、任意の文脈自由文法を扱い、ラージなパースフォレストを生成する、コンパクトで効率的なパースライブラリ(250行未塔)が実現され、スカラとハスケルの両実装でS-Expressionsの処理において秒間数百万トークンの性能を達成する。
We present two novel approaches to parsing context-free languages. The first approach is based on an extension of Brzozowski's derivative from regular expressions to context-free grammars. The second approach is based on a generalization of the derivative to parser combinators. The payoff of these techniques is a small (less than 250 lines of code), easy-to-implement parsing library capable of parsing arbitrary context-free grammars into lazy parse forests. Implementations for both Scala and Haskell are provided. Preliminary experiments with S-Expressions parsed millions of tokens per second, which suggests this technique is efficient enough for use in practice.
研究の動機と目的
- Yaccのような伝統的なパーサー・ツールの限界を克服し、文脈自由言語のパースに原理的で新しいアプローチを導入すること。
- 手動での文法変換を必要とせず、任意の文脈自由文法をサポートする、軽量で合成可能なパースライブラリを開発すること。
- 実世界の応用に適した高いパフォーマンスと実用的効率を達成し、S-Expressionsを用いたベンチマークでその有効性を示すこと。
- 従来、正規表現に用いられていた導出技法を、文脈自由文法およびパーサー組み合わせの分野へ一般化すること。
提案手法
- 正規表現から文脈自由文法へBrzozowskiの導出を拡張し、導出計算による段階的パースを可能にする。
- パーサー組み合わせに作用する一般化された導出演算を定義し、モジュラーかつ合成可能なパース構築を可能にする。
- 曖昧な文法の複数の可能なパースを効率的に表現するため、遅延パースフォレストの表現を設計する。
- 言語に依存しない適用可能性と実用性を示すために、スカラとハスケルの両方でアプローチを実装する。
- 正しく、合成可能であることを保証するため、関数型で不変なスタイルを採用する。
実験結果
リサーチクエスチョン
- RQ1正規表現から得られる導出技法を、任意の文脈自由文法へ一般化することは可能か?
- RQ2一般化された導出演算を用いることで、パーサー組み合わせを効率的かつ正しくパース可能に拡張できるか?
- RQ3これらの一般化された導出を用いて、高性能で合成可能なパースライブラリを構築することは可能か?
- RQ4この導出に基づくパースアプローチは、実際のYaccのような伝統的ツールと比較して、どのように性能を発揮するか?
主な発見
- 一般化された導出アプローチは文脈自由文法へ成功裏に拡張され、任意の文法に対する正しく体系的なパースを可能にする。
- 得られたパースライブラリは非常にコンパクトであり、スカラおよびハスケルの両方で250行未塔に収まる。
- 実装は高いパフォーマンスを達成しており、S-Expressionsの処理において秒間数百万トークンを処理でき、実用的効率を示している。
- 遅延パースフォレストの使用により、性能を犠牲にすることなく曖昧な文法の効率的処理が可能になる。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。