Next: , Previous: Contextual Precedence, Up: Algorithm


5.5 構文解析器の状態

関数yyparseは、有限状態機械を使って実装されています。 構文解析器のスタックに積まれる値は、トークン型番号だけでなく、 スタックの先頭またはその近くにある終端記号と非終端記号の列を 表現しています。現在の状態は、次にすべきことに関連する、 今までの入力の情報全体の集まりです。

先読みトークンが読まれるたびに、先読みトークンの型と 現在の構文解析器の状態によって、表が引かれます。 この表の項目には、「先読みトークンをシフトしなさい」というような ことが書かれています。この場合、その表の項目は、 先読みトークンが構文解析器スタックのトップに置かれた、 構文解析器の新しい状態をも示しています。 「n番目の規則を使って還元しなさい」というような項目もあります。 これによって、決められた数のトークンまたはグループがスタックのトップから 取り除かれ、1個のグループがスタックのトップに置かれます。 言い換えると、その数の状態がスタックからポップされ、 新しい1個の状態がスタックにプッシュされます。

これには、1つの例外があります。 先読みトークンが現在の状態に対してエラーであるという項目もあります。 この場合には、エラー処理が起こります (see Error Recovery)。