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

54
言言言言言言言 言言 言言言

description

言語プロセッサ ー第8回目ー. 今日の内容. 構文解析 構文解析技術の基盤理論 (言語学から) First 集合と Follow 集合 など. LL (1)文法. LL(1) 文法 のイメージ: A → α | β という規則で、 α か β のどちらの書換えを選ぶか を決めるとき、入力の先頭記号1個を見ることにより、 バックトラック が起きないような選択が可能な文法。 つまり、適応するべき文法規則を、 1文字先読みすれば 決定できるということ。. 形式文法(復習 ). 文法 G=( V, N, P, S ), ただし、 V: 終端記号の集合(語彙 ) - PowerPoint PPT Presentation

Transcript of 言語プロセッサ ー第8回目ー

Page 1: 言語プロセッサ ー第8回目ー

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

Page 2: 言語プロセッサ ー第8回目ー

今日の内容• 構文解析

– 構文解析技術の基盤理論(言語学から)

– First 集合と Follow 集合 など

Page 3: 言語プロセッサ ー第8回目ー

LL (1)文法• LL(1) 文法のイメージ:

A → α | β

という規則で、 α か β のどちらの書換えを選ぶかを決めるとき、入力の先頭記号1個を見ることにより、バックトラックが起きないような選択が可能な文法。つまり、適応するべき文法規則を、1文字先読みすれば決定できるということ。

Page 4: 言語プロセッサ ー第8回目ー

形式文法(復習 )

文法 G=( V, N, P, S ),

ただし、– V: 終端記号の集合(語彙 )– N: 非終端記号の集合(構文構造記述用語集)– P: 書換え規則の集合– S: 開始記号

Page 5: 言語プロセッサ ー第8回目ー

現在は変化の速い時代です.

小学生の頃のことを思い起こしてください.

15世紀: GutenBerg (印刷技術)

19 ~ 20 世紀:マルコニ(無線通信)

•20 世紀:機械式計算機      電子式計算機( digital/Analog computer ) 電話(自動車・ポケベル・携帯・ Skype ) ファクシミリ・電子メール・ WWW       電子マネー・ファミコンゲーム

•21 世紀: Suica ・ PASMO ,電子マネー(スマートカード)

Page 6: 言語プロセッサ ー第8回目ー
Page 7: 言語プロセッサ ー第8回目ー

オートマトンと言語Automaton & Languages

平成16年度開講科目3回目

( 一部書き換えあり By   H.KAMEDA 2005/12/21, 2006/12/152007/12/27 )

Page 8: 言語プロセッサ ー第8回目ー

前回までの復習• 人間の頭の中には、言語処理装置がある。• すべての文を記憶しているわけではない。• 文法として記憶している。• 文法とは何か?

– 規範文法 (Prescriptive Grammar) – 記述文法 (Descriptive Grammar)

• 形式文法と形式言語

Chomsky の意見Chomsky の意見

形式言語 v.s. 自然言語

Page 9: 言語プロセッサ ー第8回目ー

まずは,頭の整理から• 言語処理を考えたい• 処理の対象は? 言語• 自然言語と人工言語• 言語の本質を切り出して整理

=>形式言語学• 言語とは正しい文の集合 L• 言語 L は文法 G によって定義• 文法 G は,…

Page 10: 言語プロセッサ ー第8回目ー

形式文法と形式言語• 文法 G = ( Vn, Vt, S, P ):

– ただし、• Vn (非終端記号の集合) : 0 < #Vn < +∞• Vt (終端記号の集合) : 0 < #Vt < +∞• S  開始記号 (S Vn)∈• P (書き換え規則の集合):

{α→β| α, β (Vn Vt)*}∈ ∪

• 言語 L = L(G) = { x | S =*=> x }– ただし、 S => ・・・ => x  ∈ Vt

Page 11: 言語プロセッサ ー第8回目ー

形式文法と形式言語(例)• 文法 G = ( Vn, Vt, S, P ):

– Vn ={S, B} 非終端記号の集合(文構造記述用語)

– Vt={a, b, c} 終端記号の集合(単語の集合  =  語彙)

– 開始記号 S 書き換えの種(構文木の根)

– P={ S → aBc, B → b | bc} 書き換え規則群

– 言語 L = L(G) = { α | S =*> α }

Page 12: 言語プロセッサ ー第8回目ー

言語の階層(重要)• 言語(文法)は階層構造をなしている。

– 句構造言語 ⇔ 句構造文法– 文脈依存言語 ⇔ 文脈依存文法– 文脈自由言語 ⇔ 文脈自由文法– 正規言語 ⇔ 正規文法

一般的

特殊的

Chomsky 階層(Chomsky Hierarchy)とも言う。

Page 13: 言語プロセッサ ー第8回目ー

句構造文法(Phrase-Structure Grammar; PSG)

• 文法 G = ( Vn, Vt, P, S ):– Vn (非終端記号の集合) : 0 < #Vn < +∞– Vt: 終端記号の集合 : 0 < #Vt < +

∞– P: 書き換え規則の集合

{α→β| α, β (Vn Vt)*}∈ ∪

– S: 開始記号 (S Vn)∈

Page 14: 言語プロセッサ ー第8回目ー

• 文法 G = ( Vn, Vt, P, S ):– Vn (非終端記号の集合) : 0 < #Vn < +∞– Vt: 終端記号の集合 : 0 < #Vt < +

∞– P: 書き換え規則の集合

{α→β| α, β (Vn Vt)*}∈ ∪

– S: 開始記号 (S Vn)∈

• 言語 L=L(G)

句構造文法 (Phrase-Structure Grammar; PSG)

Page 15: 言語プロセッサ ー第8回目ー

• 文法 G = ( Vn, Vt, P, S ):– Vn (非終端記号の集合) : 0 < #Vn < +∞– Vt: 終端記号の集合 : 0 < #Vt < +∞– P: 書き換え規則の集合

{α→β| α, β (Vn Vt)*}∈ ∪

– S: 開始記号 (S Vn)∈

• 言語 L=L(G) :句構造言語

句構造文法 (Phrase-Structure Grammar; PSG)

ここに制限が付くと他の文法になる。

Page 16: 言語プロセッサ ー第8回目ー

• 文法 G = ( Vn, Vt, P, S ):– Vn (非終端記号の集合) : 0 < #Vn < +∞– Vt: 終端記号の集合 : 0 < #Vt < +∞– P: 書き換え規則の集合

{αXβ→αγβ| α, β (Vn Vt)*, X Vn, ∈ ∪ ∈γ (Vn V∈ ∪

t)+ }

– S: 開始記号 (S Vn)∈

• 言語 L=L(G) :文脈依存言語

文脈依存文法(Context-Sensitive Grammar; CSG)

Page 17: 言語プロセッサ ー第8回目ー

文脈自由文法(Context-Free Grammar; CFG)

• 文法 G = ( Vn, Vt, P, S ):– Vn (非終端記号の集合) : 0 < #Vn < +∞– Vt: 終端記号の集合 : 0 < #Vt < +∞– P: 書き換え規則の集合

{ X→α| α (Vn Vt)*}∈ ∪

– S: 開始記号 (S Vn)∈

• 言語 L=L(G) :文脈自由言語

Page 18: 言語プロセッサ ー第8回目ー

正規文法(Regular Grammar; RG)

• 文法 G = ( Vn, Vt, P, S ):– Vn (非終端記号の集合) : 0 < #Vn < +∞– Vt: 終端記号の集合 : 0 < #Vt < +∞– P: 書き換え規則の集合

{X→aY, X→b| X,Y Vn, a,b Vt*}∈ ∈

– S: 開始記号 (S Vn)∈

• 言語 L=L(G) :正規言語

Page 19: 言語プロセッサ ー第8回目ー

生成規則部分の比較• PSG: α→β

• CSG: αXβ→αγβ

• CFG: X→α

• RG: X→aY, X→b

– ただし、• α , β V*∈ ・ γ V∈ +

• X, Y Vn∈ ・ a, b Vt∈ ・ V=Vn Vt∪つまり,ギリシア文字は文字列を,ローマ字は1個の文字を表しています

Page 20: 言語プロセッサ ー第8回目ー

生成規則部分の比較• PSG: α→β

• CSG: αXβ→αγβ

• CFG: X→α

• RG: X→aY, X→b

– ただし、• α , β V*∈ ・ γ V∈ +

• X, Y Vn∈ ・ a, b Vt∈ ・ V=Vn Vt∪

Page 21: 言語プロセッサ ー第8回目ー

生成規則部分の比較• PSG: α→β

• CSG: αXβ→αγβ

• CFG: X→α

• RG: X→aY, X→b

– ただし、• α , β V*∈ ・ γ V∈ +

• X, Y Vn∈ ・ a, b Vt∈ ・ V=Vn Vt∪

Page 22: 言語プロセッサ ー第8回目ー

生成規則部分の比較• PSG: α→β

• CSG: αXβ→αγβ

• CFG: X→α

• RG: X→aY, X→b

– ただし、• α , β V*∈ ・ γ V∈ +

• X, Y Vn∈ ・ a, b Vt∈ ・ V=Vn Vt∪

Page 23: 言語プロセッサ ー第8回目ー

生成規則部分の比較• PSG: α→β

• CSG: αXβ→αγβ

• CFG: X→α

• RG: X→aY, X→b

– ただし、• α , β V*∈ ・ γ V∈ +

• X, Y Vn∈ ・ a, b Vt∈ ・ V=Vn Vt∪

Page 24: 言語プロセッサ ー第8回目ー

句構造言語 PSL

文脈依存言語 CSL

文脈自由言語CFL

正規言語RL

Chomsky 階層 重要

Page 25: 言語プロセッサ ー第8回目ー

言語の包含関係L ( PSG) L(CSG) L(CFG) L(RG)⊃ ⊃ ⊃

このうち、大切なのは CFG と RG 。

Page 26: 言語プロセッサ ー第8回目ー

CFG と RG

• CFG (文脈自由文法):– プログラミング言語設計– コンパイラの構文解析– 自然言語処理(機械翻訳・仮名漢字変換)

• RG (正規文法):– 正規表現(検索・コンパイラの字句解析)

Page 27: 言語プロセッサ ー第8回目ー

CFG の特徴1. CFG には標準形がある。2. 導出の過程を木で表現できる(導出木の存

在)。3. 解析手法が豊富に知られている。4. 自然言語処理に部分的に適用できる。5. プログラミング言語設計に利用されている。

Page 28: 言語プロセッサ ー第8回目ー

1. CFG の標準形• Chomsky の標準形• Greibach の標準形

標準形があるということは、一般論を議論しやすいですよね。

Page 29: 言語プロセッサ ー第8回目ー

Chomsky の標準形• 任意の CFG における書き換え規則群 P は、

A→BC  または  A→a  という形だけで表現できる。 

Page 30: 言語プロセッサ ー第8回目ー

Greibach の標準形

• 任意の CFG における書き換え規則群 P は、A→aα  という形だけで表現できる。ただし、 X Vn, a Vt, α Vn*∈ ∈ ∈ 。 

ドイツ語圏の名前なので、「グライバッハ」と読んでもいいが、英語読みで「グライバック」と読む人も多い。本人が何と読んでいるのが分かればいいのですが…

Page 31: 言語プロセッサ ー第8回目ー

2.導出木• 導出木とは

– 導出の過程を木構造で表現したもの。

• 例:S=> SJ VP

=> Tom V ADV

=> Tom ran fast

S

SJ VP

Tom

V ADV

構文木構文木

ran fast導出過程導出過程

Page 32: 言語プロセッサ ー第8回目ー

3.解析手法• CKY 法 (Cocke-Kasami-Younger   metho

d)

• Early 法 (Early’s algorithm)

• Chart 法 (Chart algorithm)

• 優先順位文法法• LR( k ) 法• LALR( k ) 法• SLR( k ) 法• LL( k ) 法    などなど

Page 33: 言語プロセッサ ー第8回目ー

3.解析手法• CKY 法 (Cocke-Kasami-Younger   metho

d)

• Early 法 (Early’s algorithm)

• Chart 法 (Chart algorithm)

• 優先順位文法法• LR( k ) 法• LALR( k ) 法• SLR( k ) 法• LL( k ) 法

Bottom up 構文解析用

Top down 構文解析用再帰的下向き構文解析用

Page 34: 言語プロセッサ ー第8回目ー

解析手法は重要なので後日あらためて取り上げます。

• 機械翻訳・通訳電話などの自然言語処理• コンパイラ,インタープリタ

などで応用されている。

言語プロセッサの授業では、まさにこの部分をいまやっています。

Page 35: 言語プロセッサ ー第8回目ー

参考文献• 文法:

– 英語学概論 -三大文法の流れと特徴-,松井千枝,朝日出版 (1980).

そもそも「文法」とは何か、を考える人には参考になると思います。比較的気楽に読める本です。

Page 36: 言語プロセッサ ー第8回目ー

ここまでのまとめ• 言語には階層がある( Chomsky 階層)• 正規言語(正規文法)は字句解析に深く

関わっている。• 文脈自由言語(文脈自由文法)は構文解

析に深く関わっている。

Page 37: 言語プロセッサ ー第8回目ー

(再開)• (以上の話、思い出したでしょうか。)

LL(1) 文法の話に戻りましょう!LL(1) 文法の話に戻りましょう!

Page 38: 言語プロセッサ ー第8回目ー

LL (1)文法• LL(1) 文法のイメージ:

A → α | β

という規則で、 α か β のどちらの書換えを選ぶかを決めるとき、入力の先頭記号1個を見ることにより、バックトラックが起きないような選択が可能な文法。つまり、適応するべき文法規則を、1文字先読みすれば決定できるということ。

Page 39: 言語プロセッサ ー第8回目ー

1. 文法への制限• 左再帰性の除去• 括りだし (factoring)

2. 構文解析方法• Top down• 再帰呼び出し• 1文字先読み

LL (1)文法の条件

Page 40: 言語プロセッサ ー第8回目ー

文字先読み十分性の条件は?• First 集合• Follow 集合

Page 41: 言語プロセッサ ー第8回目ー

First 集合【定義】

First(α)={a | a V, α=*=>a… }∈ただし、 α=*=>ε ならば、 ε First(α)∈

Page 42: 言語プロセッサ ー第8回目ー

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(α)∪

Page 43: 言語プロセッサ ー第8回目ー

Follow 集合【定義】

Follow(X)={a | a V, S=*=>…∈ Xa… }

Page 44: 言語プロセッサ ー第8回目ー

Follow 集合【 Follow 集合を求めるアルゴリズム】 以下を、どの Follow 集合にも新たに追

加するものがなくなるまで繰り返す。

1. Follow(S) に $ を加える。2. 規則 A → αBβ (B N) ∈ に対して、

(ア) First(β) を Follow(B) に加える。 ただし、 ε First(β) ∈ のときは ε は加えない。

(イ) ε First(β)∈ または β=ε ならば、 Follow(A) を Follow(B) に加える。

Page 45: 言語プロセッサ ー第8回目ー

First 集合と Follow 集合【定義】

1. First(α)={a | a V, α=*=>a… }∈ただし、 α=*=>ε ならば、 ε First(α)∈

2. Follow(X)={a | a V, S =*=> …Xa… }∈

Page 46: 言語プロセッサ ー第8回目ー

First 集合と Follow 集合【例】文法 G=(V,N,E,P)

P={ E→TE’,

E’ →+TE’ | ε

T→FT’

T’ →*FT’ | ε

F→(E) | i }

教科書 p.86 より教科書 p.86 より

Page 47: 言語プロセッサ ー第8回目ー

• First(E) = First(T) = First(F) = { (, i }

• First(E’) = { +, ε}

• First(T’) = { *, ε}

• Follow(E) = Follow(E’) = { ), $}

• Follow(T) = Follow(T’) = { +, ), $}

• Follow(F) = { +, *, ), $}

Page 48: 言語プロセッサ ー第8回目ー

構文解析表による構文解析法• 予測的構文解析のモデル• 構文解析表の作り方• 構文解析のアルゴリズム

Page 49: 言語プロセッサ ー第8回目ー

予測的構文解析のモデル

XYZ$

a + b $

構文解析表

出力

スタック

入力

プログラム

Page 50: 言語プロセッサ ー第8回目ー

構文解析表の作り方• 入力: 文法 G

• 出力: 構文解析表 M

• 手順: 

Page 51: 言語プロセッサ ー第8回目ー

1. 文法の各規則 A→α に対して、ステップ2と3を行う。

2. 各終端記号 a First(α)∈ に対して、 M[A, a]に A→α を記入する。

3. ε First(α)∈ ならば、各終端記号∈ Follow(A)に対して、 M[A, b] に A→α を記入する。 ε

First(α)∈ かつ $ Follow(A)∈ ならば、 M[A, $] に A→α を記入する。

4. M の未記入欄に error を記入する。

Page 52: 言語プロセッサ ー第8回目ー

• 上記のアルゴリズムは任意の文法に対しても適用できるが、文法によっては M の欄に対して複数の規則が書き込まれることがある。【例】

P = {S →i C t S S’ | a, S’→e S | ε,

C→b }

( M[S’, ε] を求めてみよ。 )• LL(1) 文法はこのようなことが起きない文法。

Page 53: 言語プロセッサ ー第8回目ー

構文解析のアルゴリズム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 ならば、停止。

Page 54: 言語プロセッサ ー第8回目ー

参考情報1. 構文解析まで終われば、後は少し楽にな

ります。2. 構文解析は解析の中でも難関部分で、

今日でも多くの研究がなされてます。3. 構文解析の次は意味解析(解析の最終段

階)。4. それ以後は合成の段階になります。