字句解析
コンパイラの中の字句解析の例を挙げる。
たとえばソースコード中に、あらかじめ現在値や初期値を入れるためのpresentやinitialという変数が宣言された後に、次の1行があるとする。
present := initial + 15
これを字句解析すると次のようになる。
つまり「present」や「initial」という変数名、「:=」という変数への値の代入を示す演算子、「15」という数字列は、意味を持つ最小単位(トークン)である。
文字と文字の間の空白(ブランク。スペース文字の1〜数個の並び)は、通常、字句解析の途中で除去する。上の例では present と := の間やその後ろなどにある空白文字が除去されている。空白文字はトークンとトークンを分離する役割くらいしかないものなのでトークンには含めない。
また、コンパイラの字句解析では、コメント文つまり「/* 現在値を計算するためのプログラム。 */」といったような文は、処理の最初の段階でひとつのカタマリとして扱い、まるごと除去してしまうこともある。
もうひとつ、C言語での文の例を挙げる。
sum = 35 + 21;
これは、次の表のようにトークン化される。
トークンは字句解析する段階では、プログラムの要素としての妥当性は必ずしも考慮されない。例えば上記の例で sum は、もしこの文の前にsumが宣言されていなければ意味がないが、字句解析器は通常トークンとしては問題ないとして扱う。
一方、数リテラルの値が、そのプログラミング言語で扱えるいかなる型がサポートする範囲よりも大きい値が書かれている場合は、最初からエラーにすることもある。