1 / 38

言語プロセッサ ー第7回目ー

構文解析(続き). 言語プロセッサ ー第7回目ー. 東京工科大学 コンピュータサイエンス学部 亀田 弘之. 今日の内容. 構文解析 LL(1) 文法(復習) First 集合(復習) Follow 集合(復習) 構文解析表による構文解析法 予測的構文解析のモデル 構文解析表の作り方 動作 など. 今日でマスターしてしまおう!. LL ( 1 )文法. 最終確認事項. LL(1) 文法 のイメージ: A → α | β

veradis-ace
Download Presentation

言語プロセッサ ー第7回目ー

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 構文解析(続き) 言語プロセッサー第7回目ー 東京工科大学 コンピュータサイエンス学部 亀田 弘之

  2. 今日の内容 • 構文解析 • LL(1)文法(復習) • First集合(復習) • Follow集合(復習) • 構文解析表による構文解析法 • 予測的構文解析のモデル • 構文解析表の作り方 • 動作 など 今日でマスターしてしまおう! 言語プロセッサ2012 (東京工科大学)

  3. LL(1)文法 最終確認事項 • LL(1)文法のイメージ: A → α|β という規則で、αかβのどちらの書き換えを選ぶかを決めるとき、入力の先頭記号1個を見ることにより、バックトラックが起きないような選択が可能な文法。 つまり、適応するべき文法規則を、1文字先読みすれば決定できるということ。 高速処理には大切な性質です。 言語プロセッサ2012 (東京工科大学)

  4. 形式文法(復習) 確認事項(常識) 文法 G=( N, V, S, P ), ただし、 • N: 非終端記号の集合(構文構造記述用語集) • V: 終端記号の集合(語彙) • S: 開始記号 • P: 書換え規則の集合 言語プロセッサ2012 (東京工科大学)

  5. LL(1)文法の条件 再確認事項 • 文法における制限 • 左再帰性の除去(左再帰の書き換え規則を変形により削除する。無限ループの回避を目的としている。) • 括りだし(factoring) (バックトラックの回避を目的としている。) • 構文解析方法 • Top down • 再帰呼び出し • 1文字先読み 言語プロセッサ2012 (東京工科大学)

  6. 1文字先読み十分性の条件は? • First集合とFollow集合を用いて作成される構文解析表において,表内のどのセルにも動作が多重に定義されていないこと.(詳細は後述します。) 確認事項 言語プロセッサ2012 (東京工科大学)

  7. First集合 最終確認事項 【定義】 First(α)={a | a ∈ V=(Vn∪Vt)*, α=*=>a… } ただし、α=*=>εならば、ε∈First(α) 【意味】   文字列αから導出される文字列の先頭(最左端)に現れる終端記号の集合。 言語プロセッサ2012 (東京工科大学)

  8. First集合 最終確認事項 【First集合を求めるアルゴリズム】 以下を、どのFirst集合にも新たに追加するものがなくなるまで繰り返す。 • First(ε)={ε} • First(aα)={a} if a∈V  (Vは終端記号の集合) • if( First(Y) /∋ ε) Yは空文字列にならない。 First(Yα)= First(Y) else First(Yα)= (First(Y) ー {ε})∪ First(α) 4. if(X→α) First(X)= First(X) ∪First(α) 言語プロセッサ2012 (東京工科大学)

  9. Follow集合 最終確認事項 【定義】 Follow(X)={a | a ∈ V, S=*=>…Xa… } 【意味】Xの直後に現れる可能性のある終端記号の集合 言語プロセッサ2012 (東京工科大学)

  10. Follow集合 最終確認事項 【Follow集合を求めるアルゴリズム】 以下を、どのFollow集合にも新たに追加するものがなくなるまで繰り返す。 • Follow(S)に$を加える。 • 規則 A → αBβ (B∈N) に対して、 (ア)First(β)をFollow(B)に加える。 ただし、ε∈First(β) のときはεは加えない。 (イ)ε∈First(β)またはβ=εならば、 Follow(A)をFollow(B)に加える。 言語プロセッサ2012 (東京工科大学)

  11. First集合とFollow集合 再確認事項 【定義】 1. First(α)={a | a ∈ V, α=*=>a… } ただし、α=*=>εならば、ε∈First(α) 2. Follow(X)={a | a ∈V, S =*=> …Xa… } 言語プロセッサ2012 (東京工科大学)

  12. 演習 First集合とFollow集合を求めてみよう! • 次の文法を考える。 E → E + T | T T → T * F | F F → ( E ) | id 言語プロセッサ2012 (東京工科大学)

  13. まず、何をしますか? • 左再帰性がないかどうかを確認する。 ・どうやって確認する? • 左再帰性があれば、それを除去する。    ・どうやって除去する? 言語プロセッサ2012 (東京工科大学)

  14. 確認演習 First集合とFollow集合 【例】 文法G=(V,N,E,P) P={ E→TE’, E’ →+TE’ | ε T→FT’ T’ →*FT’ | ε F→(E) | i } 教科書p.86より 言語プロセッサ2012 (東京工科大学)

  15. 確認事項 • First(E) = First(T) = First(F) = { (, i } • First(E’) = { +, ε} • First(T’) = { *, ε} • Follow(E) = Follow(E’) = { ), $} • Follow(T) = Follow(T’) = { +, ), $} • Follow(F) = { +, *, ), $} 言語プロセッサ2012 (東京工科大学)

  16. 構文解析表による構文解析法 • 予測的構文解析のモデル • 構文解析表の作り方 • 構文解析のアルゴリズム 言語プロセッサ2012 (東京工科大学)

  17. 予測的構文解析のモデル 入力 a + b $ X Y Z $ プログラム 出力 構文解析表 スタック 言語プロセッサ2012 (東京工科大学)

  18. 構文解析表の作り方 • 入力: 文法G • 出力: 構文解析表M • 手順: (次のページ参照) 言語プロセッサ2012 (東京工科大学)

  19. 構文解析表作成手順 • 文法の各規則A→αに対して、ステップ2と3を行う。 • 各終端記号a∈First(α)に対して、M[A, a]にA→αを記入する。 • ε∈First(α)ならば、各終端記号b∈Follow(A)に対して、M[A, b]にA→αを記入する。 ε∈First(α)かつ$∈Follow(A)ならば、 M[A, $]にA→αを記入する。 • Mの未記入欄にerrorを記入する。 言語プロセッサ2012 (東京工科大学)

  20. 上記のアルゴリズムは任意の文法に対しても適用できるが、文法によってはMの欄に対して複数の規則が書き込まれることがある。上記のアルゴリズムは任意の文法に対しても適用できるが、文法によってはMの欄に対して複数の規則が書き込まれることがある。 【例】 P = {S →i C t S S’ | a, S’→e S | ε, C→b } ( M[S’, ε] を求めてみよ。) • LL(1)文法はこのようなことが起きない文法。 言語プロセッサ2012 (東京工科大学)

  21. 構文解析のアルゴリズム • X = a = $ ならば、”構文解析成功” を出力し停止。 • X = a =!= $ ならば、スタックからXをpopし、入力ポインタを1つ進める。 • a∈Vならば、M[X, a]を調べる。M[X,a]={X→ABC}ならば、C,B,Aの順にスタックにpushし、 X→ABCを実行する。M[X,a]=errorならば、停止。 言語プロセッサ2012 (東京工科大学)

  22. 復習(確認)問題 言語プロセッサ2012 (東京工科大学)

  23. 文法 • E → E + T | T • T → T * F | F • F → ( E ) | id 左再帰性を除去しなさい. 言語プロセッサ2012 (東京工科大学)

  24. (直接)左再帰性除去法 参 考 • Aに関する左再帰性を取り除くためにまず,A → Aα1 |Aα2|・・・|Aαm|β1|β2|・・・|βnのようにまとめる. • 上記の形を基に以下のように変形する.A → β1A’|β2A’|・・・|βnA’A’ → α1 A’|α2A’|・・・|αmA’|ε パターンを覚えよう! 言語プロセッサ2012 (東京工科大学)

  25. 新たな文法規則 • E → T E’ • E’ → + T E’ | ε • T → F T’ • T’ → * F T’ | ε • F → ( E ) | id 言語プロセッサ2012 (東京工科大学)

  26. FirstとFollowを求めよ. • E → T E’ • E’ → + T E’ | ε • T → F T’ • T’ → * F T’ | ε • F → ( E ) | id 言語プロセッサ2012 (東京工科大学)

  27. First & Follow • (もう一度自力でやってみよう) ここが正念場! 言語プロセッサ2012 (東京工科大学)

  28. 構文解析表を作成する • (各自で作成できるようになろう!) 言語プロセッサ2012 (東京工科大学)

  29. 構文解析表 言語プロセッサ2012 (東京工科大学)

  30. 構文解析表 言語プロセッサ2012 (東京工科大学)

  31. 動作手順 予測的構文解析系は、入力、スタック、構文解析表および出力からなる。 入力には構文解析対象の文字列があり、末尾に記号$が添えられている。 スタックには底を示す記号$が入っている。初期状態では開始記号が入っている。 構文解析表は配列 M[A,a] と書け、Aは非終端記号、aは終端記号か$である。 言語プロセッサ2012 (東京工科大学)

  32. スタックから記号を1つポップする。それをXとする。また現在の入力記号の先頭をaとする。スタックから記号を1つポップする。それをXとする。また現在の入力記号の先頭をaとする。 • X=a=$ ならば、処理は正常終了。 • X=a≠$ ならば、スタックからXをポップし、入力ポインタを1つ進める。 • Xが非終端記号ならば、M[A,a]を調べる。 言語プロセッサ2012 (東京工科大学)

  33. M[A,a] = { X → UVW } ならば、スタックのXをWVU(Uが最上位)に書き換える。出力としてこの書き換え規則を印字する。 • M[A,a]=error ならば回復ルーチンを起動する。 言語プロセッサ2012 (東京工科大学)

  34. 動作のトレース • 入力: id + id * id 落ち着いてトレースしよう! 言語プロセッサ2012 (東京工科大学)

  35. 動作のトレース スタック入力出力 $E id+id*id $E’T id+id*id E→TE’ $E’T’F id+id*id T→FT’ $E’T’id id+id*id F→id $E’T’ +id*id $E’ +id*id T’→ε (以下省略) 言語プロセッサ2012 (東京工科大学)

  36. 以上で構文解析の話しの概要はほぼ終わりです.以上で構文解析の話しの概要はほぼ終わりです. • 引き続き練習を積み重ねてください. • 用語を知ること • 用語の意味を知り,自分で説明できるように. • なぜそのような用語が定義されているのかを考え理解する. • 左再帰削除ができるように • Factoringができるように • First集合やFollow集合を自分で求められるように • 構文解析表が作れるように • 構文解析処理をトレースできるように 言語プロセッサ2012 (東京工科大学)

  37. 参考情報 • 構文解析まで終われば、後は少し楽になります。 • 構文解析は解析の中でも難関部分で、今日でも多くの研究がなされてます。 • 構文解析の次は意味解析(解析の最終段階)。 • それ以後は合成の段階になります。 • 来週はここまでの総合演習をやります。 言語プロセッサ2012 (東京工科大学)

  38. Let’s call it a day!今日はここまで! 寒くなったので健康には十分注意しましょう. 言語プロセッサ2012 (東京工科大学)

More Related