言語理論とコンパイラ

第二回 (2013 年 4 月 19 日)

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

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

Martin J. Dürst

AGU

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

今日の内容

前回からの宿題

下記一行の C プログラム断片の字句解析の結果、構文解析の結果、そしてコンパイラの出力 (アセンブリ言語; コメントは必要ない; 引き算は SUB、割り算は DIV) を、授業の例に習って書きなさい。
grade = english/2 + math - absent*5;

宿題の正解例

[ 削除 ]

授業全体の内容


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

最適化、コード生成

言語理論の重要性

言語の基本用語

自然言語 (natural language) の場合は文や文書はある規則によって (単)語から構成

形式言語 (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. 外部メモリなし: 有限オートマトン

 

文法の定義

(grammar)

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

書換規則

(rewriting rule)

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

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

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

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

例: aDaDDb, EFabc, FFb, Dε

反例: bcDc, εb

 

導出

(derivation)

文法の種類

文法の種類は書換規則の制限で決まる:

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 又は Aε (ABa 又は Aa 又は Aεでも可) の場合:
正規文法 (regular grammar), (Chomsky) 3 型文法

 

導出の例

(数値は書き換え規則の番号)

文法: 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

宿題

提出期限と場所: 2011 年 4 月 25 日 (木) 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 を選ぶ。以前インストールされた場合、必ず確認・更新。