IELR(1)-パーサーとは何ですか?


14

バイソンの使い方を自分で教えようとしています。manson bison(1)はbisonについて述べています:

LALR(1)、IELR(1)、または標準のLR(1)パーサーテーブルを使用して、決定性LRまたは汎用LR(GLR)パーサーを生成します。

IELRパーサーとは何ですか?World Wide Webで見つけた関連記事はすべて有料です。



@reinierpost私は今とても愚かだと感じています。なぜこれが見つからなかったのですか?
-FUZxxl

わからない
-Googleが

@reinierpost、この質問をクリーンアップするために、リンクを引用してこの質問に答えたいですか?
Merbs

うーん...それだけでいいなら、OK。
reinierpost

回答:


3

IELR(1)解析アルゴリズム

IELR(1)構文解析アルゴリズムは、ジョエル・E.デニーによって2008年に開発された博士号の一部として、クレムソン大学のブライアンA.マロイの監督下で研究。IELR(1)アルゴリズムは、1977年David Pagerによって開発されたいわゆる「最小」LR(1)アルゴリズムのバリエーションであり、1965年にDonald Knuthによって発明されLR(k)解析アルゴリズムのバリエーションです。IELR(1)のIEは、不適切な除去を表します(最後のセクションを参照)。

LR(1)アルゴリズム

LR(1) IELRの部分(1)を表し、Lは、右へEFT R 1つの先読みトークンで導出ightmost。LR(1)パーサーは、正規パーサーとも呼ばれます。このクラスの解析アルゴリズムは、解析中に実行する次のアクションを決定するスタックおよび状態遷移テーブルを備えた、ボトムアップのシフト削減解析戦略を採用しています。

歴史的に、LR(1)アルゴリズムは、遷移テーブルに大量のメモリを必要とするという欠点がありました。Pagerの改善点は、遷移テーブルの生成時に遷移状態を結合する方法を開発し、テーブルのサイズを大幅に縮小することでした。このように、Pagerのアルゴリズムにより、LR(1)パーサーは、空間と時間の効率に関して他の解析戦略と競合するようになります。「minimal LR(1)parser」というフレーズは、Pagerのアルゴリズムによって導入された遷移テーブルの最小サイズを指します。

ページャーのアルゴリズムの制限

最小のLR(1)アルゴリズムは、解析する言語の特定の入力文法に基づいて遷移表を作成します。異なる文法で同じ言語を生成できます。確かに、非LR(1)文法がLR(1)解析可能言語を生成することは可能です。実際には、LR(1)パーサージェネレーターは、この事実に対応するために、2つの状態遷移( "shift-reduce conflicts")の競合を解決する仕様を持つ非LR(1)文法を受け入れます。DennyとMalloyは、非LR(1)文法がLR(1)言語を生成しても、特定の非LR(1)文法を提供した場合、PagerのアルゴリズムがLR(1)言語を解析するのに十分な強力なパーサーを生成できないことを発見しました。

DennyとMalloyは、広く使用されている成熟したソフトウェアであるGawkとGpicが誤ったパーサーアクションを実行することを示すことにより、この制限が単なる学術的ではないことを示しています。

IELR(1)の改善

DennyとMalloyは、Pagerのアルゴリズムによって生成された遷移表を同等のLR(1)文法の遷移表と比較することにより、Pagerの欠陥の原因を研究し、Pagerの遷移表に現れる不適切と呼ぶ2つの原因を特定しましたアルゴリズム。ただし、LR(1)遷移表には含まれません。Denny and MalloyのIELR(1)(Inadequacy Elimination LR(1))アルゴリズムは、ページャーのアルゴリズムとほぼ同じサイズの遷移テーブルを生成する際にこれらの不備解消するように設計されたアルゴリズムです。


6

導入を主張する記事:IELR(1):Practical LR(1)Parser Tables for Non-LR(1)Grammerrs with Conflict Resolution(via archive.org) by Joel E. Denny and Brian A. Malloy、Clemson University 、Malloyのサイトから無料で入手できます。

それらの価値は私が答えられないものです。(個人的に、このような不自由なCFG解析の必要性を理解していません-GLRを使用するだけで表現力を制限するのはなぜですか?私にとって理にかなっているのは、TAGPEG(自然に見える、表現力を追加する)またはツリーです文法(XMLなどの言語の場合、解析ツリーの認識は設計上問題ありません。)


テクノロジーに関する原則については同意しますが、問題は多くの場合、従来の決定論的解析の方がより優れた、より完全な実装であるということです。別の問題は、一般的なCF解析はより強力ですが、GLRはそれの最良のバージョンではないかもしれないということです。
babou

4
なぜ人々がhobbled CFGパーサーを開発したのかという主な理由は、GLRパーサーが必ずしも線形時間で実行されるとは限らないことです。これは多くのアプリケーションにとって大きな問題です。IELRパーサーは、線形ランタイムなどを保証できます。
FUZxxl

なぜそれが問題になるのか分かりません。
reinierpost

2
@reinierpost線形時間対最悪の場合(GLR)または(GLL)。たとえば、大きなソースファイルをコンパイルする場合、これ多くの時間を追加する可能性があります。さらに、サポートなしで制約よりも表現力を優先するという態度は、関係する時間の犠牲を無視します。技術的には、表現力豊かなsLMGおよび/またはPMCFG形式を使用できますが、最大ます。それはばかげた例かもしれませんが、動機は常に時間です。人間は永遠に生きているわけではなく、やるべきことがたくさんあります。彼らの時間を無駄にすることは一般に悪いことです。O N 3、L iは、mはX O N XO(n4)O(n3)limxO(nx)
ユーザー

3
私はそのノートたい「 -あなただけのGLRを使用することができるときなぜあなたの表現力を制限個人的に私は、このような不自由CFGの解析の必要性を理解していません?」このコンテキストではかなり間違っています。IELR(1)は、より効率的なLR(1)パーサーテーブルを生成するために使用され、より効率的なGLRパーサーを可能にします
orlp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.