# 9. Komponen tingkat atas

Interpreter Python dapat memperoleh masukan dari sejumlah sumber: dari skrip yang diteruskan sebagai masukan standar atau sebagai argumen program, diketikkan secara interaktif, dari berkas sumber modul, dll. Bab ini memberikan sintaks yang digunakan dalam kasus-kasus tersebut.

## 9.1. Program Python lengkap

Meskipun spesifikasi bahasa tidak perlu menentukan bagaimana interpreter bahasa digunakan, penting untuk memiliki gagasan tentang program Python yang lengkap. Program Python lengkap dioperasikan dalam lingkungan yang diinisialisasi minimal: semua modul bawaan dan standar tersedia, tetapi tidak ada yang diinisialisasi, kecuali untuk `sys` (berbagai layanan sistem), `builtins` (fungsi bawaan, pengecualian dan `None`) dan `__main__`. Yang terakhir digunakan untuk menyediakan namespace lokal dan global untuk eksekusi program lengkap.

Sintaksis untuk program Python lengkap adalah untuk masukan berkas, dijelaskan pada bagian selanjutnya.

Interpreter juga dapat dipanggil dalam mode interaktif; dalam hal ini, ia tidak membaca dan menjalankan program yang lengkap tetapi membaca dan mengeksekusi satu pernyataan (mungkin digabungkan) pada suatu waktu. Lingkungan awal identik dengan program lengkap; setiap pernyataan dieksekusi di namespace `__main__`.

Program lengkap dapat diteruskan ke interpreter dalam tiga bentuk: dengan opsi `-c` string opsi baris perintah, sebagai file yang diteruskan sebagai argumen baris perintah pertama, atau sebagai masukan standar. Jika berkas atau masukan standar adalah perangkat tty, interpreter memasuki mode interaktif; jika tidak, berkas akan dieksekusi sebagai program yang lengkap.

## 9.2. Masukan dari Berkas

Semua input yang dibaca dari berkas non-interaktif memiliki bentuk yang sama:

    file_input ::= (NEWLINE | statement)*

Sintaks ini digunakan dalam situasi berikut:

- saat mengurai program Python lengkap (dari berkas atau dari string);

- ketika mengurai sebuah modul;

- saat mengurai sebuah string yang dilewatkan ke fungsi `exec()`;

## 9.3. Masukan interaktif

Input dalam mode interaktif diuraikan menggunakan tata bahasa berikut:

    interactive_input ::= [stmt_list] NEWLINE | compound_stmt NEWLINE

Perhatikan bahwa pernyataan gabungan (tingkat atas) harus diikuti oleh baris kosong dalam mode interaktif; ini diperlukan untuk membantu parser mendeteksi akhir masukan.

## 9.4. Masukan ekspresi

`eval()` digunakan untuk masukan ekspresi. Itu mengabaikan spasi whitespace sebelumnya. Argumen string ke `eval()` harus memiliki bentuk berikut:

    eval_input ::= expression_list NEWLINE*