# 18.5 `tokenize` -- Pythonソースのためのトークナイザ

`tokenize`モジュールでは、Python で実装された Python ソースコードの字句解析器を提供します。さらに、このモジュールの 字句解析器はコメントもトークンとして返します。このため、この モジュールはスクリーン上で表示する際の色付け機能 (colorizers) を含む ``清書出力器 (pretty-printer)'' を実装する上で便利です。

第一のエントリポイントはジェネレータです:

`generate_tokens`( | readline)

  `generate_tokens()` ジェネレータは一つの引数readline を必要とします。この引数は呼び出し可能オブジェクトで、組み込みファイル オブジェクトにおける `readline()` メソッドと同じインタフェース を提供していなければなりません ( 2.3.8 節を参照して ください)。この関数は呼び出しのたびに入力内の一行を文字列で返さなければ なりません。

  ジェネレータは 5 要素のタプルを返し、タプルは以下のメンバ: トークン型; トークン文字列; ソースコード中でトークンが始まる行と列を示す 整数の2要素のタプル`(srow, scol)`; ソースコード中で トークンが終わる行と列を示す整数の2要素のタプル `(srow, scol)`; そして、トークンが見つかった行、から なります。渡される行は論理行です; 連続する行は一行に含められ ます。 バージョン2.2 以降で新規追加された 仕様です。

後方互換性のために古いエントリポイントが残されています:

`tokenize`( | readline[, tokeneater])

  `tokenize()`関数は二つのパラメータを取ります: 一つは入力ストリームを表し、もう一つは`tokenize()`のための 出力メカニズムを与えます。

  最初のパラメータ、readline は、組み込みファイルオブジェクト の`readline()`メソッドと同じインタフェイスを提供する呼び出し 可能オブジェクトでなければなりません ( 2.3.8 節を参照)。 この関数は呼び出しのたびに入力内の一行を文字列で返さなければ なりません。

  二番目のパラメータtokeneaterも呼び出し可能オブジェクトで なければなりません。この関数は各トークンに対して一度だけ呼び出され、 `generate_tokens()` が生成するタプルに対応する 5 つの引数 をとります。

`token` モジュールの全ての定数は`tokenize` でも 公開されており、これに加え、以下の二つのトークン値が `tokenize()` の tokeneater 関数に渡される可能性があります:

`COMMENT`
  コメントであることを表すために使われるトークン値です。

`NL`
  終わりではない改行を表すために使われるトークン値。NEWLINEトークンは Pythonコードの論理行の終わりを表します。NLトークンはコードの論理行が 複数の物理行にわたって続いているときに作られます。