言語理論とコン パイラ

第七回: 上向き構文解析と下向き構文解析

2005 年 6月 3日

AGU

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

先先週の試験: 第五問と第六問

第五問: アルファベット Σ = {a, b, c} 、状態の集合 Q = {S, R, T}、初期状態 S、受理状態の集合 F = {T} と次の状態遷移表で定義されているの非決定性有限オートマトンと同等な決定性有限オートマトンを作って、その状態遷移表 (20 点) と状態遷移図 (20点) を書け。

a b c ε
S S, R S - R
R - - T -
T - - - -
 

第六問: 第五問の有限オートマトンが受理する言語を再生する文法を書け (10 点)。

 

構文解析の方法

解析木に対しての方向

入力に対しての分析方法: 左から、右から、全体を「見渡し」ながら

どのぐらい前を見るか: 一個のトーケンだけか複数のトーケンか

解析木と構文木

文法:

E → T '+' T | T    (expression, 式)

T → F '*' F | F    (term, 項)

F → integer    (factor, 因数)

入力の例:

5 + 3 * 7

文法規則と構文図式と EBNF

文法の整理: 解析木は一つだけにする

問題の例:

E → E '+' E | integer

入力 4 + 5 + 7 に対して複数の解析木が作れる

'+' の場合には計算は同じ結果ですが、他の演算子の場合にはそうとも限らない

解決方法: 文法の書き換え

E → E '+' integer | integer

下向き解析の一般概要

バックトラックは時間がかかる上、解析と同時に処理するのは難しい

次のトーケンしか見なくて良い文法に限定したい

再帰的下向き構文解析

問題点: 左再帰

左再帰の解消法

左再帰の例:

E → E '+' integer | integer

間違った解消 (結合規則が違う):

E → integer '+' E | integer

解消の結果:

E → integer EE

EE → '+' integer EE | ε