第七回: 上向き構文解析と下向き構文解析
2005 年 6月 3日
© 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
問題の例:
E → E '+' E | integer
入力 4 + 5 + 7
に対して複数の解析木が作れる
'+' の場合には計算は同じ結果ですが、他の演算子の場合にはそうとも限らない
解決方法: 文法の書き換え
E → E '+' integer | integer
バックトラックは時間がかかる上、解析と同時に処理するのは難しい
次のトーケンしか見なくて良い文法に限定したい
E → E '+' integer | integer
F → integer | '(' E ')'
問題点: 左再帰
左再帰の例:
E → E '+' integer | integer
間違った解消 (結合規則が違う):
E → integer '+' E | integer
解消の結果:
E → integer EE
EE → '+' integer EE | ε