再帰下降型構文解析


参考文献

再帰下降型構文解析の特徴


再帰下降型構文解析を行う際定義する文法上で注意すべき点

後戻り

次のような文法では,再帰下降型構文解析で後戻りが発生する.

S ::= aBd
B ::= b | bc

ここで,入力として abcd が来たとする.まず,a が S からの遷移の一番目の文字に一致するので,次に b について検討する.b は B からの遷移の左側に一致するので B を b と解釈して次の文字を読み込むと,入力は c だが文法上は次に d が来なければならないことになって,この文法に合わないことになる.そこで,再び B の評価に戻り,今度は B を bc と解釈する方を選ぶ.すると,最後の d も文法に一致して入力 abcd を受理する.ここでは B の解釈をやり直した.これを「後戻り」という.

構文解析での後戻りは,文法の中で後戻りの原因となっているもの(この場合には B に関するところ)に「くくりだし」と呼ばれる処理を行って文法を変更することでなくすことができることがある.

今回の実験では,後戻りの発生するような文法になっていた場合,文法は変更しないで再帰下降型構文解析のプログラムで対処する.つまり,「くくりだし」に相当する部分をプログラムで実現する.具体的には,共通部分の処理をまずしてしまってから分岐をするようにプログラムを作成すればよい.

左再帰性

次は左再帰性をもつ文法の例である.

A ::= Aa | b

左再帰性は除去アルゴリズムがあるのでそれにしたがって文法を変更すれば除去できる.


実験で行うこと

  1. 自グループの定義した文法が後戻りが発生する文法であるかどうかチェックする.
  2. 自グループの定義した文法が左再帰性をもっているかどうかチェックする.
  3. 自グループが定義した文法にしたがって作成すべき関数の仕様を決定する.
  4. 自グループが定義した文法にしたがってプログラムを書く(書き方解説).

スライド
sasakura@momo.cs.okayama-u.ac.jp