言語処理系において、入力された文字列からトークン列を作り出す処理。

典型的には、以下の処理が含まれる。

  • 空白の除去
    • C言語(マクロ除く)やJava言語では、プログラム中の空白は意味をなさない。なので、入力された文字列を読み込み、空白なら無視するようにする。
  • コメントの除去
    • プログラム中のコメントは意味を持たないので、コメントを無視するようにする。
  • トークン化
    • 文字列から、意味のある文字列(予約語識別子演算子デミリタリテラル等)を読み込み、トークンとして纏めて扱いやすくする。
    • 構文解析の段階で、次の文字が予約語なのか識別子なのかがすぐに判定できるようにする。
    • リテラルはリテラルの情報も読み込んでおく。
      • 例えば、文字列リテラルなら文字列のエスケープ処理なんかを展開しておく。

面白い例だと、Pythonのようなインデントが意味を持つ言語では、インデントの始まりと終わりをトークンとして扱う。字句解析でインデントの段数が変わったことを見てトークンを差し込むようになっている。