言語プロセッサ ー第7回目ー 構文解析(続き).

Slides:



Advertisements
Similar presentations
プログラミング言語論 第3回 BNF 記法について(演習付き) 篠埜 功. 構文の記述 プログラミング言語の構文はどのように定式化できるか? 例1 : for ループの中に for ループが書ける。 for (i=0; i
Advertisements

システムソフトウェア 第3回:2007年10月17日(水)   . 2 本日学ぶこと 文法  文字と文字列  無限集合  文法とそのクラス  オートマトン.
自然言語処理 平成 24 年 11 月 5 日 (No5)- 東京工科大学 コンピュータサイエンス学部 亀田弘之.
和田俊和 資料保存場所 /2/26 文法と言語 ー正規表現とオートマトンー 和田俊和 資料保存場所
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
東京工科大学 コンピュータサイエンス学部 亀田弘之
言語処理系(7) 金子敬一.
コンパイラ 2011年10月17日
言語処理系(6) 金子敬一.
文法と言語 ー文脈自由文法とLR構文解析2ー
文法と言語 ー文脈自由文法とLL構文解析ー
東京工科大学 コンピュータサイエンス学部 亀田弘之
計算の理論 II 文脈自由文法と プッシュダウンオートマトン
言語処理系(5) 金子敬一.
言語プロセッサ ー第8回目ー.
東京工科大学 コンピュータサイエンス学部 亀田弘之
コンパイラ 2012年10月15日
コンパイラ 2012年10月22日
東京工科大学 コンピュータサイエンス学部 亀田弘之
言語プロセッサ2013 ー 第7回目 ー Tokyo University of Technology
コンパイラ 2011年10月24日
コンパイラ 第14回 上昇型構文解析(2) 38号館4階N-411 内線5459
東京工科大学 コンピュータサイエンス学部 亀田弘之
形式言語とオートマトン Formal Languages and Automata 第4日目
形式言語とオートマトン Formal Languages and Automata 第4日目
言語プロセッサ 第7回目 平成27年11月16日.
プログラミング言語論 第3回 BNF記法について(演習付き)
正則言語 2011/6/27.
形式言語の理論 5. 文脈依存言語.
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
形式言語とオートマトン Formal Languages and Automata 第4日目
コンパイラ 第13回 上昇型構文解析(1) 38号館4階N-411 内線5459
東京工科大学 コンピュータサイエンス学部 亀田弘之
言語プロセッサ2012 ー 第6回目 ー Tokyo University of technology
言語と文法 言語とは,ルールに従う記号列の無限集合である. 文法を与えることで言語が定義できる.
文法と言語 ー文脈自由文法とLR構文解析2ー
東京工科大学 コンピュータサイエンス学部 亀田弘之
言語プロセッサ ー第9回目ー 構文解析(続き).
平成20年10月5日(月) 東京工科大学 コンピュータサイエンス学部 亀田弘之
言語プロセッサ2016 ー 第5回目(10月31日) ー Tokyo University of Technology
文法と言語 ー文脈自由文法とLR構文解析3ー
計算の理論 I 文脈自由文法の標準形 月曜3校時 大月美佳.
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
文法と言語 ー文脈自由文法とLL構文解析ー
コンパイラ 2011年10月20日
平成26年4月22日(火) 東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
文法と言語 ー文脈自由文法とLR構文解析ー
言語プロセッサ2015 ー 第5回目(11月2日) ー Tokyo University of Technology
計算の理論 I -プッシュダウンオートマトン-
計算の理論 I ー正則表現とFAの等価性ー 月曜3校時 大月 美佳.
計算の理論 I プッシュダウンオートマトン 火曜3校時 大月 美佳 平成16年7月6日 佐賀大学知能情報システム学科.
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田 弘之
4.プッシュダウンオートマトンと 文脈自由文法の等価性
東京工科大学 コンピュータサイエンス学部 亀田弘之
言語プロセッサ ー第9回目ー 構文解析(続き).
東京工科大学 コンピュータサイエンス学部 亀田 弘之
東京工科大学 コンピュータサイエンス学部 亀田 弘之
形式言語とオートマトン Formal Languages and Automata 第5日目
文法と言語 ー文脈自由文法とLR構文解析2ー
計算の理論 I プッシュダウンオートマトン 月曜3校時 大月 美佳 平成15年7月7日 佐賀大学知能情報システム学科.
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
4.2 再帰下降解析 (1)再帰下降解析とは ■再帰下降解析(Recursive Descent Parsing)
Presentation transcript:

言語プロセッサ ー第7回目ー 構文解析(続き)

今日の内容 構文解析 LL(1)文法(復習) First集合(復習) Follow集合(復習) 構文解析表による構文解析法 予測的構文解析のモデル 構文解析表の作り方 動作 など 言語プロセッサ2011

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

形式文法(復習) 文法 G=( V, N, P, S ), ただし、 V: 終端記号の集合(語彙) 確認事項 文法 G=( V, N, P, S ), ただし、 V: 終端記号の集合(語彙) N: 非終端記号の集合(構文構造記述用語集) P: 書換え規則の集合 S: 開始記号 言語プロセッサ2011

LL(1)文法の条件 文法への制限 構文解析方法 左再帰性の除去 括りだし(factoring) Top down 再帰呼び出し 確認事項 文法への制限 左再帰性の除去 括りだし(factoring) 構文解析方法 Top down 再帰呼び出し 1文字先読み 言語プロセッサ2011

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

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

First集合 【First集合を求めるアルゴリズム】 以下を、どの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(α) 言語プロセッサ2011

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

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

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

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

First(E) = First(T) = First(F) = { (, i } First(E’) = { +, ε} 確認事項 First(E) = First(T) = First(F) = { (, i } First(E’) = { +, ε} First(T’) = { *, ε} Follow(E) = Follow(E’) = { ), $} Follow(T) = Follow(T’) = { +, ), $} Follow(F) = { +, *, ), $} 言語プロセッサ2011

構文解析表による構文解析法 予測的構文解析のモデル 構文解析表の作り方 構文解析のアルゴリズム 言語プロセッサ2011

予測的構文解析のモデル 入力 a + b $ X Y Z $ プログラム 出力 構文解析表 スタック 言語プロセッサ2011

構文解析表の作り方 入力: 文法G 出力: 構文解析表M 手順: (次のページ参照) 言語プロセッサ2011

構文解析表作成手順 文法の各規則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を記入する。 言語プロセッサ2011

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

構文解析のアルゴリズム 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ならば、停止。 言語プロセッサ2011

復習問題 言語プロセッサ2011

文法 E → E + T | T T → T * F | F F → ( E ) | id 左再帰性を除去しなさい. 言語プロセッサ2011

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

新たな文法規則 E → T E’ E’ → + T E’ | ε T → F T’ T’ → * F T’ | ε F → ( E ) | id 言語プロセッサ2011

FirstとFollowを求めよ. E → T E’ E’ → + T E’ | ε T → F T’ T’ → * F T’ | ε F → ( E ) | id 言語プロセッサ2011

First & Follow (各自でやってみよう) ここが 正念場! 言語プロセッサ2011

構文解析表を作成する (各自で作成してみよう) 言語プロセッサ2011

構文解析表 id + * ( ) $ E E → T E’ E → T E’ E’ E’ → + T E’ E’ →ε T T → F T’ F → id F → ( E ) 言語プロセッサ2011

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

スタックから記号を1つポップする。それをXとする。また現在の入力記号の先頭をaとする。 X=a≠$ ならば、スタックからXをポップし、入力ポインタを1つ進める。 Xが非終端記号ならば、M[A,a]を調べる。 言語プロセッサ2011

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

動作のトレース 入力: id + id * id 落ち着いてトレースしよう! 言語プロセッサ2011

動作のトレース スタック 入力 出力 $E id+id*id $E’T id+id*id E→TE’ スタック 入力 出力 $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’→ε  (以下省略) 言語プロセッサ2011

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

参考情報 構文解析まで終われば、後は少し楽になります。 構文解析は解析の中でも難関部分で、 今日でも多くの研究がなされてます。 構文解析の次は意味解析(解析の最終段階)。 それ以後は合成の段階になります。 言語プロセッサ2011

Let’s call it a day! 今日はここまで! 寒くなったので健康には十分注意しましょう. 言語プロセッサ2011