言語理論とコンパイラ

第二回 (2015 年 4 月 17 日)

形式言語の重要性、種類、定義

http://www.sw.it.aoyama.ac.jp/2015/Compiler/lecture2.html

Martin J. Dürst

AGU

© 2006-15 Martin J. Dürst 青山学院大学

今日の内容

 

授業全体の内容


理論 コンパイラ 他の応用
フロントエンド
(front end)
言語理論、オートマトン 字句解析、構文解析 正規表現, XML
バックエンド
(back end)

最適化、コード生成

言語理論の重要性

自然言語と形式言語の用語

分野 最小単位 集合 分類
自然言語 (単)語 文、文書 (自然)言語

(大)語族、語族、語派、語群

形式言語 記号 (文字など) (形式)言語 言語族

言語の基本用語

形式言語 (formal language) の場合の用語:

語の定義

 

語の連結演算

連結演算の性質

言語の定義

Σ 上の言語 (language over Σ) は Σ 上の語の集合

Σ ={a,b,c} 上の言語の例:

 

言語の例 (続き)

言語の演算

言語の演算は集合の演算と語の演算の組み合わせ

 

形式言語の主な課題

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

形式言語の表

(チョムスキー階層、Chomsky hierarchy)

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

 

オートマトンの種類

オートマトンの種類は「外部」メモリの制限で決まる:

0. 外部メモリが長さ制限なしのテープ: チューリング機械

1. 外部メモリが長さ制限付きのテープ: 線形拘束オートマトン

2. 外部メモリが最上部しか見えないスタック: プッシュダウンオートマトン

3. 外部メモリなし: 有限オートマトン

 

形式言語の文法の一例

文法から文の導出 (derivation) の一例:

S → a S o → a a S o o → a a A o o → a a y a o o

S ⇒ a a y a o o

文法の定義

(grammar)

文法は (N, Σ, P, S) の四字組で定義

書換規則

(rewriting rule)

書換規則一つは αβ と書く

α は左辺 (left-hand side)、β は右辺 (right-hand side)

αβ は 0以上の非終端記号と終端記号の列

左辺には非終端記号が最低一つ

例: aDaDDb, EFabc, FFb, Dε

反例: bcDc, εb

 

導出

(derivation)

文法と導出の例

文法:
Saba (1), SaDTa (2), TCDTa (3), TCDa (4),
DC → QC
(5), QC → QD (6), QD → CD (7),
aCaa (8), Daba (9), Dbbb (10)

(数値は書き換え規則の番号、下線は書換規則の適応範囲、普通 (宿題を含め) 省略)

導出の一例: S2 aDTa4 aDCDaa5 aQCDaa9 aQCbaa6 aQDbaa7 aCDbaa8 aaDbaa10 aabbaa

文法の種類

文法の種類は書換規則の制限で区別:

0. 特に制限なし: 句構造文法 (phrase structure grammar), (Chomsky) 0 型文法

1. αAβαγβ (α, β は0以上の、γ は1以上の (非)終端記号の列) の場合:
文脈依存文法 (context-sensitive grammar), (Chomsky) 1 型文法

2. Aγ は0以上の (非)終端記号の列) の場合:
文脈自由文法 (context-free grammar), (Chomsky) 2 型文法

3. AaB 又は Aa (ABa 又は Aaでも可) の場合:
正規文法 (regular grammar), (Chomsky) 3 型文法

(全ての場合に、Sε も特別に可)

 

宿題

提出期限と場所: 2015年 4月 23日 (木) 19:00 まで O 棟 5 階の O-529 号室の前の箱に投入

形式: A4 一枚 (裏も使用可)

  1. L = { a, cb, ac } の場合、L* の一番短い語 10個を列挙しなさい。
    発展問題 (解答自由): L* の長さ4の語を全て列挙しなさい。
  2. 「導出の例」で使われた文法を使って、3つの (例とお互いと) 異なる語の導出を書きなさい (途中段階を全部含む、番号・下線不要)。この文法はどの様な言語を定義しているかを推測し、説明しなさい。
    (ヒント: 推測が簡単でなかったら、導出に問題の可能性大)
    発展問題 (解答自由): 自分の推測を証明してみなさい。
  3. (提出なしだが、できなかった場合、必ず次回にノートパソコンを持参すること)
    自分のノートパソコンに cygwin をインストールする (画像つき詳細)。インストールの手順で必ず gcc, flex, bison, diff, make と m4 を選ぶ。以前インストールされた場合、必ず確認・更新。