# 9. Composants de plus haut niveau

L'entrée de l'interpréteur Python peut provenir d'un certain nombre de sources : d'un script passé en entrée standard ou en argument de programme, tapée de manière interactive, à partir d'un fichier source de module, etc. Ce chapitre donne la syntaxe utilisée dans ces différents cas.

## 9.1. Programmes Python complets

Bien que les spécifications d'un langage n'ont pas à préciser comment l'interpréteur du langage est invoqué, il est utile d'avoir des notions sur ce qu'est un programme Python complet. Un programme Python complet est exécuté dans un environnement dont l'initialisation est minimale : tous les modules intégrés et standard sont disponibles mais aucun n'a été initialisé, à l'exception de `sys` (divers services système), `builtins` (fonctions natives, exceptions et `None`) et `__main__`. Ce dernier est utilisé pour avoir des espaces de nommage locaux et globaux pour l'exécution du programme complet.

La syntaxe d'un programme Python complet est celle d'un fichier d'entrée, dont la description est donnée dans la section suivante.

L'interpréteur peut également être invoqué en mode interactif ; dans ce cas, il ne lit et n'exécute pas un programme complet mais lit et exécute une seule instruction (éventuellement composée) à la fois. L'environnement initial est identique à celui d'un programme complet ; chaque instruction est exécutée dans l'espace de nommage de `__main__`.

Un programme complet peut être transmis à l'interpréteur sous trois formes : avec l'option `-c` chaîne en ligne de commande, avec un fichier passé comme premier argument de ligne de commande ou comme entrée standard. Si le fichier ou l'entrée standard est un périphérique tty, l'interpréteur entre en mode interactif ; sinon, il exécute le fichier comme un programme complet.

## 9.2. Fichier d'entrée

Toutes les entrées lues à partir de fichiers non interactifs sont de la même forme :

    file_input ::=  (NEWLINE | statement)*

Cette syntaxe est utilisée dans les situations suivantes :

- lors de l'analyse d'un programme Python complet (à partir d'un fichier ou d'une chaîne de caractères) ;

- lors de l'analyse d'un module ;

- lors de l'analyse d'une chaîne de caractères passée à la fonction `exec()`.

## 9.3. Entrée interactive

L'entrée en mode interactif est analysée à l'aide de la grammaire suivante :

    interactive_input ::=  [stmt_list] NEWLINE | compound_stmt NEWLINE

Notez qu'une instruction composée (de niveau supérieur) doit être suivie d'une ligne blanche en mode interactif ; c'est nécessaire pour aider l'analyseur à détecter la fin de l'entrée.

## 9.4. Entrée d'expression

`eval()` est utilisée pour évaluer les expressions entrées. Elle ignore les espaces en tête. L'argument de `eval()`, de type chaîne de caractères, doit être de la forme suivante :

    eval_input ::=  expression_list NEWLINE*