私は最近、タイトルで言及されている解析手法を説明する論文に出くわしました。残念ながら、上記の論文で使用されている用語は、私の理解をいくらか超えているため、構築アルゴリズムをより直感的に把握するように努めています。私は成功したと思います(このプレゼンテーションはah-haモーメントのソースでした)が、このテクニックに慣れている人またはそこに含まれる用語のどちらかからの正しさの検証は非常にありがたいです。
ソリューションに対する私の見方を説明し(それが正しい場合は、この手法を理解しようとしている他の人々の助けになると思います)、後で追加の質問をします。:何の誤解がありません確実にするために、私は次の標準表記法を使用するつもりだ、B 、Cを、。。。∈ T、A 、B 、C 、。。。∈ N、、と、紙のようにはルール番号を示しますα 、β 、γ 、。。。∈ { N ∪ T } * A I → ω I。ただし、コンセプトには、元の論文とは異なる名前を使用します。
また、説明全体を通じて、同値関係が使用されています。
建設
構文解析オートマトンの内部には2種類のアイテムがありますというフォームの単純なLR(0)アイテムと、シフトアイテム と呼ぶのフォームのアイテム私が呼び出すアイテムは解決アイテムです。これらは、パーサーにシンボルを入力ストリームに戻し、次にルール番号だけ最初のシンボルで減らすように指示します。A I → α ∙ β 、M 、NM β
文法はルールで拡張され、初期状態のシフト項目で構築が始まります。S ′ 0 → ∙ S $
ここで、オートマトンを構築するために、状態各アイテムに対してこれらの選択肢を決定します。
アイテムがシフトアイテム場合、オートマトンに遷移があり、 は最初のシンボルです。Q X → Q " X β
アイテムが完成したシフトアイテム場合、解決アイテム for each rule。B J → α A ∙ β 、I 、0
アイテムが解決アイテム場合、を最初のシンボルとします。場合、シフトアイテムを各ルールに追加します。もし以外の項目有する、そのドット先読みとして遷移追加オートマトンに。すべて解決項目でqは解決項目をもたらすC I → α X ∙X β X ∈ N X J → ∙ ω X J → ω A I → α ∙ β 、M 、nはXのQ X → Q ' C I → α ∙ X β 、M 、んにおいて Q '。
アイテムは解決項目がある場合は任意の先読み情報に寄与せず、廃棄することができるが、最初の解決項目の追加Bのjは → α A ∙ β 、M 、Nそれぞれのルールのための B J → α A β。
もちろん、これは単なるスケッチです。実際には、状態のクロージャを最初に計算する必要があり、それからのみ遷移/シフトと解決を処理できます。
ご質問
1つ目は、明らかに、上記のプロセスが正しいかどうかです。
そして最後は紛争解決についてです。この論文は、シフト分解オートマトンの不適切性を構成するものをよく説明しています。従来のLRパーサーでの競合を解決する方法と同様に、これらの不備を解決する方法はありますか?優先順位と結合性によるyaccスタイルの競合解決のようなものをShReパーサージェネレーターに実装できますか?
これをすべて読んでくださればありがとうございます。