言語理論とコンパイラ

第二回 (2006年 4月21日)

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

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

AGU

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

授業日程の変更

先週からの宿題

  1. XML について調べる
  2. 次の文法で導出できる記号列を五つ見つける
    S → a S o
    S → A
    A → y a

授業全体の内容

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

言語理論の重要性

言語の基本用語

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

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

語の定義

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

Σ はアルファベット (alphabet) という

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

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

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

記号は長さ 1 の語である

語の連結演算

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

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

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

例: 語 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 正規言語 有限オートマトン

宿題 (5月12日 11:00 まで提出)

提出は A4 の紙一枚 (裏も使ってよい)

  1. 次のプログラムの一行の字句解析の結果 (トークンの列)、構文解析の結果 (構文木)、出力 (マシーンへの命令) を書きなさい
    total = number * unitprice * (100 + tax) / 100;
  2. (提出なしだが、出来なかった人は次回ノートパソコンを持ってきてください。)
    自分のノートパソコンに cygwin をダウンロードインストールしてください。インストールの手順で必ず flexbison を選んでください。(家にダイアルアップ回線しかなかったら学校でやった方がよい。)