第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う...

30
第2回 形式言語理論の基礎 広島大学工学部第二類 藤田

Transcript of 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う...

Page 1: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

第2回 形式言語理論の基礎

広島大学工学部第二類

藤田 聡

Page 2: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

今日の授業内容

• 「言語」とは?

• 「文法」とは?

• 「文法による言語の導出」とは?

• 「言語」はプログラミング言語に対応

• 「文法」は構文規則に対応

• 「導出」とは、構文チェックに対応(逆方向)

Page 3: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

形式言語理論とは?

プログラム言語などの人工言語を機械的に取り扱うための基礎となる理論

文法規則や言語を受理するための抽象機械(解析プログラムそのもの)を通して言語を取り扱う

チョムスキーによって50年代から60年代にかけて基礎がつくられた(もともとの目的は自然言語理解のためのプログラムを作成すること)

Page 4: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

基本となる概念

• アルファベット:記号の集合

• 語:記号の列

• 言語:語の集合

• 文法

Please be quiet !

Quiet please be !

英文は、26文字のアルファベットで表現される

アルファベットをどういう順に並べてもよいわけではない

Page 5: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

いろいろなアルファベット

V = { 0,1 } 機械語のアルファベット

V = { a,b,c,..., Z } 英語のアルファベット

V = { A,B,C,..., H,♯,♭} 音階のアルファベット

V = { A,2,3,..., 10,J,Q,K } トランプのアルファベット

V中の要素の列が語(word)や文(sentence)に対応する

Page 6: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

アルファベット上の言語(language)

• V上の語全体の集合をV+であらわし、V

*=V

+∪{ε}と

する(εを空列とよぶ)

– たとえば V={0,1}のときV+={0,1,00,01,…}であり、

V*={ε,0,1,00,01,…}である

• アルファベットV上の言語Lとは、V*の任意の部分集合

のことである

– 抽象的ではあるがかなり一般的な定義になっている

Page 7: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

例0

以下はいずれも{0,1}上の言語

• 0を偶数個ならべてできる語の集合L1

• 0と1を同じ数だけ含む語の集合L2

• 1を素数個含むような語の集合L3

• C言語プログラムをコンパイルして得られるPentiumの機械語プログラムの集合

Page 8: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

例0

0 1

00 01 10 11

000 001 010 011

100 101 110 111

0000 0001 0010 0011

0100 0101 0110 0111

1000 1001 1010 1011

1100 1101 1110 1111… V上の語全体の集合

Page 9: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

例0 (言語L1)

0 1

00 01 10 11

000 001 010 011

100 101 110 111

0000 0001 0010 0011

0100 0101 0110 0111

1000 1001 1010 1011

1100 1101 1110 1111… 言語L1

Page 10: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

例0 (言語L2)

0 1

00 01 10 11

000 001 010 011

100 101 110 111

0000 0001 0010 0011

0100 0101 0110 0111

1000 1001 1010 1011

1100 1101 1110 1111… 言語L2

Page 11: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

文法(grammar)とは?

• (形式)言語をひとつ具体的に規定する方法

• 文法は四つ組G=(T,N,P,S)で定義される

T: 終端記号の集合 (⊆V)

N: 非終端記号の集合 (T∩N=φ)

P: 生成規則の集合(生成規則は x→y の形)

S: 出発記号

Page 12: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

例1

アルファベットV = {a}上の文法の例

T={a}, N={E,F},

P={ E→F, F→a, F→aF }, S=E

Page 13: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

導出とは?(1)

u,v∈(T∪N)*とする(εもO.K.)

• 1ステップ導出(one-step derivation) u→vとは、

u = msn, v = mtn, s→t ∈ P

であること。ただしm,n ∈(T∪N)* (εもO.K.)

uの中のsが、規則「s→t」によってtに書き換えられる

Page 14: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

導出とは?(2)

u,v∈(T∪N)* とする(εもO.K.)

• 導出(derivation) u →v とは、u1, u2, …, un-1 ∈(T∪N)*

があり、u = u0 → u1 → … → un-1 → un = v となること(n≧0)

• n = 0 のときu →u

vu ⎯→⎯*

*

*

Page 15: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

文法によって生成される言語

文法G=(T,N,P,S)が生成する言語L(G)は、

L(G) = { x ∈ T*

| S → x }

で定義される 出発記号から導出される語全体の集合

*

Page 16: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

例1(つづき)

A={a}, N={E,F}, P={E→F, F→a, F→aF}

E→F→a

E→F→aF→aa

E→F→aF→aaF→aaa

⇒ この文法によって生成される言語はL1 = { a,aa,aaa,aaaa,… } (= A+)

Page 17: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

例2

T={a}, N={E,F}, P={E→F, F→aa, F→aaF}

E→F→aa

E→F→aaF→aaaa

E→F→aaF→aaaaF→aaaaaa

⇒ この文法によって生成される言語はL2 = { aa,aaaa,aaaaaa, … }

(長さが偶数のもののみがつくられる)

Page 18: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

例3

T={a,b}, N={E,F}, P={E→F, F→ab, F→aFb}

E→F→ab

E→F→aFb→aabb

E→F→aFb→aaFbb→aaabbb

⇒ この文法によって生成される言語はL3 = { ab,aabb,aaabbb, … }

Page 19: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

例4(1)

T = { a,b,c,+,*,(,) }, N = { E,Y,F,I }

P = { E→E+Y, E→Y, Y→Y*F, Y→F, F→(E), F→I, I→a, I→b, I→c }

⇒ この文法で生成される言語は

a,b,c上の加算と乗算の式

Page 20: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

例4(2)

• 規則の意図は以下の通り:

– YはいつでもFでおきかえられる;

– FはいつでもIあるいは(E)でおきかえられる;

– Iはいつでもa,bあるいはcとおきかえられる。

E → E+Y → E+Y+Y → … (和項の列)

E → Y → Y*F → Y*F*F → … (積項の列)

F → (E) (ネストの表現)

Page 21: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

例4(3)

• もっとシンプルな文法で記述できないか? (⇒演習)

• ただしこの文法ではa+b*c という語も生成される

• (演算の優先順位も考慮してある)ことに注意

Page 22: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

導出の道筋について

• つねに最も左にある非終端記号を置き換えるとき最左導出

• つねに最も右にある非終端記号を置き換えるとき最右導出

導出の道筋が唯一である文法も存在する

– たとえばa+を生成する正規文法 S→T, T→aT, T→a

Page 23: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

最左導出(leftmost derivation)

E →T →T*F →F*F

→I*F →a*F →a*(E)

→a*(E+T) →a*(T+T)

→a*(F+T) →a*(I+T)

→a*(b+T) →a*(b+F)

→a*(b+I) →a*(b+c)

Page 24: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

最右導出(rightmost derivation)

E→ T→ T*F →T*(E)

→T*(E+T) →T*(E+F)

→T*(E+I) →T*(E+c)

→T*(T+c) →T*(F+c)

→T*(I+c) →T*(b+c)

→F*(b+c) →I*(b+c)

→a*(b+c)

Page 25: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

生成規則による言語のクラスわけ

• タイプ0文法: s→t

s∈(T∪N)+, t∈(T∪N)

*

• タイプ1文法(文脈依存文法): mAn→mtn

m,n∈(T∪N)* , A∈N, t∈(T∪N)

+

• タイプ2文法(文脈自由文法): A→t

A∈N, t∈(T∪N)+

• タイプ3文法(正規文法): A→a or A→bB

A,B∈N, a∈T または a=ε, b∈T

Page 26: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

クラス間の関係

• タイプ3で表現できることはタイプ2でも表現できる

• タイプ2で表現できることはタイプ1でも表現できる

• タイプ1で表現できることはタイプ0でも表現できる

タイプ0がもっとも表現能力が高く、タイプ3がもっとも表現能力が低い

Page 27: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

文脈依存のイメージ

• 文脈依存は、ドイツ語のように定冠詞が名詞が男性名詞が女性名詞かによって変化するようなものに似ている

– 「冠詞」という非終端記号を前後の状況を無視してかってに具体的なもの(DieやDerなど)におきかえることができない

Page 28: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

文脈自由のイメージ

• いっぽう文脈自由は、英語のようにどんな名詞であるかにかかわらず定冠詞を決められる場合に似ている

– 「冠詞」という非終端記号をその前後の状況によらずかってに具体的なもの(the)におきかえることができる

Page 29: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

文脈自由言語(CFL)と正規言語(RL)の違い

• RGで生成できる言語はCFGでも生成できる

• CFGでは{ anbn | n≧1 }という言語を生成できるが、RGでは生成できない

– aの繰り返し回数とbの繰り返し回数が同じであることを(有限個の規則で)表現できない

⇒ CFGとRGの間には真に能力差がある

Page 30: 第2回形式言語理論の基礎...形式言語理論とは?¾プログラム言語などの人工言語を機械的に取り扱う ための基礎となる理論 ¾文法規則や言語を受理するための抽象機械(解析プ

ここまでのまとめ

• 形式言語の基礎について理解した

• 最左導出と最右導出の違い

• 言語は、表現能力によってクラス分けされる

• 正規言語 → 字句解析

• 文脈自由言語 → 構文解析