言 語理論とコンパイラ

第 六回: 字句解析と構文解析

2006 年 6月 2日

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

AGU

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

先週の試験

(理論の) 正規表現の復習

正規表現の例

flex の演習

演習 2

演習 3: テスト入力の例テスト出力の例

コンパイラの段階

字句解析 (lexical analysis)

構文解析 (parsing; syntax analysis)

意味解析 (semantic analysis)

最適化 (optimization)

コード生成 (code generation)

形式言語の表

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

正規表現・正規文法・有限オートマトンの限界

次のような言語が正規表現などで表せるのか:

これらは全て有限オートマトンの有限のメモリの制約によって受理不可能である。

字句解析と構文解析

字句解析 構文解析
解析対象 定数、識別子、予約語、演算子など 式、文、関数など
要点 速さ 能力
記述方法 正規表現 文脈自由文法
(自動) 解析手段 有限オートマトン プッシュダウンオートマトン

正規文法と文脈自由文法

正規文法 (regular grammar):

文脈自由文法 (context free grammar):

文脈自由文法の一例

S → aSa | bSb | c

生成する言語: 真ん中に c が一個、周りに a と b が 0 以上対照的に自由な順番に並ぶ

生成する語の例: c, aca, bcb, abaabcbaaba 等

こういう風な言語を受理するのはメモリがないため有限オートマトンで は不可能

オートマトンの機能拡張が必要

オートマトンにプッシュダウンスタックをつけよう

文法と正規表現の違い

文法:

正規表現:

正規表現の (簡単な) 規則は文法の (複雑な) 規則一つに相当する

宿題 (提出不要)