Document

言語処理系(7)
金子敬一
5 基本的な構文解析技法
5.1
5.2
5.3
5.4
5.5
構文解析系
移動還元構文解析
演算子順位構文解析
下降型構文解析
予測的構文解析系
5.4 下降型構文解析系
• 下降型構文解析の例
S → c A d
A → a b | a
c
a
d
S
c
A d
5.4 下降型構文解析系
• 下降型構文解析の例
S → c A d
A → a b | a
c
a
d
S
A d
c
a
b
5.4 下降型構文解析系
• 下降型構文解析の例
S → c A d
A → a b | a
c
a
d
S
A d
c
a
b
5.4 下降型構文解析系
• 下降型構文解析の例
S → c A d
A → a b | a
c
a
d
S
A d
c
a
b
5.4 下降型構文解析系
• 下降型構文解析の例
S → c A d
A → a b | a
c
a
d
S
c
A d
a
5.4 下降型構文解析系
• 下降型構文解析の例
以下の問題点がある:
−左再起性を持つ文法では,無限ルー
プに陥る可能性
−後戻りが必要なため,大きなオーバ
ヘッドの可能性
−代替の試行順序によって受理される
言語が異なる可能性
5.4 下降型構文解析系
• 左再帰性の消去
G:文法,A ⇒ +Aaのとき,G:左再帰的
1)すべてのA生成規則をまとめる
A → A a1 | ... | A am | b1 | ... | bn
2)この規則を,以下の生成規則に置換
A → b1 A’ | ... | bn A’
A’ → a1 A’ | ... | am A’ | e
5.4 下降型構文解析系
• 左再帰性の消去
1)すべてのA生成規則をまとめる
A → A a1 | ... | A am | b1 | ... | bn
2)この規則を,以下の生成規則に置換
A → b1 A’ | ... | bn A’
A’ → a1 A’ | ... | am A’ | e
→ T E’
E
E → E + T | T
E’ → + T E’ | e
5.4 下降型構文解析系
• 左再帰性の消去
E → E + T | T
T → E + T | T
F → ( E ) | id
E → T
E’ → +
T → F
T’ → *
F → (
E’
T E’ | e
T’
F T’ | e
E ) | id
5.4 下降型構文解析系
•
1.
2.
3.
4.
5.
6.
7.
左再帰性の消去
Gの非終端記号をA1, A2, ..., Anとする
A1の直接左再帰性を除去
A2にA1を代入
A2の直接左再帰性を除去
A3にA1, A2を代入
A3の直接左再帰性を除去
…
5.4 下降型構文解析系
• 左再帰性の消去
S → A a | b
A → A c | S d | e
1. Sに直接左再帰はない.
2. A → A c | A a d | b d | e
3. Aの左再帰性を除去して
S → A a | b
A → b d’ A’ | e A’
A’ → c A’ | a d A’ | e
5.4 下降型構文解析系
• 再帰下降型構文解析
再帰的,後戻りなし
A → a1 | a2 | ... | an
なるA規則で,入力記号aの代替が常に
1つに決まるならば,後戻りの必要なし
5.4 下降型構文解析系
• 左括り出し
文 → if 条件 then 文 else 文
| while 条件 do 文
| begin 文の並び end
適
文 → if 条件 then 文 else 文
| if 条件 then 文
5.4 下降型構文解析系
• 左括り出し
文 → if 条件 then 文 else 文
| if 条件 then 文
文 → if 条件 then 文 文’
文’ → else 文 | e
適
5.4 下降型構文解析系
• 遷移図
E → T E’
E’ → + T E’ | e
T → F T’
T’ → * F T’ | e
F → ( E ) | id
E:
E’:
T:
T’:
F:
T
E’
+
T
F
T’
*
F
(
E
E’
e
T’
)e
id
5.4 下降型構文解析系
• 遷移図
E:E:
E’:
T:T:
T’:
F:F:
T
+
+
E’
e
F
*
*
T’
e
(
E
T
F
E’
e
T’
)e
id
5.4 下降型構文解析系
• 遷移図
E:
T
+
e
T:
F
*
e
(
E
F:
)
id
ちょっと休憩
(雑談)
たほいや
•
1.
2.
3.
だんぼらぼ
水中に大きな物を投げ入れた時の音。
香川県で段々畑の意。
なでしこに似た花をつける植物。春から
夏にかけて海沿いの暖かい斜面に群
生する。
4. ソラユリ科 高山植物のひとつ。
5. だらしない人。
たほいや
• おっぱ
1. 小さな木の葉。転じて身分の軽い者の
こと。
2. 東北地方で冬に肩に掛ける上衣。
3. 物事の最後。結末。
4. おおざっぱにまとめること。
5. 南米に生息するカミキリムシ。
たほいや
•
1.
2.
3.
4.
5.
ねぎどの
ねぎを育てるための肥沃な土壌。
田んぼにいる虫のこと。
キリギリス・イナゴの異称。
死者をねぎらうための部屋。ねぎどころ。
米沢藩主 上杉鷹山の愛称。
たほいや
•
1.
2.
3.
4.
5.
したひ
鍋などを熱するときの種火。
死体。
鎧のひどうしの下につける衣服。
下火になることの古称 人気が落ちる。
赤く色づくこと。
たほいや
•
1.
2.
3.
4.
5.
ぬじ
色鮮やかな様子。
左官屋の壁を塗る下地のこと。
しったかぶり。
「にじ」の古形。のじ。
所有者のいる土地。
たほいや
• にこぽん
1. 天から授かる幸い。天運。
2. にこにこして相手の肩をぽんと叩き、親
しそうにうちとけて人を懐柔する態度。
3. ニコチンとヒロポンの融合語。
4. 調子のよい人。にこりと笑って肩をたた
くことから。
5. 物事が新鮮なさま。
休憩おわり
5.5 予測的構文解析系
• 概要
a + b $
入力
−入力
X
Y
−スタック
Z
−構文解析表
$
−出力
ス
タ
ッ
ク
プログラム
構
文
M[X,a]
解析表
出力
次の動作を決定
5.5 予測的構文解析系
• 概要
$
$
プログラム
構
文
M[$,$]
解析表
ス
タ
ッ
ク
入力
出力
受理
5.5 予測的構文解析系
• 概要
a + b $
a
Y
Z
$
ス
タ
ッ
ク
プログラム
構
文
M[a,a]
解析表
入力
出力
5.5 予測的構文解析系
• 概要
U
V
X
W
Y
Z
$
ス
タ
ッ
ク
a + b $
プログラム
構
文
M[X,a]
解析表
入力
出力
X → U V W
5.5 予測的構文解析系
• 動作
id
E
E’
T
T’
E→T E’
F
F →id
+
E → T
E’ → +
T → F
T’ → *
F → (
E’
T E’ | e
T’
F T’ | e
E ) | id
*
(
)
$
E’→e
E’→e
T’→e
T’→e
E→T E’
E’→+ T E’
T→F T’
T→F T’
T’→e
T’→* F T’
F →(E)
5.5 予測的構文解析系
• 動作
$
E T’
E’
+
T id
F
id
E
E’
T
T’
E→T E’
F
F →id
+
id + id * id $
*
(
)
$
E’→e
E’→e
T’→e
T’→e
E→T E’
E’→+ T E’
T→F T’
T→F T’
T’→e
T’→* F T’
F →(E)
5.5 予測的構文解析系
• 動作
$
E’ T’ id
F *
id
E
E’
T
T’
E→T E’
F
F →id
+
id * id $
*
(
)
$
E’→e
E’→e
T’→e
T’→e
E→T E’
E’→+ T E’
T→F T’
T→F T’
T’→e
T’→* F T’
F →(E)
5.5 予測的構文解析系
•FIRSTとFOLLOW
−任意の文法記号列a, FIRST(a): a
から導出可能な文字列の先頭の終端
記号の集合
−任意の文法記号列A, FOLLOW(A):
文形式においてAのすぐ右に出現しう
る終端記号の集合(含む$)
5.5 予測的構文解析系
•FIRSTの求め方
X:任意の文法記号,FIRST(X)を以
下のように求める
1)X:終端記号,FIRST(X)={X}
2)X:非終端,X→a a, a FIRST(X)
3)X→Y1 Y2 ... Yk, Y1 Y2 ... Yi-1⇒+eならば
FIRST(Yi)-{e} FIRST(X)
Y1 Y2 ... Yk⇒*eならば, e FIRST(X)
5.5 予測的構文解析系
•FOLLOWの求め方
A:任意の非終端記号,FOLLOW(A)を
以下のように求める
1)S:出発記号,$ FOLLOW(S)
2)A→a B b, b = e, FIRST(b)-{e}
FOLLOW(B)
3)A→a Bまたは, A→a B bかつe
FIRST(b), FOLLOW(A) FOLLOW(B)
5.5 予測的構文解析系
•構文解析表の構成
1)各生成規則A→aに対し,2,3を実行
2)各終端記号a FIRST(a)に対して,
M[A,a]にA→aを記入
3)e FIRST(a)ならば, 各終端記号b
FOLLOW(A)に対して,M[A,b]にA→a
を記入.e FIRST(a)かつ$ FOLLOW
(A)ならばM[A,b]にA→aを記入
4)空欄にerrorを記入
5.5 予測的構文解析系
• LL(1)文法
構文解析表のどの欄も多重定義され
ていない文法
5.5 予測的構文解析系
• LL(1)文法の必要十分条件
A → a | bに対して,
−任意の終端記号a, aとbのうち高々
一方がaで始まる文字列を導出
−aとbのうち高々一方が空列を導出
−b⇒*eならばaはFOLLOW(A)に含ま
れる終端記号で始まる文字列を導出
しない