Skip to main content
QUICK REVIEW

[論文レビュー] LL(1) Parsing with Derivatives and Zippers

Romain Edelmann, Jad Hamza|arXiv (Cornell University)|Nov 28, 2019
Logic, programming, and type systems参考文献 50被引用数 5
ひとこと要約

この論文は、コンテキスト自由式の導出に基づく、正式に検証された線形時間の LL(1) パースリングアルゴリズムを提示している。このアルゴリズムはザイパー・データ構造を用いて最適化されており、静的 LL(1) チェック、列挙、およびプリントアウトを備えた、正しく構築されたパーサーコンビネータフレームワークを実現する。LL(1)文法に対して最適なパフォーマンスを達成すると同時に、関数型の純粋性と Coq における形式的検証を維持している。

ABSTRACT

In this paper, we present an efficient, functional, and formally verified parsing algorithm for LL(1) context-free expressions based on the concept of derivatives of formal languages. Parsing with derivatives is an elegant parsing technique, which, in the general case, suffers from cubic worst-case time complexity and slow performance in practice. We specialise the parsing with derivatives algorithm to LL(1) context-free expressions, where alternatives can be chosen given a single token of lookahead. We formalise the notion of LL(1) expressions and show how to efficiently check the LL(1) property. Next, we present a novel linear-time parsing with derivatives algorithm for LL(1) expressions operating on a zipper-inspired data structure. We prove the algorithm correct in Coq and present an implementation as a parser combinators framework in Scala, with enumeration and pretty printing capabilities.

研究の動機と目的

  • 導出に基づくパーサリング技法を用いて、LL(1) コンテキスト自由式の正式に検証された効率的アルゴリズムを開発すること。
  • 一般の導出付きパーサリングにおける立方時間の最悪ケース複雑性を、LL(1) 文法に特化させることで解消すること。
  • 関数型パーサーコンビネータフレームワークに静的 LL(1) チェックを統合し、コンパイル時に文法設計エラーを防ぐこと。
  • パーサリングに加えて、一貫性のある検証済みフレームワーク内で列挙とプリントアウトをサポートすること。
  • ザイパーにインspiredされたデータ構造を用いて、効率的な状態管理を実現し、LL(1) パーサリングを線形時間で達成すること。

提案手法

  • 著者たちは LL(1) コンテキスト自由式を形式化し、静的解析のための計算可能な性質(生産性、空可否、先頭集合、続くべきでない集合)を定義する。
  • 彼らは、先読みトークン解析を用いて LL(1) 式に特化させた、導出に基づく新規な線形時間パーサリングアルゴリズムを導入する。
  • アルゴリズムは、パーサリングの文脈を効率的に管理し、重複計算を回避するためにザイパー・データ構造を採用する。
  • アルゴリズムの正しさは Coq で形式的に証明されており、証明は実装と密接に一致している。
  • このアプローチは、パーサリング、列挙、およびプリントアウトをサポートする Scala ベースのパーサーコンビネータフレームワーク「Scallion」に統合されている。
  • この方法により、LL(1) 性質を満たす文法のみが受け入れられ、曖昧性が排除され、効率的で予測可能なパーサリングが可能になる。

実験結果

リサーチクエスチョン

  • RQ1一般の導出付きパーサリング技法を、LL(1) 文法に対して線形時間の複雑性を達成するように最適化することは可能か?
  • RQ2関数型パーサーコンビネータフレームワークにおいて、LL(1) 性質を静的にチェックし、強制することは可能か?
  • RQ3導出に基づくパーサーにおいて、正しさとパフォーマンスを保ちながら、ザイパーに基づくデータ構造を用いてパーサリング状態を効率的に管理することは可能か?
  • RQ4導出に基づく LL(1) パーサーを形式的に検証し、列挙とプリントアウトを備えた包括的な関数型フレームワークに統合することは可能か?
  • RQ5提案手法は、既存の再帰的下り坂法や PEG ベースのパーサーコンビネータと比較して、パフォーマンスと正しさの点で優れているか?

主な発見

  • 提案されたアルゴリズムは、LL(1) パーサリングにおいて最悪ケースで線形時間の複雑性を達成しており、一般の導出付きパーサリングの立方時間の複雑性を克服している。
  • Coq における形式的検証により、パーサリングアルゴリズムの正しさが保証されており、証明は実装と密接に一致している。
  • フレームワークはパーサリングに加え、列挙とプリントアウトもサポートしており、パーサーコンビネータシステムの有用性が拡張されている。
  • ザイパー・データ構造の使用により、関数型の状態管理が効率的に行われ、再帰的下り坂パーサリングにおけるパフォーマンスのボトルネックが回避されている。
  • 静的 LL(1) チェック機構により、コンパイル時に LL(1) 性質が検証され、文法設計エラーが防止されている。
  • Scallion での実装は、導出に基づくパーサリングが実世界の応用においても効率的で実用的であることを示している。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。