言語理論とコンパイラ

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

2009 年 5 月 14 日

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

Martin J. Dürst

AGU

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

今日の予定

flex でよく出る問題

宿題の詳細

宿題のヒント

コンパイラの段階

字句解析 (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 等

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

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

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

(文脈自由) 文法の書き方の拡張

こういう風な記述は EBNF (Extended Backus Naur Form) という

様々な種類 (方言) が存在

文法と正規表現の違い

文法:

正規表現:

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

プッシュダウンスタック

(pushdown stack)

A stack of trays at the cafeteria. Only the topmost tray is visible due to a built-in spring.

プッシュダウンオートマトン

プッシュダウンオートマトンの一例

プッシュダウンオートマトンの図

決定性と非決定性のプッシュダウンオートマトン

効率よく構文解析できるには可能な限り決定性のある文法が必要

宿題 (提出不要)