第二回: 形式言語の重要性、種類、定義
2005年 4月22日、Martin J. Dürst
理論 | コンパイラ | 他の応用 | |
---|---|---|---|
フロントエンド | 言語理論、オートマトン | 字句解析、構文解析 | regexp, XML |
バックエンド | 最適化、コード生成 |
自然言語の場合は文はある規則によって語から構成される
形式言語の場合は用語の使い方が違う:
語がある規則によって記号から構成される
語は記号の列
例: 記号 a, b, c を元に例えば a, abc, aaabbb, abcba, 等の語がある
空語 (empty word) ε も語の一例
語や言語はある記号の有限集合 Σ を元に定義される
Σ はアルファベット (alphabet) という
Σ 上の語 (word over Σ) は Σ に属する 0 以上の記号の並びである
記号の数は語の長さ (length of the word) といって、語 w の長さは |w| で表す
例: |abcba| = 5; |ε| = 0
記号は長さ 1 の語である
二つの語を続いて並ぶと新しい語ができる
これは語の連結演算という
連結演算は演算子なしで書く
例: 語 w と v の連結は wv と書く
応用例: w = abc で v = cba の時に wv = abccba である
同じ語の連結は乗数で書く: ww = w2、aaaaa = a5 等
結合法則: 語 w, v, u の時 (wv)u = w(vu)
単位元は ε: wε = εw = w
可換法則は成り立たない: wv ≠ vw
連結の語の長さは連結される語の長さの和
Σ 上の言語 (language over Σ) は Σ 上の語の集合である
例 (Σ ={a,b,c}):
県庁の一日づつの天気を表す語の集合
言語の演算は集合の演算と語の演算からなる
語と同じく言語でも LL を L2 等で表す
L* と書く
例: L = { a, b } => L* = { ε, a, b, aa, ab, ba, bb, aaa, ... }
文法 | grammar | Type | 言語 | オートマトン |
句構造文法 | phrase structure grammar (psg) | 0 | 句構造言語 | チューリング機械 |
文脈依存文法 | context-sensitive grammar (csg) | 1 | 文脈依存言語 | 線形拘束オートマトン |
文脈自由文法 | context-free grammar (cfg) | 2 | 文脈自由言語 | プッシュダウンオートマトン |
正規文法 | regular grammar (rg) | 3 | 正規言語 | 有限オートマトン |