Υλοποίησε έναν αξιολογητή για ένα πολύ απλό υποσύνολο της Forth.
Forth είναι μια γλώσσα προγραμματισμού βασισμένη σε στοίβα. Υλοποίησε έναν πολύ βασικό αξιολογητή για ένα μικρό υποσύνολο της Forth.
Ο αξιολογητής σου πρέπει να υποστηρίζει τις παρακάτω λέξεις:
+, -, *, / (ακέραια αριθμητική)DUP, DROP, SWAP, OVER (χειρισμός στοίβας)Ο αξιολογητής σου πρέπει επίσης να υποστηρίζει τον ορισμό νέων λέξεων χρησιμοποιώντας τη συνηθισμένη σύνταξη: : word-name definition ;.
Για να κρατήσουμε τα πράγματα απλά, ο μόνος τύπος δεδομένων που χρειάζεται να υποστηρίξεις είναι οι προσημασμένοι ακέραιοι μεγέθους τουλάχιστον 16 bit.
Πρέπει να χρησιμοποιήσεις τους παρακάτω κανόνες για τη σύνταξη: ένας αριθμός είναι μια ακολουθία από ένα ή περισσότερα ψηφία (ASCII), και μια λέξη είναι μια ακολουθία από ένα ή περισσότερα γράμματα, ψηφία, σύμβολα ή σημεία στίξης που δεν είναι αριθμός. (Η Forth χρησιμοποιεί πιθανώς ελαφρώς διαφορετικούς κανόνες, αλλά αυτό είναι αρκετά κοντά.)
Οι λέξεις δεν κάνουν διάκριση πεζών-κεφαλαίων.
Στη Forth οι συναρτήσεις ονομάζονται words και λειτουργούν πάνω σε μια στοίβα δεδομένων.
Κάθε λέξη παίρνει τις παραμέτρους της από τη στοίβα και επιστρέφει τα αποτελέσματά της στη στοίβα.
Η τεκμηρίωση της Forth περιέχει πάντα την κατάσταση της στοίβας δεδομένων πριν την εκτέλεση της λέξης και μετά την εκτέλεση της λέξης με τον εξής τρόπο ( p1 p2 ... pN --- r1 r2 ... rN ).
Οι τιμές p1 έως pN αντιπροσωπεύουν τις παραμέτρους της λέξης στη στοίβα πριν από την κλήση (η στοίβα μπορεί να έχει επιπλέον δεδομένα πιο πάνω στη στοίβα, που δεν αναπαρίστανται εδώ) και οι τιμές r1 έως rN αντιπροσωπεύουν τις τιμές επιστροφής της λέξης στη στοίβα μετά την κλήση.
Ο διαχωριστής --- ξεχωρίζει την κατάσταση της στοίβας πριν και μετά την εκτέλεση της λέξης.
Οι λέξεις που πρέπει να υλοποιηθούν ορίζονται ως εξής:
| λέξη | κατάσταση στοίβας | περιγραφή |
|---|---|---|
+ |
( a b --- sum ) |
sum = a + b |
- |
( a b --- diff ) |
diff = a - b |
* |
( a b --- prod ) |
prod = a * b |
/ |
( a b --- quot ) |
quot = a / b |
dup |
( a --- a a ) |
αντιγράφει την τιμή στην κορυφή της στοίβας |
drop |
( a --- ) |
αφαιρεί την τιμή από την κορυφή της στοίβας |
swap |
( a b --- b a ) |
ανταλλάσσει τις δύο τιμές στην κορυφή της στοίβας |
over |
( a b c --- a b c b ) |
αντιγράφει τη δεύτερη τιμή στην κορυφή της στοίβας |
Αν θέλεις να παίξεις με έναν διαδικτυακό διερμηνευτή Forth ή να μάθεις περισσότερα για τις λέξεις που πρέπει να υλοποιηθούν, δοκίμασε το Easy Forth (συγκεκριμένα τις ενότητες Adding Some Numbers, Defining Words και Stack Manipulation).
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Odin με 73 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.