言語理論とコンパイラ

第二回 (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以上の非終端記号と終端記号の列

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

例: aD → aDDb, EF → abc, F → Fb, D → ε

反例: bc → Dc, ε → b

 

導出

(derivation)

文法と導出の例

文法:
S → aba (1), S → aDTa (2), T → CDTa (3), T → CDa (4),
DC → QC
(5), QC → QD (6), QD → CD (7),
aC → aa (8), Da → ba (9), Db → bb (10)

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

導出の一例: S →2 aDTa→4 aDCDaa→5 aQCDaa→9 aQCbaa→6 aQDbaa→7 aCDbaa→8 aaDbaa→10 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. A → aB 又は A→ a (A → Ba 又は A→ aでも可) の場合:
正規文法 (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 を選ぶ。以前インストールされた場合、必ず確認・更新。