私は現在コンパイラクラスを受講していますが、action / gotoテーブルを使用したLR(1)解析アルゴリズムと、これらのテーブルを手動で生成する方法を理解するのに苦労しています。現在、クラスの教科書としてCooperとTorczonによるEngineering aCompilerを使用しています。テーブル生成に関するウィキペディアのページも読んだことがありますが、まだ概念を理解していません。可能であれば、構文解析をうまく説明している他の本やオンラインリソースを誰かが推薦できますか?多くの大学がこのテーマに関する優れたオンラインリソース/スライドを持っていると思いますが、どこから始めればよいのかわかりません。ありがとう!
2 に答える
アルゴリズムの詳細のため、本は常に読みにくいです。ギリシャ語の記号と抽象的な操作は、それらが何を意味するのかをすでに理解していない限り、解釈するのが困難です。
これを行う方法を私が学んだ方法は、小さな文法(単純な式、代入ステートメント、if thenステートメント、ステートメントのシーケンス)を記述してから、アルゴリズムを手動でシミュレートすることでした。本当に大きな紙を手に入れてください。ゴールシンボルとドット[G=DOT RHS1...RHSM]だけで開始構成状態を描画します。次に、アルゴリズムの詳細に従って、未処理の状態を処理します。その瞬間に各ギリシャ語の記号が何を表しているかを書き留めます。自信をつけると、気分が良くなり、速くなります。
基本的にあなたがやろうとしていることは、アイテムごとに私です
[LHS RHS1 DOT RHS2 RHS3 ... RHSN]
状態で、アイテムのドットを1桁右に押して、新しいアイテムを作成します
[LHS RHS1 RHS2 DOT RHS3 ... RHSN ]
そのアイテムをシードとして紙に新しい状態を描画し、FIRST(RHS3)に基づく先読みセットをアイテムのコアに入力し、状態を展開して繰り返します。
これは、最初に試すときに数時間かかります。毎秒価値があります。鉛筆を使ってください!
いくつかのまともな講義ノート...
http://cs.oberlin.edu/~jdonalds/331/lecture14.html
コンパイラの理解と記述には、LR(1)分析の真の利点は何ですか?というセクションがあります。
http://www.amazon.com/Understanding-Writing-Compilers-Yourself-Macmillan/dp/0333217322
(オンラインでも無料で入手可能)
説明は不足していますが、ここにまともな要約へのリンクがあります。
http://arantxa.ii.uam.es/~modonnel/Compilers/LR1Summary.pdf
その他の講義ノート...
http://www.cs.umd.edu/class/spring2011/cmsc430/lectures/lec07.pdf
とここにメモ...
http://cobweb.ecn.purdue.edu/~smidkiff/ece495S/files/handouts/w3w4bBW.pdf
(gotoおよびアクションテーブルを含む)
申し訳ありませんが、個人的に説明することはできません。自分自身がよくわかりません。たぶん、あなたは親切で、より知識のある魂を周りに見つけるでしょう。