言語理論とコンパイラ

第八回: 下向き構文解析の実例

2011 年 6 月 3日

http://www.sw.it.aoyama.ac.jp/2011/Compiler/lecture8.html

Martin J. Dürst

AGU

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

今日の内容

先週資料の修正

(A/E)BNF の書き方

手造り下向き構文解析の詳細: 非終端記号

曖昧な文法

文法の曖昧性の除去

問題の例:

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 | ε

これに相当する EBNF:

E → integer {'-' integer}

文法と正規表現の違い

文法:

正規表現:

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

下向き構文解析の問題点

文法の追加条件

⇒ 文法は言語を定義するだけでは不十分

結論

→上向き構文解析 (bottom-up parsing)

次回への準備