# 9. トップレベル要素

Python インタプリタは、標準入力や、プログラムの引数として与えられたスクリプト、対話的にタイプ入力された命令、モジュールのソースファイルなど、様々な入力源から入力を得ることができます。この章では、それぞれの場合に用いられる構文法について説明しています。

## 9.1. 完全な Python プログラム

言語仕様の中では、その言語を処理するインタプリタがどのように起動されるかまで規定する必要はないのですが、完全な Python プログラムの概念を知っておくと役に立ちます。完全な Python プログラムは、最小限に初期化された環境: 全ての組み込み変数と標準モジュールが利用可能で、かつ `sys` (様々なシステムサービス)、 `builtins` (組み込み関数、例外、および `None`)、 `__main__` の 3 つを除く全てのモジュールが初期化されていない状態で動作します。 `__main__` は、完全なプログラムを実行する際に、ローカルおよびグローバルな名前空間を提供するために用いられます。

完全な Python プログラムの構文は、下の節で述べるファイル入力のためのものです。

インタプリタは、対話的モード (interactive mode) で起動されることもあります; この場合、インタプリタは完全なプログラムを読んで実行するのではなく、一度に単一の実行文 (複合文のときもあります) を読み込んで実行します。初期状態の環境は、完全なプログラムを実行するときの環境と同じです; 各実行文は、 `__main__` の名前空間内で実行されます。

完全なプログラムは3つの形式でインタープリタに渡せます: `-c` string コマンドラインオプションで、コマンドラインの第 1 引数で渡されるファイル、あるいは標準入力として渡します。 ファイルや標準入力が tty デバイスだった場合、インタープリタは対話モードに入ります。 それ以外の場合は、ファイルを完全なプログラムとして実行します。

## 9.2. ファイル入力

非対話的なファイルから読み出された入力は、全て同じ形式:

    file_input ::=  (NEWLINE | statement)*

をとります。この構文法は、以下の状況で用いられます:

- (ファイルや文字列内の) 完全な Python プログラムを構文解析するとき;

- モジュールを構文解析するとき;

- `exec()` で渡された文字列を構文解析するとき;

## 9.3. 対話的入力

対話モードでの入力は、以下の文法の下に構文解析されます:

    interactive_input ::=  [stmt_list] NEWLINE | compound_stmt NEWLINE

対話モードでは、(トップレベルの) 複合文の最後に空白行を入れなくてはならないことに注意してください; これは、複合文の終端をパーザが検出するための手がかりとして必要です。

## 9.4. 式入力

式入力には `eval()` が使われます。これは先頭の空白を無視します。 `eval()` に対する文字列引数は、以下の形式をとらなければなりません:

    eval_input ::=  expression_list NEWLINE*