Γενικό Λύκειο > Ψευδογλώσσα

Διερμηνευτής Ψευδογλώσσας

(1/15) > >>

sstergou:
Τους τελευταίους μήνες κάνω μια προσπάθεια υλοποίησης της ψευδογλώσσας της ΑΕΠΠ. Μια γρήγορη ερώτηση που έρχεται στο μυαλό όλων είναι:"μα καλά, πως είναι δυνατόν να υλοποιηθεί μια ψευδογλώσσα; Λέγεται έτσι επειδή ακριβώς δεν είναι υλοποιήσιμη.".

Το πρόβλημα με την ψευδογλώσσα του βιβλίου είναι ότι είναι περισσότερο γλώσσα παρά ψευδό και αυτό κατά τη γνώμη μου οφείλεται κυρίως στις πανελλήνιες εξετάσεις. Έτσι πιστεύω ότι η ψευδογλώσσα έχει εκφυλιστεί σε μια γλώσσα προγραμματισμού.

Αυτή την εκφυλισμένη ψευδογλώσσα προσπαθώ να υλοποιήσω και δεν υποστηρίζω πως αυτό είχαν στο μυαλό τους οι συγγραφείς. Με νοιάζει να υλοποιηθεί με συνέπεια το υποσύνολο της ψευδογλώσσας που χρησιμοποιείται στο 95% των περιπτώσεων.

Πιστεύω πως η αλγοριθμική και πολύ περισσότερο ο προγραμματισμός διδάσκεται  καλύτερα με την βοήθεια του υπολογιστή.

Ένας μεταγλωττιστής/διερμηνευτής για την ψευδογλώσσα μπορεί να είναι εξαιρετικά χρήσιμος για τους παρακάτω λόγους.


* Δίνει την ευκαιρία σε εμάς για έναν έλεγχο του κώδικά μας.
* Εισάγει τα παιδιά στην αλγοριθμική και τον προγραμματισμό μέσα από ένα περιβάλλον φιλικό  χωρίς δηλώσεις,τύπους κτλ
* Δίνει την δυνατότητα για χρησιμοποίηση του εργαστηρίου από την αρχή και χωρίς την παρουσίαση όλης της ύλης ταυτόχρονα.   
Μιας και που καμιά επίσημη τυποποίηση της ψευδογλώσσας δεν υπάρχει κάποια πράγματα πρέπει να τα μαντέψω. Επειδή όμως μπορεί να μην μαντεύω καλά ή κάποιοι να έχουν καλύτερες ιδέες κάποια πράγματα θέλω να τα δημοσιεύω στο στέκι και όποιος ενδιαφέρεται για το θέμα να μπορεί να πει τη γνώμη του. Ελπίζω η προσπάθεια αυτή που κάνω να βρει ανταπόκριση από την κοινότητα καθώς πιστεύω πως θα είναι κάτι χρήσιμο για όλους το οποίο θα παρέχεται δωρεάν.

Μέχρι τώρα έχει υλοποιηθεί ο λεκτικός και συντακτικός αναλυτής(backend) και μένει ο συντάκτης και το περιβάλλον εκτέλεσης (frontend).

Πρόβλημα 1 – Τύποι

Υπάρχουν 3 βασικοί τύποι εκφράσεων αλφαριθμητικές, αριθμητικές, λογικές.
Ο αριθμητικός τύπος διακρίνεται σε ακέραιο και πραγματικό. Η διάκριση αυτή γίνεται μόνο για την εφαρμογή των τελεστών div-mod.

Μια μεταβλητή που διαβάζεται δεν έχει τύπο. Αποκτά τύπο από την στιγμή που της ανατίθεται με την εντολή εκχώρησης ή με τη χρησιμοποίηση της σε κάποια έκφραση.

Επειδή δεν υπάρχουν δηλώσεις, δεν είναι πάντα δυνατόν να ξέρουμε τον τύπο κατά τη διάρκεια της μεταγλώττισης. Για αυτό το  λόγο ο έλεγχος για σωστούς τύπους μετατοπίζεται στην διάρκεια της εκτέλεσης.

Οι μεταβλητές που δεν έχουν τύπο αποκτούν τύπο σύμφωνα με τους παρακάτω κανόνες.

* Όποια αγνώστου τύπου μεταβλητή χρησιμοποιείται μαζί με κάποιον αριθμητικό τελεστή αποκτά αυτόματα τον αριθμητικό τύπο.
* Όποια αγνώστου τύπου μεταβλητή  χρησιμοποιείται μαζί με κάποιον συγκριτικό τελεστή τότε ελέγχεται ο τύπος του άλλου τελεσταίου. Αν είναι αλφαριθμητικό τότε και αυτή γίνεται αλφαριθμητική, αν είναι αριθμός τότε γίνεται αριθμητική, αν και ο άλλος τελεσταίος δεν έχει τύπο τότε γίνεται διαδοχικά σύγκριση αριθμών – αλφαριθμητικών για να εξακριβωθεί ο κατάλληλος τύπος
* Όποια αγνώστου τύπου μεταβλητή  χρησιμοποιείται μαζί με κάποιον λογικό τελεστή τότε αποκτά αυτόματα τον λογικό τύπο.
Από την στιγμή που θα αποδοθεί τύπος σε μια μεταβλητή αυτός δεν θα μπορεί να αλλάξει. Οποιαδήποτε “παράνομη” χρήση τελεστών θα έχει την συνέπεια ενός σφάλματος χρόνου εκτέλεσης.

Ο λόγος που τα γράφω αυτά είναι επειδή θέλω τη γνώμη σας...Οποιαδήποτε βοήθεια θα εκτιμηθεί ιδιαίτερα.
 Ελπίζω να μην σας κούρασα.

P.Tsiotakis:
Είμαι απόλυτα σύμφωνος με την ιδέα Στάθη και μάλιστα την είχα προτείνει και στους 2 αστέρες (Άλκη και Σπύρο), είναι γνωστή η αντιπάθεια που έχω στη ΓΛΩΣΣΑ.

1. Συμφωνώ απόλυτα με την λογική "απόδοσης" τύπου στη μεταβλητή κατά την πρώτη χρήση και το μήνυμα λάθους σε μεταγενέστερη λάθος χρήση.  :)

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

Φυσικά, πρέπει να καλύπτονται και οι λάθος εκχωρήσεις του στυλ  α <- 2 * "ζ".

Εγω θέλω να βοηθήσω. Υπάρχουν σίγουρα ΠΑΡΑ πολλά θέματα που θα ανακύψουν και θέλω να συμμετέχω στη συζήτηση.

sstergou:
Χαίρομαι ιδιαίτερα για για την συμμετοχή σου Παναγιώτη.  :)


--- Παράθεση ---Φυσικά, πρέπει να καλύπτονται και οι λάθος εκχωρήσεις του στυλ  α <- 2 * "ζ"
--- Τέλος παράθεσης ---

Αυτό σημαίνει ότι μέρος των ελέγχων θα πρέπει να γίνει πριν την εκτέλεση. Ποιοι όμως έλεγχοι θα γίνονται πριν και ποιοι μετά;

Αν ελέγχονται μόνο οι εκφράσεις που έχουν μέσα σταθερές;
Τι γίνεται με το :

Διάβασε α
Διάβασε β

γ <- α + β

γ <- "αα";

Γνώμη μου είναι πως πρέπει να είναι σφάλμα χρόνου εκτέλεσης αλλά θέλω να ακούσω και τη γνώμη άλλων πάνω στο θέμα.


--- Παράθεση από: Τσιωτάκης Παναγιώτης στις 20 Μαΐ 2008, 07:55:04 μμ ---Υπάρχουν σίγουρα ΠΑΡΑ πολλά θέματα που θα ανακύψουν και θέλω να συμμετέχω στη συζήτηση.

--- Τέλος παράθεσης ---

Αυτό είναι το μόνο σίγουρο, σκέψου μόνο την κλήση αλγορίθμου από αλγόριθμο  :o

P.Tsiotakis:
Την κλήση αλγορίθμου απο αλγόριθμο, μπορείς να την αφήσεις (ή κ να μην την υλοποιήσεις καν)

Στο παράδειγμά σου, προφανώς οι μεταβλητές α, β, γ είναι αριθμητικές.
Και βέβαια, μόνο αν υπάρχει div, mod σε μια έκφραση, θα θεωρείται ακέραια κάποια μεταβλητή, αν και στην ψευδογλώσσα πάλι αριθμητική θεωρείται..

sstergou:
Μάλλον δεν γλιτώνουμε το type checking και κατά την διάρκεια της μεταγλώττισης.

Άρα 2 ειδών λάθη τύπων:

* ότι λάθος μπορεί να πιαστεί κατά τη διάρκεια της μεταγλώττισης
* Λάθη χρόνου εκτέλεσης

Ήλπιζα να γλιτώσω το πρώτο αλλά μάλλον είναι κακή ιδέα τελικά.


--- Παράθεση ---Την κλήση αλγορίθμου από αλγόριθμο, μπορείς να την αφήσεις ...
--- Τέλος παράθεσης ---

Σίγουρα θα την αφήσω για τελευταία πάντως...

Πλοήγηση

[0] Λίστα μηνυμάτων

[#] Επόμενη σελίδα

Μετάβαση στην πλήρη έκδοση