Αποστολέας Θέμα: ΝΕΟΣ διαδικτυακός διερμηνευτής της Γλώσσας  (Αναγνώστηκε 842 φορές)

komni

  • Οπαδός
  • **
  • Μηνύματα: 10
Απ: ΝΕΟΣ διαδικτυακός διερμηνευτής της Γλώσσας
« Απάντηση #30 στις: 22 Νοέ 2020, 12:41:22 πμ »
@ApoAntonis Ευχαριστω!

@alkisg Οκ, κατάλαβα. Εγώ δεν έχω χρησιμοποιήσει καμία στοίβα στον διερμηνευτή και μου βγήκε πιο φυσικό να είναι με τη σειρά. Αυτό γιατί με τα optimizations που κάνει το V8(και τα υπόλοιπα JS engines) πλέον δεν υπάρχει μεγάλη διαφορά και απλά βάζω παντού Arrays. Θα το αλλάξω για να είμαστε συμβατοί...

@bugman Ναι τώρα το κατάλαβα. Ευχαριστώ!

alkiez

  • Νέος
  • *
  • Μηνύματα: 1
Απ: ΝΕΟΣ διαδικτυακός διερμηνευτής της Γλώσσας
« Απάντηση #31 στις: Χθες στις 08:21:49 μμ »
Πολλά πολλά μπράβο Κομνηνέ και χαρά στο κουράγιο σου.

-οι ταπεινοί κι ελάχιστοι χρήστες μακ σε ευχαριστούμε λίίίίγο παραπάνω.

Νίκος Αδαμόπουλος

  • Γενικός διαχειριστής
  • *****
  • Μηνύματα: 2820
  • Πύργος Ηλείας
Απ: ΝΕΟΣ διαδικτυακός διερμηνευτής της Γλώσσας
« Απάντηση #32 στις: Χθες στις 09:32:34 μμ »
Συγχαρητήρια κι από μένα Κομνηνέ και ευχαριστούμε για την προσφορά σου.
Καλή συνέχεια και σε ό,τι κι αν κάνεις στο μέλλον!

komni

  • Οπαδός
  • **
  • Μηνύματα: 10
Απ: ΝΕΟΣ διαδικτυακός διερμηνευτής της Γλώσσας
« Απάντηση #33 στις: Σήμερα στις 02:07:23 πμ »
@alkiez Ευχαριστω!!

@Νίκος Αδαμόπουλος Ευχαριστώ πολυ!

Ερώτηση προς όλους:
Έστω το ακόλουθο πρόγραμμα με είσοδο 0
Κώδικας: [Επιλογή]
Προγραμμα ShortCircuit
Μεταβλητες
Ακεραιες: κ
Αρχη
  Διαβασε κ
  Αν κ <> 0 και 5 mod κ = 2 τοτε
    Γράψε 'Οκ'
  Τελος_Αν
Τελος_Προγραμματος
Προφανώς, δεν γίνεται το δεξί μέρος του mod να είναι ίσο με το μηδέν οπότε θα έπρεπε να σκάσει με Runtime Error.
Αλλά εφόσον η πράξη του mod είναι στο δεξί μέρος ΚΑΙ και η πρώτη συνθήκη του ΚΑΙ αποτιμήται σε ΨΕΥΔΗΣ τότε θα μπρούσε ο διερμηνευτής να μην κοιτάξει καν την δεύτερη(όπως γίνεται σε όλες τις γλώσσες προγραμματισμού) και να αποτιμήσει το ΚΑΙ ως ΨΕΥΔΗΣ χωρίς Runtime Error.

Στον Διερμηνευτή του Άλκη το παράδειγμα σκάει αλλά δεν βρήκα να αναφέρει κάτι το βιβλίο πάνω σε αυτό... Γενικά αυτή είναι μια ιδιότητα που χρησιμοποιείται αρκετά οπότε ας μου ξεκαθαρίσει κάποιος αν είναι ασάφεια για να ξέρω τι να υλοποιήσω. Εγώ πιστεύω πως το παράδειγμα θα έπρεπε να τρέχει μια χαρά με είσοδο 0.

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 531
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: ΝΕΟΣ διαδικτυακός διερμηνευτής της Γλώσσας
« Απάντηση #34 στις: Σήμερα στις 08:12:47 πμ »
@Komni
Αυτό που αναφέρεις λέγεται short circuit evaluation το οποίο στη γλώσσα θα μπορούσε ίσως να παίξει σκεπτόμενοι ότι: Στις συναρτήσεις που φτιάχνουμε δεν υπάρχουν παρενέργειες, δεν επιφέρουν αλλαγή στη κατάσταση του προγράμματος, στο σημείο της κλήσης! Επίσης να αποδεχτούμε ότι η εκτέλεση των μερών μιας λογικής/αριθμητικής έκφρασης είναι εγγυημένη ότι θα γίνει όπως φαίνεται στο πηγαίο κώδικα.
Να γίνω πιο ξεκάθαρος:
1. Η κατάσταση προγράμματος (state), προσδιορίζεται από τις τιμές που έχουν οι μεταβλητές σε μια δεδομένη στιγμή. Όταν εκτελείται η συνάρτηση, αν είχε στατικές μεταβλητές ή πρόσβαση σε καθολικές μεταβλητές, ή σε τοπικές κάποια επίπεδα παραπάνω, και αυτή η πρόσβαση αλλάζει τιμές σε αυτές, τότε η συνάρτηση επιφέρει αλλαγές, άρα λέμε ότι οι συναρτήσεις αλλάζουν την κατάσταση του προγράμματος. Σε αυτή την περίπτωση το short circuit μπορεί να φέρει λάθος, αφού δεν θα γίνει κάποια προβλεπόμενη αλλαγή κατάστασης.


Στη ΓΛΩΣΣΑ έχουμε τα παρακάτω χαρακτηριστικά που μας δείχνουν ότι δεν έχουμε παρενέργειες στην εκτέλεση των συναρτήσεων:
- Δεν έχουμε πέρασμα με αναφορά μεταβλητών σε Συνάρτηση
- Στο πέρασμα πίνακα έχουμε αντιγραφή
- Δεν έχουμε θέαση μη τοπικών μεταβλητών (οι τυπικές παράμετροι είναι τοπικές μεταβλητές), άρα δεν θα έχουμε αλλαγές έξω από τη συνάρτηση
- Απαγορεύονται οι εντολές εισόδου/εξόδου στις συναρτήσεις. Άρα δεν έχουμε αλλαγή κατάστασης ούτε στο περιβάλλον, πχ με την εμφάνιση εισαγωγής στοιχείου ή με την εμφάνιση στοιχείων.


2. Στον διερμηνευτή σου χρησιμοποιείς AST δένδρο, όπου είναι εύκολο να απορρίψεις κλάδο, και ίσως αυτό σε πάει στη σκέψη, να το κάνεις! Μπορείς όμως να εγγυηθείς ότι η εκτέλεση των επιμέρους εκφράσεων σε μια έκφραση θα γίνει με τη σειρά που περιμένει ο προγραμματιστής; Πχ στο Α ΚΑΙ Β όπου τα Α και Β είναι εκφράσεις, θα αποτιμηθεί η Α και μετά η Β ή το ανάποδο; Αν θυμάμαι στο κώδικά σου έχεις άμεση εκτέλεση από το AST σε μια συνάρτηση interpreter, δηλαδή δεν παίζει code generator και vm. Οπότε μπορείς να έχεις καλύτερο έλεγχο (δεν παίζουν πολλά στάδια, για να έχουμε κάτι απρόβλεπτο).  Στο (Α ΚΑΙ Β) ΚΑΙ (Γ  ΚΑΙ Δ)  αν ο κλάδος Γ είναι FALSE τότε το Δ δεν θα αποτιμηθεί σε short circuit evaluation, αλλά τα Α και Β θα αποτιμηθούν; Αν τα Α ή Β είναι FALSE τότε τα Γ και Δ δεν θα αποτιμηθούν, ή όχι; Δηλαδή το short circuit μεταδίδεται σε κλάδους έξω από αυτό;

Κατά τη γνώμη μου μπορείς να βάλεις ιδιότητα short circuit, να τσεκάρεις όμως τις σύνθετες εκφράσεις, να δεις αν κρατάς την "ιδιότητα" σε όλο το ast.