132
4
章 能力を高める
この実行トレースを見ると、機械がシンボル規則とトークン規則を行ったり来たりしているのがわか
ります。シンボル規則はスタックのトップがトークンに置き換わるまで、シンボルを繰り返し展開して
いきます。そして、トークン規則はスタックのトップがシンボルに当たるまで、スタック(と入力)を消
費していきます。入力文字列が文法規則によって生成できる限り、行ったり来たりしながら、最終的に
空のスタックが得られます
†
。
実行の各ステップにおいて、PDAはどうやって選ぶべき規則を知るのでしょうか。これが非決定性
の能力です。NPDAシミュレーションは可能な規則をすべて試します。空のスタックに到達するパス
がある限り、それは必ず見つかります。
4.3.3
実用性
このパース手順は非決定性を頼りにしていますが、実際の応用では、非決定性を避けたほうがよい
でしょう。なぜなら、非決定性PDAよりも決定性PDAのほうが、ずっと高速でシミュレートしやすい
ためです。幸運なことに、ほとんどの場合、入力トークンそのものを使って各ステージでどのシンボル
規則を適用するかを判断することで(先読み(lookahead)と呼ばれるテクニック)、非決定性を取り除
くことができます。ただし、CFGからPDAへの変換はもっと複雑になります。
また実際のところ、有効なプログラムを認識できるだけでは十分ではありません。「2.6 パーサの実
装」で見たように、プログラムをパースすることの本質は、プログラムを構造化された表現に変換し、
そ