言語理論とコンパイラ

第二回 (20010 年 4 月 16 日)

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

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

Martin J. Dürst

duerst@it.aoyama.ac.jp, O 棟 529 号室

AGU

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

今日の内容

前回からの宿題

  1. XML について調べ、結果をページ半分程度にまとめなさい。
    (この授業に関係あることの方がよい。キーワード: 構文解析、DTD、スキーマ)
  2. 次の行の Cプログラムの一文の字句解析の結果、構文解析の結果、そしてコンパイラの出力 (アセンブリ言語; コメントは必要ない; 割り算は DIV で) を、授業の例に習って書きなさい。
    grade_average = english + math + physics/2;

宿題 2 の正解例

[事情により削除]

授業全体の内容

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

言語理論の重要性

言語の基本用語

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

形式言語 (formal language) の場合は用語の使い方が違う:

語の定義

ある語や言語はある記号の有限集合 Σ をもとに定義される

Σ はアルファベット (alphabet) という (例: Σ = {a, b, c})

Σ 上の語 (word over Σ) は Σ に属する 0 以上の記号の列である

記号の数は語の長さ (length of the word) といって、語 w の長さは |w| で表す

例: |abcba| = 5; |ε| = 0

記号は長さ 1 の語でもある

語の連結演算

二つの語を続いて並ぶと新しい語ができる

これは語の連結演算 (concatenation operation) という

連結演算は演算子なしで書く

例: 語 wv の連結は wv と書く

応用例: w = abcv = cba の時に wv = abccba である

同じ語 (や記号) の連結は乗数で書く: w2 = wwa5 = aaaaa

連結演算の性質

結合法則: 語 w, v, u の時 (wv)u = w(vu)

単位元は ε: wε = εw = w

可換法則は成り立たない: wvvw

連結の語の長さは連結される語の長さの和: |wv| = |w| + |v|

言語の定義

Σ 上の言語 (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 正規言語 有限オートマトン

文法の定義

(grammar)

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

書換規則

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

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

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

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

例: aDaDDb, EFabc, FFb, Dε

反例: bcDc, εb

文法の種類

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

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, SaDTa, TCDTa, TCDa, DCCD, aCaa, Daba, Dbbb

導出の一例: SaDTaaDCDaaaCDDaaaaDDaaaaDbaaaabbaa

宿題

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

形式: A4 一枚 (裏も使ってよい)

  1. L = { a, cb, ac } の場合、L* の一番短い語 10個を列挙しなさい。
    発展問題 (解答自由): L* の長さ4の語を全て列挙しなさい。
  2. 「導出の例」で使われた文法を使って、4つの (例とお互いと) 異なる語の導出を書きなさい。この文法はどの様な言語を定義しているかを推測して、説明しなさい。(ヒント: 推測が簡単でなかったら、導出に問題があるかも)
    発展問題 (解答自由): 自分の推測を証明してみなさい。
  3. (提出なしだが、出来なかった場合、必ず次回にノートパソコンを持参すること。)
    自分のノートパソコンに cygwin をダウンロードインストールする。インストールの手順で必ず gcc, flexbison を選ぶ。(家にダイアルアップ回線しかなかったら学校でやった方がよい。)