第六回: 字句解析と構文解析
2013 年 5 月 24 日
http://www.sw.it.aoyama.ac.jp/2013/Compiler/lecture6.html
© 2005-13 Martin J. Dürst 青山学院大学
(資料は前回のもの)
flex
の宿題についてflex
の宿題: Ruby 用字句解析提出期限と場所: 2013 年 5 月 30 日 (木) 19:00 まで O 棟 5 階の O-529 号室の前の箱に投入
ヒント: 簡単なものからスタートして、段階的に進む
字句解析 (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 | 正規言語 | 有限オートマトン |
次のような言語が正規表現などで表せるのか:
a
, b
, c
からなる左右対象の語の言語(
と )
からなる、式のように入れ子になっている語の言語0
と 1
からなる、n
個の 0
の後 n 個の 1
の語の言語これらは全て有限オートマトンの有限のメモリの制約によって受理不可能
字句解析 | 構文解析 | |
解析対象 | 定数、識別子、予約語、演算子など | 式、文、関数など |
要点 | 速さ | 能力 |
記述方法 | 正規表現 | 文脈自由文法 |
(自動) 解析手段 | 有限オートマトン | プッシュダウンオートマトン |
正規文法 (regular grammar):
文脈自由文法 (context free grammar):
S → aSa | bSb | c
生成する語の例: c, aca, bcb, abaabcbaaba 等
生成する言語: 真ん中に c が一個、周りに a と b が 0 以上対照的に自由な順番で並ぶ
上記の言語を受理するのは、メモリがないため有限オートマトンでは不可能
オートマトンの機能拡張が必要
オートマトンにプッシュダウンスタックをつけよう
(pushdown stack)
効率よく構文解析できるには可能な限り決定性のある文法が必要
他にも解析の効率に影響を与える文脈自由言語・文脈自由文法の種類が存在
C プログラム言語、Java、Ruby、XML
など知っている言語やデータ形式の文法を調べなさい。