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)* ENDMARKER

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 | ENDMARKER

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* ENDMARKER
