言語理論とコンパイラ

第二回: 形式言語の重要性、種類、定義

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}):

言語の演算

言語の演算は集合の演算と語の演算からなる

オートマトンと文法と言語

形式言語の表

文法 grammar Type 言語 オートマトン
句構造文法 phrase structure grammar (psg) 0 句構造言語 チューリング機械
文脈依存文法 context-sensitive grammar (csg) 1 文脈依存言語 線形拘束オートマトン
文脈自由文法 context-free grammar (cfg) 2 文脈自由言語 プッシュダウンオートマトン
正規文法 regular grammar (rg) 3 正規言語 有限オートマトン

宿題 (提出不要)