第二回 (20010 年 4 月 16 日)
形式言語の重要性、種類、定義
http://www.sw.it.aoyama.ac.jp/2010/Compiler/lecture2.html
duerst@it.aoyama.ac.jp, O 棟 529 号室
© 2006-10 Martin J. Dürst 青山学院大学
DIV
で) を、授業の例に習って書きなさい。grade_average = english + math + physics/2;
[事情により削除]
理論 | コンパイラ | 他の応用 | |
---|---|---|---|
フロントエンド (front end) |
言語理論、オートマトン | 字句解析、構文解析 | 正規表現, XML |
バックエンド (back end) |
最適化、コード生成 |
自然言語 (natural language) の場合は文や文書はある規則によって (単)語から構成される
形式言語 (formal language) の場合は用語の使い方が違う:
ある語や言語はある記号の有限集合 Σ をもとに定義される
Σ はアルファベット (alphabet) という (例: Σ = {a, b, c})
Σ 上の語 (word over Σ) は Σ に属する 0 以上の記号の列である
記号の数は語の長さ (length of the word) といって、語 w の長さは |w| で表す
例: |abcba| = 5; |ε| = 0
記号は長さ 1 の語でもある
二つの語を続いて並ぶと新しい語ができる
これは語の連結演算 (concatenation operation) という
連結演算は演算子なしで書く
例: 語 w と v の連結は wv と書く
応用例: w = abc で v = cba の時に wv = abccba である
同じ語 (や記号) の連結は乗数で書く: w2 = ww、a5 = aaaaa 等
結合法則: 語 w, v, u の時 (wv)u = w(vu)
単位元は ε: wε = εw = w
可換法則は成り立たない: wv ≠ vw
連結の語の長さは連結される語の長さの和: |wv| = |w| + |v|
Σ 上の言語 (language over Σ) は Σ 上の語の集合である
Σ ={a,b,c} 上の言語の例:
言語の演算は集合の演算と語の演算の組み合わせ
語と同じく言語でも LL を L2 等で表す
L* と書く
例: L = { a, b } => L* = { ε, a, b, aa, ab, ba, bb, aaa, ... }
(チョムスキー階層、Chomsky hierarchy)
文法 | grammar | Type | 言語 | オートマトン |
句構造文法 | phrase structure grammar (psg) | 0 | 句構造言語 | チューリング機械 |
文脈依存文法 | context-sensitive grammar (csg) | 1 | 文脈依存言語 | 線形拘束オートマトン |
文脈自由文法 | context-free grammar (cfg) | 2 | 文脈自由言語 | プッシュダウンオートマトン |
正規文法 | regular grammar (rg) | 3 | 正規言語 | 有限オートマトン |
(grammar)
文法は (N, Σ, P, S) の四字組で定義される。
書換規則一つは α → β と書く
α は左辺 (left-hand side)、β は右辺 (right-hand side) という
α とβ は 0以上の非終端記号と終端記号の列
左辺には非終端記号が最低一つ
例: aD → aDDb, EF → abc, F → Fb, D → ε
反例: bc → Dc, ε → b
文法の種類は書換規則の制限で決まる
0. 特に制限なし: 句構造文法 (phrase structure grammar), (Chomsky) 0 型文法
1. αAβ →
αγβ (α, β
は0以上の、γ は1以上の (非)終端記号の列)
の場合:
文脈依存文法 (context-sensitive grammar), (Chomsky) 1 型文法
2. A → β (β は0以上の
(非)終端記号の列) の場合:
文脈自由文法 (context-free grammar), (Chomsky) 2 型文法
3. A → aB 又は A→
a 又は A →ε(A →
Ba 又は A→ a 又は
A →εでも可) の場合:
正規文法 (regular grammar), (Chomsky) 3 型文法
文法から語を作るプロセスは導出という
導出は初期記号から始まる
一回の導出は一つの書き換え規則の一回の適用:
現在ある (非)終端記号の列にある書換規則の左辺と同じ部分列を見つけ、この部分列を書換規則の右辺と入れ代える
結果が終端記号だけになるとその終端記号の列が (文法が定義する) 言語の一つの語
適用できる書換規則がない場合、この導出が失敗
文法: S → aba, S → aDTa, T → CDTa, T → CDa, DC → CD, aC → aa, Da → ba, Db → bb
導出の一例: S ⇒aDTa⇒aDCDaa⇒aCDDaa⇒aaDDaa⇒aaDbaa⇒aabbaa
提出期限と場所: 2010 年 4 月 22 日 (木) 19:00 まで O 棟 5 階の O-529 号室の前の箱に投入
形式: A4 一枚 (裏も使ってよい)