字句解析プログラム
字句解析プログラム yylex() は、入力を読み取って、トークンに分割します。実際には、何がトークンを構成しているかを判別します。たとえば、字句解析プログラムの中には、 数値を一時点に数字を 1 つ戻すものもありますが、 一方、構文解析プログラムに数値を渡す前に、数値全体を集めるものもあります。
同様に、字句解析プログラムの中には、if または while など のキーワードを認識して、構文解析プログラムに if トークンまたは while トークンが検出されたことを知らせるものもあります。キーワードを認識するようには設計されていない 字句解析プログラムもあります。したがって、キーワードと変数名などの他のものとを区別するのは、 構文解析プログラム自体ということになります。
yacc 入力の宣言セクションで命名された各トークンは、定義済み C 定数
として設定されます。最初に命名されたトークンの値は、257、その次の値は、258、
以下同様です。宣言セクションで最初に現れるトークンの後に正の整数を置くことによってトークン用
にユーザー独自の値を設定できます。たとえば、次のようになります。
%token AA 56
は、値 56 をトークン記号 AA に割り当てます。このメカニズムが必要なことは非常にまれです。できるだけ使用しないようにする必要があります。yylex() の要件については、特にありません。その関数がトークンの値とともに そのタイプの指標を戻す場合は、その値は、外部変数 yylval に 割り当てられます。デフォルト解釈により、yylval は、int 値として定義されますが、 他のタイプの値を保持するために使用することもできます。詳細は、型の %union の 説明を参照してください。