言語理論とコンパイラ

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

2014 年 5 月 16 日

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

Martin J. Dürst

AGU

© 2005-14 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, aca, bcb, abaabcbaaba 等

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

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

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

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

プッシュダウンスタック

(pushdown stack)

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

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

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

 

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

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

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

他にも解析の効率に影響を与える文脈自由言語・文脈自由文法の種類が存在

宿題 (提出不要)

C プログラム言語、Java、Ruby、XML など知っている言語やデータ形式の文法を調べなさい。