言語プロセッサ ー第 8 回目ー
-
Upload
sebastian-camacho -
Category
Documents
-
view
27 -
download
0
description
Transcript of 言語プロセッサ ー第 8 回目ー
言語プロセッサー第 8 回目ー
東京工科大学コンピュータサイエンス学部
亀田 弘之
構文解析(続き)
今日の内容
• 構文解析– LL(1) 文法(復習)– First 集合(復習)– Follow 集合(復習)– 構文解析表による構文解析法– 予測的構文解析のモデル– 構文解析表の作り方– 動作 など
2言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
今日でマスターしてしまおう!
LL (1)文法
• LL(1)文法のイメージ:A → α | β
という規則で、 α か β のどちらの書き換えを選ぶかを決めるとき、入力の先頭記号1個を見ることにより、バックトラックが起きないような選択が可能な文法。つまり、適応するべき文法規則を、1文字先読みすれば決定できるということ。
最終確認事項最終確認事項
高速処理には大切な性質です。3言語プロセッサ 2013 ( 東京工科大学 CS 学
部 )
形式文法(復習 )
文法 G=( N, V, S, P ),
ただし、– N: 非終端記号の集合(構文構造記述用語集)– V: 終端記号の集合(語彙 )– S: 開始記号– P: 書換え規則の集合
確認事項 ( 常識 )確認事項 ( 常識 )
4言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
1. 文法における制限• 左再帰性の除去
(左再帰の書き換え規則を変形により削除する。無限ループの回避を目的としている。)
• 括りだし (factoring)
(バックトラックの回避を目的としている。)
2. 構文解析方法• Top down• 再帰呼び出し• 1文字先読み
LL (1)文法の条件 再確認事項再確認事項
5言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
1文字先読み十分性の条件は?
• First集合と Follow集合を用いて作成される構文解析表において,表内のどのセルにも動作が多重に定義されていないこと.( 詳細は後述します。 )
6言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
確認事項確認事項
(参考情報) LL(1) の位置づけ
言語プロセッサ 2013 ( 東京工科大学 CS学部 )
7
First 集合
【定義】First(α)={a | a V=(Vn∈ ∪Vt)*, α=*=>a… }
ただし、 α=*=>ε ならば、 ε First(α)∈
【意味】 文字列 α から導出される文字列の
先頭 ( 最左端 ) に現れる終端記号の集合。
8言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
最終確認事項最終確認事項
First 集合【 First 集合を求めるアルゴリズム】 以下を、どの First 集合にも新たに追加す
るものがなくなるまで繰り返す。1. First(ε)={ε}
2. First(aα)={a} if a V∈ ( V は終端記号の集合)
3. if( First(Y) / ε)∋ Y は空文字列にならない。First(Yα)= First(Y)
elseFirst(Yα)= (First(Y) ー {ε}) First(α)∪
4. if(X→α) First(X)= First(X) First(α)∪ 9言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
最終確認事項最終確認事項
Follow 集合
【定義】Follow(X)={a | a V, S=*=>…∈ Xa… }
【意味】X の直後に現れる可能性のある終端記号の集合
10言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
最終確認事項最終確認事項
Follow 集合【 Follow 集合を求めるアルゴリズム】 以下を、どの Follow 集合にも新たに追
加するものがなくなるまで繰り返す。
1. Follow(S) に $ を加える。2. 規則 A → αBβ (B N) ∈ に対して、
(ア) First(β) を Follow(B) に加える。 ただし、 ε First(β) ∈ のときは ε は加えない。
(イ) ε First(β)∈ または β=ε ならば、 Follow(A) を Follow(B) に加える。
11言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
最終確認事項最終確認事項
First 集合と Follow 集合
【定義】1. First(α)={a | a V, α=*=>a… }∈
ただし、 α=*=>ε ならば、 ε First(α)∈
2. Follow(X)={a | a V, S =*=> …Xa… }∈
12言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
再確認事項再確認事項
演習( Let’s challenge! )
言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
13
First集合と Follow集合を求めてみよう!First集合と Follow集合を求めてみよう!
ここが正念場!
確認問題
文法 G1 について答えよ。
①終端記号はどれか?②非終端記号はどれか?③開始記号はどれか?④First 集合を求めよ。⑤Follow 集合を求めよ。⑥構文解析表を求めよ。⑦G1 は LL(1) か?
G1:
S → aBd
B → bC
C → c|ε
本番演習( Let’s challenge! )
• 次の文法を考える。 First と Follow を求めよ.E → E + T | T
T → T * F | F
F → ( E ) | id
言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
15
First集合と Follow集合を求めてみよう!First集合と Follow集合を求めてみよう!
ここが正念場!
まず、何をしますか?
1. 左再帰性がないかどうかを確認する。 ・どうやって確認する?
2. 左再帰性があれば、それを除去する。 ・どうやって除去する?
言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
16
First 集合と Follow 集合
【例】文法 G=(V,N,E,P)
P={ E→TE’,
E’ →+TE’ | ε
T→FT’
T’ →*FT’ | ε
F→(E) | id } 教科書 p.86 より教科書 p.86 より
17言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
確認演習確認演習
• First(E) = First(T) = First(F) = { (, id }
• First(E’) = { +, ε}
• First(T’) = { *, ε}
• Follow(E) = Follow(E’) = { ), $}
• Follow(T) = Follow(T’) = { +, ), $}
• Follow(F) = { +, *, ), $}
18言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
確認事項確認事項
皆さんこうなりましか?皆さんこうなりましか?
これをもとに,構文解析へと進みましょう
話題– 構文解析表– 予測的構文解析– 実際のトレース など
言語プロセッサ 2013 ( 東京工科大学 CS学部 )
19
構文解析表による構文解析法
• 予測的構文解析のモデル• 構文解析表の作り方• 構文解析のアルゴリズム
20言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
予測的構文解析のモデル
XYZ$
a + b $
構文解析表
出力
スタック
入力
プログラム
21言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
構文解析表の作り方
• 入力: 文法 G
• 出力: 構文解析表 M
• 手順: (次のページ参照)
22言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
構文解析表作成手順
1. 文法の各規則 A→α に対して、ステップ2と3を行う。
2. 各終端記号 a First(α)∈ に対して、 M[A, a]に A→α を記入する。
3. ε First(α)∈ ならば、各終端記号 b∈Follow(A)に対して、 M[A, b] に A→α を記入する。 ε First(α)∈ かつ $ Follow(A)∈ ならば、 M[A, $] に A→α を記入する。
4. M の未記入欄に error を記入する。
23言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
構文解析のアルゴリズム
1. X = a = $ ならば、”構文解析成功” を出力し停止。
2. X = a =!= $ ならば、スタックから X をpop し、入力ポインタを1つ進める。
3. a V∈ ならば、 M[X, a] を調べる。 M[X,a]={X→ABC} ならば、 C,B,Aの順にスタックに push し、 X→ABCを実行する。 M[X,a]=error ならば、停止。
24言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
First & Follow
• (もう一度自力でやってみよう)
ここが正念場!
25言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
• First(E) = First(T) = First(F) = { (, id }
• First(E’) = { +, ε}
• First(T’) = { *, ε}
• Follow(E) = Follow(E’) = { ), $}
• Follow(T) = Follow(T’) = { +, ), $}
• Follow(F) = { +, *, ), $}
26言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
再掲再掲
こうでしたよね!こうでしたよね!
構文解析表を作成する
• (各自で作成できるようになろう!)
27言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
構文解析表
id + * ( ) $
E
E’
T
T’
F
28言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
構文解析表の作り方
• 入力: 文法 G
• 出力: 構文解析表 M
• 手順: (次のページ参照)
29言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
再掲再掲
構文解析表作成手順
1. 文法の各規則 A→α に対して、ステップ2と3を行う。
2. 各終端記号 a First(α)∈ に対して、 M[A, a]に A→α を記入する。
3. ε First(α)∈ ならば、各終端記号 b∈Follow(A)に対して、 M[A, b] に A→α を記入する。 ε First(α)∈ かつ $ Follow(A)∈ ならば、 M[A, $] に A→α を記入する。
4. M の未記入欄に error を記入する。
30言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
再掲再掲
構文解析表
id + * ( ) $
E E → T E’ E → T E’
E’ E’ → + T E’ E’ →ε E’ →ε
T T → F T’ T → F T’
T’ T’ →ε T’ → * F T’ T’ →ε T’ →ε
F F → id F → ( E )
31言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
構文解析器の動作手順
• 予測的構文解析系は、入力、スタック、構文解析表および出力からなる。
• 入力には構文解析対象の文字列があり、末尾に記号$が添えられている。
• スタックには底を示す記号$が入っている。初期状態では開始記号が入っている。
• 構文解析表は配列 M[A,a] として記述する。A は非終端記号、 a は終端記号か$。
言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
32
1. スタックから記号を1つポップする。それを X とする。また現在の入力記号の先頭を a とする。
2. X=a=$ ならば、処理は正常終了。3. X=a≠$ ならば、スタックから X をポッ
プし、入力ポインタを1つ進める。4. X が非終端記号ならば、 M[A,a] を調べる
。
言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
33
5. M[A,a] = { X → UVW } ならば、スタックの X を WVU(U が最上位 ) に書き換える。出力としてこの書き換え規則を印字する。
6. M[A,a]=error ならば回復ルーチンを起動する。
言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
34
動作のトレース
• 入力: id + id * id
落ち着いてトレースしよう!
35言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
動作のトレース
スタック 入力 出力$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’→ε
(以下省略)
36言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
以上で構文解析の話しの概要はほぼ終わりです.
• 引き続き練習を積み重ねてください.– 用語を知ること– 用語の意味を知り,自分で説明できるように.– なぜそのような用語が定義されているのかを考え
て,自分の言葉で理解する.– 左再帰削除ができるように– Factoring ができるように– First 集合や Follow 集合を自分で求められるように– 構文解析表が作れるように– 構文解析処理をトレースできるように
37言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
参考情報
1. 構文解析まで終われば、後は少し楽になります。
2. 構文解析は解析の中でも難関部分で、今日でも多くの研究がなされてます。
3. 構文解析の次は意味解析(解析の最終段階)。
4. それ以後は合成の段階になります。5. 来週はここまでの総合演習をやります。
38言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
Let’s call it a day!今日はここまで!
寒くなったので健康には十分注意しましょう.
39言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
復習(確認)問題
40言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
文法
• E → E + T | T
• T → T * F | F
• F → ( E ) | id
左再帰性を除去しなさい.
41言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
(直接)左再帰性除去法
1. A に関する左再帰性を取り除くためにまず,A → Aα1 |Aα2| ・・・ |Aαm|β1|β2| ・・・ |βn
のようにまとめる.2. 上記の形を基に以下のように変形する.
A → β1A’|β2A’| ・・・ |βnA’A’ → α1 A’|α2A’| ・・・ |αmA’|ε
参 考
パターンを覚えよう!
42言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
新たな文法規則
• E → T E’
• E’ → + T E’ | ε
• T → F T’
• T’ → * F T’ | ε
• F → ( E ) | id
43言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
自由課題
• 上記のアルゴリズムは任意の文法に対しても適用できるが、文法によっては M の欄に対して複数の規則が書き込まれることがある。【例】
P = {S →i C t S S’ | a, S’→e S | ε,
C→b }
( M[S’, ε] を求めてみよ。 )• LL(1) 文法はこのようなことが起きない文法。
44言語プロセッサ 2013 ( 東京工科大学 CS 学部 )
確認問題
文法 G1 について答えよ。
①終端記号はどれか?②非終端記号はどれか?③開始記号はどれか?④First 集合を求めよ。⑤Follow 集合を求めよ。⑥構文解析表を求めよ。⑦G1 は LL(1) か?
G1:
S → aBd
B → bC
C → c|ε