# 23 `code` -- インタプリタ基底クラス

`code`モジュールはread-eval-print(読み込み-評価-表示)ループをPythonで実装するための機能を提供します。対話的なインタプリタプロンプトを提供するアプリケーションを作るために使える二つのクラスと便利な関数が含まれています。

クラス `InteractiveInterpreter`( | [locals])

  このクラスは構文解析とインタプリタ状態(ユーザの名前空間)を取り扱います。入力バッファリングやプロンプト出力、または入力ファイル指定を扱いません(ファイル名は常に明示的に渡されます)。オプションのlocals引数はその中でコードが実行される辞書を指定します。その初期値は、キー`'__name__'`が`'__console__'`に設定され、キー`'__doc__'`が`None`に設定された新しく作られた辞書です。

クラス `InteractiveConsole`( | [locals[, filename]])

  対話的なPythonインタプリタの振る舞いを厳密にエミュレートします。このクラスは`InteractiveInterpreter`を元に作られていて、通常の`sys.ps1`と`sys.ps2`をつかったプロンプト出力と入力バッファリングが追加されています。

`interact`( | [banner[, readfunc[, local]]])

  read-eval-printループを実行するための便利な関数。これは`InteractiveConsole`の新しいインスタンスを作り、readfuncが与えられた場合は`raw_input()`メソッドとして使われるように設定します。localが与えられた場合は、インタプリタループのデフォルト名前空間として使うために`InteractiveConsole`コンストラクタへ渡されます。そして、インスタンスの`interact()`メソッドは見出しとして使うために渡されるbannerを受け取り実行されます。コンソールオブジェクトは使われた後捨てられます。

`compile_command`( | source[, filename[, symbol]])

  この関数はPythonのインタプリタメインループ(別名、read-eval-printループ)をエミュレートしようとするプログラムにとって役に立ちます。扱いにくい部分は、ユーザが(完全なコマンドや構文エラーではなく)さらにテキストを入力すれば完全になりうる不完全なコマンドを入力したときを決定することです。この関数はほとんどの場合に実際のインタプリタメインループと同じ決定を行います。

  sourceはソース文字列です。filenameはオプションのソースが読み出されたファイル名で、デフォルトで`'<input>'`です。symbolはオプションの文法の開始記号で、`'single'` (デフォルト)または`'eval'`のどちらかにすべきです。

  コマンドが完全で有効ならば、コードオブジェクトを返します(`compile(source, filename, symbol)`と同じ)。コマンドが完全でないならば、`None`を返します。コマンドが完全で構文エラーを含む場合は、`SyntaxError`を発生させます。または、コマンドが無効なリテラルを含む場合は、`OverflowError`もしくは`ValueError`を発生させます。