# 9. 최상위 요소들

파이썬 인터프리터는 여러 가지 출처로부터 입력을 얻을 수 있습니다: 표준 입력이나 프로그램 인자로 전달된 스크립트, 대화형으로 입력된 것, 모듈 소스 파일 등등. 이 장은 이 경우들에 사용되는 문법을 제공합니다.

## 9.1. 완전한 파이썬 프로그램

언어 규격이 어떤 식으로 언어 인터프리터가 실행되는지를 미리 규정할 필요는 없지만, 완전한 파이썬 프로그램이라는 개념을 갖는 것은 쓸모가 있습니다. 완전한 파이썬 프로그램은 최소한으로 초기화된 환경에서 실행됩니다: 모든 내장과 표준 모듈이 제공되지만, `sys` (각종 시스템 서비스들)와 `builtins` (내장 함수들, 예외들, `None`)과 `__main__` 이외의 어느 것도 초기화되지 않았습니다. 마지막 것은 완전한 프로그램의 실행을 위한 지역과 전역 이름 공간을 제공하는 데 사용됩니다.

완전한 파이썬 프로그램의 문법은 다음 섹션에서 설명되는 파일 입력의 경우입니다.

인터프리터는 대화형으로 실행될 수도 있습니다; 이 경우, 완전한 프로그램을 읽어서 실행하지 않고, 한 번에 한 문장 (복합문도 가능하다) 씩 읽어서 실행합니다. 초기 환경은 완전한 프로그램과 같습니다; 각 문장은 `__main__` 의 이름 공간에서 실행됩니다.

완전한 프로그램은 세 가지 형태로 인터프리터에게 전달될 수 있습니다: `-c` string 명령행 옵션으로, 첫 번째 명령행 인자로 전달된 파일로, 표준 입력으로. 파일이나 표준입력이 tty 장치면, 인터프리터는 대화형 모드로 돌입합니다; 그렇지 않으면 그 파일을 완전한 프로그램으로 실행합니다.

## 9.2. 파일 입력

비대화형 파일로부터 읽힌 모든 입력은 같은 형태를 취합니다:

    file_input ::=  (NEWLINE | statement)*

이 문법은 다음과 같은 상황에서 사용됩니다:

- (파일이나 문자열로부터 온) 완전한 파이썬 프로그램을 파싱할 때;

- 모듈을 파싱할 때;

- `exec()` 함수로 전달된 문자열을 파싱할 때;

## 9.3. 대화형 입력

대화형 모드에서의 입력은 다음과 같은 문법 규칙을 사용합니다:

    interactive_input ::=  [stmt_list] NEWLINE | compound_stmt NEWLINE

(최상위) 복합문은 대화형 모드에서 빈 줄을 붙여줘야 함에 유념해야 합니다; 파서가 입력의 끝을 감지하는 데 필요합니다.

## 9.4. 표현식 입력

표현식 입력을 위해 `eval()` 이 사용됩니다. 앞에 오는 공백을 무시합니다. `eval()` 의 문자열 인자는 다음과 같은 형식을 취해야 합니다:

    eval_input ::=  expression_list NEWLINE*