# 9. Συστατικά ανωτάτου επιπέδου

Ο διερμηνέας της Python μπορεί να λάβει την είσοδό του από διάφορες πηγές: από ένα script που του δίνεται ως τυπική είσοδος ή ως όρισμα προγράμματος, πληκτρολογημένο διαδραστικά, από ένα αρχείο πηγαίου κώδικα που περιέχει ένα module, κ.λπ. Αυτό το κεφάλαιο παραθέτει τη σύνταξη που χρησιμοποιείται σε αυτές τις περιπτώσεις.

## 9.1. Πλήρη προγράμματα Python

Αν και μια προδιαγραφή γλώσσας δεν χρειάζεται να ορίζει τον τρόπο κλήσης του διερμηνέα της γλώσσας, είναι χρήσιμο να υπάρχει η έννοια ενός πλήρους Python προγράμματος. Ένα πλήρες πρόγραμμα Python εκτελείται σε ένα ελάχιστα αρχικοποιημένο περιβάλλον: όλα τα ενσωματωμένα και τυπικά modules είναι διαθέσιμα, αλλά κανένα δεν έχει αρχικοποιηθεί, εκτός από τα `sys` (διάφορες υπηρεσίες του συστήματος), `builtins` (ενσωματωμένες συναρτήσεις, εξαιρέσεις και `None`) και το `__main__`. Το τελευταίο χρησιμοποιείται για να παρέχει τον τοπικό και καθολικό χώρο ονομάτων για την εκτέλεση του πλήρους προγράμματος.

Η σύνταξη για ένα πλήρες πρόγραμμα Python είναι αυτή της εισόδου από αρχείο, που περιγράφεται στην επόμενη ενότητα.

Ο διερμηνέας μπορεί επίσης να κληθεί σε διαδραστική λειτουργία· σε αυτήν την περίπτωση, δεν διαβάζει και δεν εκτελεί ένα πλήρες πρόγραμμα αλλά διαβάζει και εκτελεί μία εντολή (πιθανώς σύνθετη) κάθε φορά. Το αρχικό περιβάλλον είναι πανομοιότυπο με αυτό ενός πλήρους προγράμματος· κάθε εντολή εκτελείται στον χώρο ονομάτων του `__main__`.

Ένα πλήρες πρόγραμμα μπορεί να δοθεί στον διερμηνέα με τρεις μορφές: με την επιλογή γραμμής εντολών `-c` string, ως αρχείο που δίνεται ως το πρώτο όρισμα της γραμμής εντολών, ή ως τυπική είσοδος. Εάν το αρχείο ή η τυπική είσοδος είναι μια συσκευή tty, ο διερμηνέας εισέρχεται σε διαδραστική λειτουργία· διαφορετικά, εκτελεί το αρχείο ως πλήρες πρόγραμμα.

## 9.2. Είσοδος από αρχείο

Όλη η είσοδος που διαβάζεται από μη διαδραστικά αρχεία έχει την ίδια μορφή:

    file_input: (NEWLINE | statement)* ENDMARKER

Αυτή η σύνταξη χρησιμοποιείται στις ακόλουθες περιπτώσεις:

- κατά την ανάλυση ενός πλήρους προγράμματος Python (από αρχείο ή από συμβολοσειρά)·

- κατά την ανάλυση ενός module·

- κατά την ανάλυση μιας συμβολοσειράς που δίνεται στη συνάρτηση `exec()`·

## 9.3. Διαδραστική είσοδος

Η είσοδος σε διαδραστική λειτουργία αναλύεται χρησιμοποιώντας την ακόλουθη γραμματική:

    interactive_input: [stmt_list] NEWLINE | compound_stmt NEWLINE | ENDMARKER

Σημειώστε ότι μια (ανωτάτου επιπέδου) σύνθετη εντολή πρέπει να ακολουθείται από μια κενή γραμμή σε διαδραστική λειτουργία· αυτό είναι απαραίτητο για να βοηθήσει τον αναλυτή να εντοπίσει το τέλος της εισόδου.

## 9.4. Είσοδος έκφρασης

Η `eval()` χρησιμοποιείται για την είσοδο των εκφράσεων. Αγνοεί τα αρχικά κενά. Το όρισμα συμβολοσειράς στη `eval()` πρέπει να έχει την ακόλουθη μορφή:

    eval_input: expression_list NEWLINE* ENDMARKER