Next: , Previous: Semantic Actions, Up: Concepts


1.5 Bisonの出力――構文解析器ファイル

Bisonを使うときには、入力としてBison文法ファイルを指定します。 文法で記述された言語を解析する、Cのソースファイルが出力になります。 このファイルをBison構文解析器(Bison parser)と呼びます。 BisonユーティリティとBison構文解析器は、 別のプログラムであることに注意してください。 Bisonユーティリティの出力がBison構文解析器で、 あなたのプログラムの一部分になるのです。

Bison構文解析器の仕事は、文法規則に従って、トークンをグループ化することです。 たとえば、識別子と演算子から式を組み立てます。 このために、文法規則に対応するアクションを実行します。

トークンは、字句解析器(lexical analyzer)と呼ばれる関数によって得られ、 その関数を(Cで書くような)なんらかの方法で与える必要があります。 Bison構文解析器は、新しいトークンを必要とするたびに、 字句解析器を呼び出します。 Bison構文解析器は、トークンの「内部」がなんであるか知りません (しかし、トークンの意味値は関係します)。 一般に、字句解析器は、テキスト中の文字を解析してトークンを得ますが、 Bisonはその方法を知りません。 See The Lexical Analyzer Function yylex

Bison構文解析器ファイルは、Cのプログラムで、yyparseという名前の、 文法を実装する関数を定義します。 この関数は、完全なCのプログラムを構成しません。 いくつかの関数を補ってやる必要があります。 1つは、字句解析器です。 もう1つは、エラーを報告するために構文解析器が呼び出す、 エラー報告関数です。 さらに、完全なCプログラムはmain関数から実行を始める必要がありますので、 これを補って、そこからyyparseを呼び出してください。 See Parser C-Language Interface

あなたが書くアクションの中でのトークンの型名と記号に関係なく、 Bison構文解析器の中で使われるすべての変数と関数の名前は、 ‘yy’または‘YY’で始まります。 これは、字句解析関数yylexとエラー報告関数yyerrorおよび 構文解析関数yyparseのようなインターフェイス関数も含みます。 また、内部で使われる多数の識別子も同様です。 したがって、本書で定義されている場合を除いて、 Bison文法ファイルの中で‘yy’または‘YY’で始まる Cの識別子の利用は避けるべきです。