\chapter{超高レベルレイヤ \label{veryhigh}}


この章の関数を使うとファイルまたはバッファにあるPythonソースコードを
実行できますが、より詳細なやり取りをインタプリタとすることはできないでしょう。

これらの関数のいくつかは引数として文法の開始記号を受け取ります。
使用できる開始記号は\constant{Py_eval_input}と\constant{Py_file_input}、
\constant{Py_single_input}です。開始期号の説明はこれらを引数として取る
関数の後にあります。

これらの関数のいくつかが\ctype{FILE*}引数をとることにも注意してください。
注意深く扱う必要がある特別な問題には、異なるCライブラリの\ctype{FILE}構造体は
異なっていて互換性がない可能性があるということが関係しています。
実際に(少なくとも)Windowsでは、動的リンクされる拡張が異なるライブラリを
使うことが可能であり、したがって、\ctype{FILE*}引数がPythonランタイムが
使っているライブラリと同じライブラリによって作成されたことが確かならば、
単にこれらの関数へ渡すだけということに注意すべきです。


\begin{cfuncdesc}{int}{Py_Main}{int argc, char **argv}
  標準インタプリタのためのメインプログラム。Pythonを組み込む
  プログラムのためにこれを利用できるようにしています。
  \var{argc}と\var{argv}引数をCプログラムの\cfunction{main()}関数へ
  渡されるものとまったく同じに作成すべきです。
  引数リストが変更される可能性があるという点に注意することは重要です。
  (しかし、引数リストが指している文字列の内容は変更されません)。
  戻り値は\function{sys.exit()}関数へ渡される整数でしょう。
  例外が原因でインタプリタが終了した場合は\code{1}、あるいは、
  引数リストが有効なPythonコマンドラインになっていない場合は\code{2}です。
\end{cfuncdesc}

\begin{cfuncdesc}{int}{PyRun_AnyFile}{FILE *fp, const char *filename}
下記の \cfunction{PyRun_AnyFileExFlags()} の\var{closeit} を\code{0}
に、\var{flags} を \NULL にして単純化したインタフェースです。
\end{cfuncdesc}

\begin{cfuncdesc}{int}{PyRun_AnyFileFlags}{FILE *fp, const char *filename,
                                           PyCompilerFlags *flags}
下記の \cfunction{PyRun_AnyFileExFlags()} の\var{closeit} を\code{0}
にして単純化したインタフェースです。
\end{cfuncdesc}

\begin{cfuncdesc}{int}{PyRun_AnyFileEx}{FILE *fp, const char *filename,
                                        int closeit}
下記の \cfunction{PyRun_AnyFileExFlags()} の
\var{flags} を \NULL にして単純化したインタフェースです。
\end{cfuncdesc}

\begin{cfuncdesc}{int}{PyRun_AnyFileExFlags}{FILE *fp, const char *filename,
                                             int closeit,
                                             PyCompilerFlags *flags}
  \var{fp}が対話的デバイス(コンソールや端末入力あるいは\UNIX{}仮想端末)と
  関連づけられたファイルを参照しているならば、
  \cfunction{PyRun_InteractiveLoop()}の値を返します。それ以外の場合は、
  \cfunction{PyRun_SimpleFile()}の結果を返します。\var{filename}が
  \NULL ならば、この関数はファイル名として\code{"???"}を使います。
\end{cfuncdesc}

\begin{cfuncdesc}{int}{PyRun_SimpleString}{const char *command}
下記の \cfunction{PyRun_SimpleStringFlags()} の
\var{PyCompilerFlags*} を \NULL にして単純化したインタフェースです。
\end{cfuncdesc}

\begin{cfuncdesc}{int}{PyRun_SimpleStringFlags}{const char *command,
                                                PyCompilerFlags *flags}
  \module{__main__}モジュールの中で\var{flags} に従って\var{command}
  に含まれる Python ソースコードを
  実行します。\module{__main__}がまだ存在しない場合は作成されます。
  正常終了の場合は\code{0}を返し、また例外が発生した場合は\code{-1}を
  返します。エラーがあっても、例外情報を得る方法はありません。
\end{cfuncdesc}

\begin{cfuncdesc}{int}{PyRun_SimpleFile}{FILE *fp, const char *filename}
下記の \cfunction{PyRun_SimpleStringFileExFlags()} の
\var{closeit} を \code{0} に、\var{flags} を \NULL にして単純化したイ
ンタフェースです。
\end{cfuncdesc}

\begin{cfuncdesc}{int}{PyRun_SimpleFileFlags}{FILE *fp, const char *filename,
                                              PyCompilerFlags *flags}
下記の \cfunction{PyRun_SimpleStringFileExFlags()} の
\var{closeit} を \code{0} にして単純化したインタフェースです。
\end{cfuncdesc}

\begin{cfuncdesc}{int}{PyRun_SimpleFileEx}{FILE *fp, const char *filename,
                                           int closeit}
下記の \cfunction{PyRun_SimpleStringFileExFlags()} の
\var{flags} を \NULL にして単純化したイ
ンタフェースです。
\end{cfuncdesc}

\begin{cfuncdesc}{int}{PyRun_SimpleFileExFlags}{FILE *fp, const char *filename,
                                                int closeit,
                                                PyCompilerFlags *flags}
Similar to \cfunction{PyRun_SimpleStringFlags()}, but the Python source
\cfunction{PyRun_SimpleString()}と似ていますが、Pythonソースコードを
メモリ内の文字列ではなく\var{fp}から読み込みます。
\var{filename}はそのファイルの名前でなければなりません。
\var{closeit} が真ならば、PyRun_SimpleFileExFlags は処理を戻す前に
ファイルを閉じます。
\end{cfuncdesc}


\begin{cfuncdesc}{int}{PyRun_InteractiveOne}{FILE *fp, const char *filename}
下記の \cfunction{PyRun_InteractiveOneFlags()} の\var{flags} を \NULL
にして単純化したインタフェースです。
\end{cfuncdesc}

\begin{cfuncdesc}{int}{PyRun_InteractiveOneFlags}{FILE *fp,
                                                  const char *filename,
                                                  PyCompilerFlags *flags}
対話的デバイスに関連付けられたファイルから文を一つ読み込み、
\var{flags} に従って実行します。
\var{filename}が\NULL ならば、\code{"???"}が代わりに使われます。
\code{sys.ps1}と\code{sys.ps2}を使って、ユーザにプロンプトを提示します。
入力が正常に実行されたときは\code{0}を返します。例外が発生した場合は
\code{-1}を返します。パースエラーの場合はPythonの一部として配布されている
\file{errcode.h}インクルードファイルにあるエラーコードを返します。
(\file{Python.h}は\file{errcode.h}をインクルードしません。したがって、
必要ならば特別にインクルードしなければならないことに注意してください。)
\end{cfuncdesc}

\begin{cfuncdesc}{int}{PyRun_InteractiveLoop}{FILE *fp, const char *filename}
下記の \cfunction{PyRun_InteractiveLoopFlags()} の\var{flags} を
\code{0} にして単純化したインタフェースです。
\end{cfuncdesc}

\begin{cfuncdesc}{int}{PyRun_InteractiveLoopFlags}{FILE *fp, 
                                                   const char *filename,
                                                   PyCompilerFlags *flags}
対話的デバイスに関連付けられたファイルから\EOF{} に達するまで複数の文を
読み込み実行します。\var{filename}が\NULL ならば、\code{"???"}が代わりに
使われます。\code{sys.ps1}と\code{sys.ps2}を使って、ユーザにプロンプトを
提示します。\EOF に達すると\code{0}を返します。
\end{cfuncdesc}

\begin{cfuncdesc}{struct _node*}{PyParser_SimpleParseString}{const char *str,
                                                             int start}
下記の \cfunction{PyRun_SimpleParseStringFlagsFilename()} の
\var{filename} を \NULL{} に、\var{flags} を \code{0} にして単純化したイ
ンタフェースです。
\end{cfuncdesc}

\begin{cfuncdesc}{struct _node*}{PyParser_SimpleParseStringFlags}{
                                 const char *str, int start, int flags}
下記の \cfunction{PyRun_SimpleParseStringFlagsFilename()} の
\var{filename} を \NULL{} にして単純化したインタフェースです。
\end{cfuncdesc}

\begin{cfuncdesc}{struct _node*}{PyParser_SimpleParseStringFlagsFilename}{
                                 const char *str, const char *filename,
                                 int start, int flags}
開始トークン\var{start}を使って\var{str}に含まれる Python ソースコード
を\var{flags} 引数に従ってパースします。効率的に評価可能なコードオブジェ
クトを作成するためにその結果を使うことができます。コード断片を何度も評
価しなければならない場合に役に立ちます。
\end{cfuncdesc}

\begin{cfuncdesc}{struct _node*}{PyParser_SimpleParseFile}{FILE *fp,
                                 const char *filename, int start}
下記の \cfunction{PyRun_SimpleParseFileFlags()} の\var{flags} を
\code{0} にして単純化したインタフェースです。
\end{cfuncdesc}

\begin{cfuncdesc}{struct _node*}{PyParser_SimpleParseFileFlags}{FILE *fp,
                                 const char *filename, int start, int flags}
\cfunction{PyParser_SimpleParseStringFlagsFilename()}に似ていますが、
Pythonソースコードをメモリ内の文字列ではなく\var{fp}から読み込みます。
\var{filename}はそのファイルの名前でなけれななりません。
\end{cfuncdesc}

\begin{cfuncdesc}{PyObject*}{PyRun_String}{const char *str, int start,
                                           PyObject *globals,
                                           PyObject *locals}
下記の \cfunction{PyRun_StringFlags()} の\var{flags} を\NULL にして単
純化したインタフェースです。
\end{cfuncdesc}

\begin{cfuncdesc}{PyObject*}{PyRun_StringFlags}{const char *str, int start,
                                                PyObject *globals,
                                                PyObject *locals,
                                                PyCompilerFlags *flags}
辞書\var{globals}と\var{locals}で指定されるコンテキストにおいて、
\var{str}に含まれるPythonソースコードをコンパイラフラグ \var{flags} の
もとで実行します。
パラメータ\var{start}はソースコードをパースするために使われるべき
開始トークンを指定します。

コードを実行した結果をPythonオブジェクトとして返します。または、
例外が発生したならば\NULL{} を返します。
\end{cfuncdesc}

\begin{cfuncdesc}{PyObject*}{PyRun_File}{FILE *fp, const char *filename,
                                         int start, PyObject *globals,
                                         PyObject *locals}
下記の \cfunction{PyRun_FileExFlags()} の\var{closeit} を\code{0} にし、
\var{flags} を\NULL にして単純化したインタフェースです。
\end{cfuncdesc}

\begin{cfuncdesc}{PyObject*}{PyRun_FileEx}{FILE *fp, const char *filename,
                                         int start, PyObject *globals,
                                         PyObject *locals, int closeit}
下記の \cfunction{PyRun_FileExFlags()} の
\var{flags} を\NULL にして単純化したインタフェースです。
\end{cfuncdesc}

\begin{cfuncdesc}{PyObject*}{PyRun_FileFlags}{FILE *fp, const char *filename,
                                         int start, PyObject *globals,
                                         PyObject *locals,
                                         PyCompilerFlags *flags}
下記の \cfunction{PyRun_FileExFlags()} の\var{closeit} を\code{0} にし
て単純化したインタフェースです。

\end{cfuncdesc}

\begin{cfuncdesc}{PyObject*}{PyRun_FileExFlags}{FILE *fp, const char *filename,
                                                int start, PyObject *globals,
                                                PyObject *locals, int closeit,
                                                PyCompilerFlags *flags}
\cfunction{PyRun_String()}と似ていますが、Pythonソースコードを
メモリ内の文字列ではなく\var{fp}から読み込みます。
\var{closeit} を真にすると、\cfunction{PyRun_FileExFlags()} から処理
を戻す前にファイルを閉じます。
\var{filename}はそのファイルの名前でなければなりません。
\end{cfuncdesc}

\begin{cfuncdesc}{PyObject*}{Py_CompileString}{const char *str,
                                               const char *filename,
                                               int start}
下記の\cfunction{Py_CompileStringFlags()} の \var{flags} を \NULL{} に
して単純化したインタフェースです。
\end{cfuncdesc}

\begin{cfuncdesc}{PyObject*}{Py_CompileStringFlags}{const char *str,
                                                    const char *filename,
                                                    int start,
                                                    PyCompilerFlags *flags}
  \var{str}内のPythonソースコードをパースしてコンパイルし、
  作られたコードオブジェクトを返します。開始トークンは
  \var{start}によって与えられます。これはコンパイル可能なコードを
  制限するために使うことができ、\constant{Py_eval_input}、
  \constant{Py_file_input}もしくは\constant{Py_single_input}であるべきです。
  \var{filename}で指定されるファイル名はコードオブジェクトを構築するために使われ、
  トレースバックあるいは\exception{SyntaxError}例外メッセージに出てくる可能性があります。
  コードがパースできなかったりコンパイルできなかったりした場合に、
  これは\NULL{} を返します。
\end{cfuncdesc}

\begin{cvardesc}{int}{Py_eval_input}
  単独の式に対するPython文法の開始記号で、
  \cfunction{Py_CompileString()}\ttindex{Py_CompileString()}と一緒に使います。
\end{cvardesc}

\begin{cvardesc}{int}{Py_file_input}
  ファイルあるいは他のソースから読み込まれた文の並びに対するPython文法の
  開始記号で、\cfunction{Py_CompileString()}\ttindex{Py_CompileString()}と
  一緒に使います。これは任意の長さのPythonソースコードをコンパイルするときに
  使う記号です。
\end{cvardesc}

\begin{cvardesc}{int}{Py_single_input}
  単一の文に対するPython文法の開始記号で、
  \cfunction{Py_CompileString()}\ttindex{Py_CompileString()}と一緒に使います。
  これは対話式のインタプリタループのための記号です。
\end{cvardesc}

\begin{ctypedesc}[PyCompilerFlags]{struct PyCompilerFlags}
コンパイラフラグを収めておくための構造体です。コードをコンパイルする
だけの場合、この構造体が \code{int flags} として渡されます。コードを実
行する場合には\code{PyCompilerFlags *flags} として渡されます。この場合、
\code{from __future__  import} は \var{flags} の内容を変更できます。

\code{PyCompilerFlags *flags} が\NULL の場合、 \member{cf_flags}
は \code{0} として扱われ、\code{from __future__ import} による変更は
無視されます。

\begin{verbatim}
struct PyCompilerFlags {
    int cf_flags;
}
\end{verbatim}

\end{ctypedesc}

\begin{cvardesc}{int}{CO_FUTURE_DIVISION}
このビットを \var{flags} にセットすると、除算演算子 \code{/} は
\pep{238} による 「真の除算 (true division)」 として扱われます。
\end{cvardesc}
