Ψηφοφορία

Βοηθάει η ύπαρξη διερμηνευτή για την Ψευδογλώσσα τον μαθητή;

Ναι
14 (93.3%)
Όχι
1 (6.7%)

Σύνολο ψηφοφόρων: 15

Αποστολέας Θέμα: Υλοποίηση Ψευδογλώσσας  (Αναγνώστηκε 5491 φορές)

geochatz

  • Θαμώνας
  • ***
  • Μηνύματα: 33
Απ: Υλοποίηση Ψευδογλώσσας
« Απάντηση #30 στις: 19 Ιαν 2021, 03:54:02 μμ »
Ευχαριστώ! Δεν την έχω ξανακούσει αυτή τη συνάρτηση.. Υπάρχει πουθενά στο σχολικό;
Η αλήθεια είναι ότι δεν αναφέρεται στο σχολικό αλλά είναι κρίμα που δεν υπάρχει.
Εδώ και μια παλαιότερη συζήτηση επί του θέματος.
Θα μου πεις, βέβαια, άμα προσθέταμε όποια συνάρτηση του κατέβει του καθενός, θα χάναμε τη μπάλα...

pgrontas

  • Ομάδα διαγωνισμάτων 2016
  • *
  • Μηνύματα: 1451
  • There are always possibilities...
Απ: Υλοποίηση Ψευδογλώσσας
« Απάντηση #31 στις: 19 Ιαν 2021, 03:54:40 μμ »
Καλησπέρα λέει κάτι το σχολικό πάνω σε αυτό; Στις γλώσσες που γράφω εγώ το όχι έχει μεγαλύτερη προτεραιότητα από τους συγκρητικούς.

Ναι, και στην ΓΛΩΣΣΑ και στην ΨΕΥΔΟΓΛΩΣΣΑ, οι λογικοί τελεστές (άρα και το όχι) έπονται των συγκριτικών (σελ. 139 Γ Λυκείου και σελ 35 Β Λυκείου).
Με την ευκαιρία,  Κομνηνέ τι τάξη πας (φυσικά αν θες απαντάς).
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

bugman

  • Επισκέπτης
Απ: Υλοποίηση Ψευδογλώσσας
« Απάντηση #32 στις: 19 Ιαν 2021, 04:53:51 μμ »
Πάλι έσβησαν την απάντησή μου!
Έδωσα την λύση στο πρόβλημα και αυτός που το έσβησε απλά δεν το κατάλαβε!

komni

  • Θαμώνας
  • ***
  • Μηνύματα: 48
Απ: Υλοποίηση Ψευδογλώσσας
« Απάντηση #33 στις: 19 Ιαν 2021, 05:30:26 μμ »
Η αλήθεια είναι ότι δεν αναφέρεται στο σχολικό αλλά είναι κρίμα που δεν υπάρχει.
Εδώ και μια παλαιότερη συζήτηση επί του θέματος.
Θα μου πεις, βέβαια, άμα προσθέταμε όποια συνάρτηση του κατέβει του καθενός, θα χάναμε τη μπάλα...

Ναι, θα προτιμούσα να μην υλοποιήσω συνάρτηση που δεν είναι δεκτή στις πανελλήνιες για να μην κάψω κανέναν μαθητή που ίσως την έγραφε.

Παρόλα αυτά είναι πολύ εύκολο για κάποιον να κάνει extend τον διερμηνευτή μου και να βάλει δικές του συναρτήσεις με λίγες γνώσεις Javascript/Typescript(π.χ. εδώ η υλοποίηση του Τ_Ρ). Ίσως βάλω επιλογή να γίνεται αυτό από το web interface για να μην χρειάζεται clone και redeploy.

Ναι, και στην ΓΛΩΣΣΑ και στην ΨΕΥΔΟΓΛΩΣΣΑ, οι λογικοί τελεστές (άρα και το όχι) έπονται των συγκριτικών (σελ. 139 Γ Λυκείου και σελ 35 Β Λυκείου).
Με την ευκαιρία,  Κομνηνέ τι τάξη πας (φυσικά αν θες απαντάς).

Οκ δεκτό! Θα το αλλάξω αύριο το πρωί πριν τις 8.
Γ λυκείου πάω σε (ιδιωτικό πλέον..) ΓΕΛ στον Άλιμο.

Πάλι έσβησαν την απάντησή μου!
Έδωσα την λύση στο πρόβλημα και αυτός που το έσβησε απλά δεν το κατάλαβε!

Δεν νομίζω να σου σβήνει κανείς τις απαντήσεις.. Κάποιο bug θα ήταν.

Παράθεση από: bugman
Το Όχι λειτουργεί όπως και το μείον στις αριθμητικές εκφράσεις. Εφαρμόζεται στο πρώτο όρο που γυρίζει τύπο λογικό.
Για να το πετύχεις αυτό θες ένα flag το οποίο μόνο το Όχι θα το κάνει true. Όταν λοιπόν το flag είναι true τότε η διερμηνεία εκτελείται μέχρι εκεί που η έκφραση δίνει το πρώτο λογικό αποτέλεσμα.

Το όχι ψευδής και όχι ψευδής
λειτουργεί ως (όχι ψευδής) ή (όχι ψευδής) δηλαδή δίνει αληθής
και όχι ως
όχι (ψευδής ή όχι ψευδής)
που θα έδινε ψευδής
Δεν καταλαβαίνω που χρησιμοποιείς τα flags στην συντακτική ανάλυση.. Ο διερμηνευτής μου κάνει μια απλή αναδρομούλα(βλ. συνακτική ανάλυση για το unary +).

Το παράδειγμα που έδωσες νομίζω είναι ασάφεια γιατί δεν προσδιορίζει το σχολικό προτεραιότητα ανάμεσα στους λογικούς συντελεστής( @alkisg ισχύει;)

bugman

  • Επισκέπτης
Απ: Υλοποίηση Ψευδογλώσσας
« Απάντηση #34 στις: 19 Ιαν 2021, 05:38:46 μμ »
Εκ παραδρομής το ΚΑΙ πρέπει να γίνει Ή εδώ: Το όχι ψευδής Ή όχι ψευδής

λειτουργεί ως (όχι ψευδής) ή (όχι ψευδής) δηλαδή δίνει αληθής
και όχι ως
όχι (ψευδής ή όχι ψευδής)
που θα έδινε ψευδής

Δεν είναι ασάφεια. Δες τις παρενθέσεις και θα το καταλάβεις!

bugman

  • Επισκέπτης
Απ: Υλοποίηση Ψευδογλώσσας
« Απάντηση #35 στις: 19 Ιαν 2021, 05:49:59 μμ »
Κοίταξα τον κώδικά σου:
Έχεις το private atom(): AST.AST {  .... }
Στο οποίο παίζουν μόνο δυο unary τελεστές, οι οποίοι γυρνούν ενδιάμεσα AST, όπως το   AST.UnaryPlusAST(atom).inheritPositionFrom(....) και το   AST.UnaryMinusAST(atom).inheritPositionFrom(...)

Ομοίως πρέπει να γίνει για το Not που το έχει return new AST.NotAST(this.atom()).inheritPositionFrom(savedToken)
(το flag πρέπει να κόβει το ενδιάμεσο AST όταν ολοκληρώσει μια λογική έκφραση )


komni

  • Θαμώνας
  • ***
  • Μηνύματα: 48
Απ: Υλοποίηση Ψευδογλώσσας
« Απάντηση #36 στις: 19 Ιαν 2021, 06:01:48 μμ »
Εκ παραδρομής το ΚΑΙ πρέπει να γίνει Ή εδώ: Το όχι ψευδής Ή όχι ψευδής

λειτουργεί ως (όχι ψευδής) ή (όχι ψευδής) δηλαδή δίνει αληθής
και όχι ως
όχι (ψευδής ή όχι ψευδής)
που θα έδινε ψευδής

Δεν είναι ασάφεια. Δες τις παρενθέσεις και θα το καταλάβεις!

Αυτό εννοώ ασάφεια. Η έκφραση "όχι ψευδής Ή όχι ψευδής" έχει δύο ερμηνίες:
1) (όχι ψευδής) ή (όχι ψευδής)    <-- το όχι έχει μεγαλύτερη προτεραιότητα από το η
2) όχι (ψευδής ή όχι ψευδής)      <-- το η έχει μεγαλύτερη προτεραιότητα από το όχι
Και από όσο ξέρω το σχολικό δεν ορίζει προτεραιότητα μεταξύ όχι και η

Κοίταξα τον κώδικά σου:
Έχεις το private atom(): AST.AST {  .... }
Στο οποίο παίζουν μόνο δυο unary τελεστές, οι οποίοι γυρνούν ενδιάμεσα AST, όπως το   AST.UnaryPlusAST(atom).inheritPositionFrom(....) και το   AST.UnaryMinusAST(atom).inheritPositionFrom(...)

Ομοίως πρέπει να γίνει για το Not που το έχει return new AST.NotAST(this.atom()).inheritPositionFrom(savedToken)
Ναι ακριβώς

(το flag πρέπει να κόβει το ενδιάμεσο AST όταν ολοκληρώσει μια λογική έκφραση )
Όχι δεν χρειάζεται κανένα flag, μόνο του το απο πάνω δουλεύει.

bugman

  • Επισκέπτης
Απ: Υλοποίηση Ψευδογλώσσας
« Απάντηση #37 στις: 19 Ιαν 2021, 06:05:25 μμ »
Το NOT προηγείται γιατί είναι unary operator.

komni

  • Θαμώνας
  • ***
  • Μηνύματα: 48
Απ: Υλοποίηση Ψευδογλώσσας
« Απάντηση #38 στις: 19 Ιαν 2021, 06:12:53 μμ »
Το NOT προηγείται γιατί είναι unary operator.

Που το γράφει αυτό το σχολικό;;

Για προτεραιότητα λέει σελ. 167
"Η ιεραρχία των λογικών τελεστών είναι μικρότερη των αριθμητικών."
"Ακόμη, οι λογικοί τελεστές έχουν χαμηλότερη ιεραρχία από τους συγκριτικούς."
Δεν μιλάει όμως για προτεραιότητα μεταξύ ή και όχι.

bugman

  • Επισκέπτης
Απ: Υλοποίηση Ψευδογλώσσας
« Απάντηση #39 στις: 19 Ιαν 2021, 07:01:16 μμ »
Ας μην το λέει, εδώ δεν έχουμε προτεραιότητα μεταξύ τελεστών, αλλά το τι είναι unary operator και πώς τον χειριζόμαστε.
ρίξε μια ματιά εδώ https://en.wikipedia.org/wiki/Unary_operation
Η ασάφεια έχει να κάνει με τα Η και ΚΑΙ και όχι με το ΌΧΙ.
Το όχι παίρνει λογική έκφραση και μόνο, αλλά αν η έκφραση έχει δυο ή περισσότερους όρους, όπως κάθε unary operator εφαρμόζεται στο πρώτο όρο.
Πχ στο -2*3 το - είναι μοναδιαίος τελεστής και εφαρμόζεται στο 2. Ομοίως το -2*-3 έχει δυο μοναδιαίους και εφαρμόζονται πριν τον τελεστή *.
Ασφαλώς μπορεί κανείς να μην έχει στο διερμηνευτή μια τόσο συγκροτημένη εκτέλεση εκφράσεων και να βάζει παντού παρενθέσεις. Νομίζω όμως ότι η αιτιολογημένη άποψη, ότι το Όχι είναι μοναδιαίος τελεστής (κάτι που δεν φαίνεται στο κώδικά σου), θα έλυνε το πρόβλημα της μη καθορισμένης αναφοράς στο βιβλίο περί των προτεραιοτήτων των τελεστών Ή, ΚΑΙ, ΌΧΙ.


komni

  • Θαμώνας
  • ***
  • Μηνύματα: 48
Απ: Υλοποίηση Ψευδογλώσσας
« Απάντηση #40 στις: 19 Ιαν 2021, 07:39:23 μμ »
@bugman

Δεν ισχύει τίποτα απ' όσα έχεις γράψει.

Παρόλο που στο -2*-3 έχει παραπάνω προτεραιότητα το -, στο -obj.prop (στην C) έχει παραπάνω προτεραιότητα ο τελεστής . και διερμηνεύεται σαν -(obj.prop) και όχι σαν (-obj).prop.

Εννοείται πως υπάρχει προτεραιότητα ανάμεσα και στους unary operators.

Όσον αφορά την υλοποίηση μου λες ότι δεν έχω υλοποιήσει το Νot ως unary operator ενώ ένα ποστ πριν ανέφερες το παρακάτω κομμάτι κώδικά μου:
AST.NotAST(this.atom()).inheritPositionFrom(savedToken)
Εδώ βλέπουμε πως το AST node του Not παίρνει ένα AST node ως παράμετρο και όχι 2 άρα είναι unary operator. Δεν ξέρω καν πως μπορείς να υλοποιήσεις το Not και να μην είναι unary δεν βγάζει λογική.
« Τελευταία τροποποίηση: 19 Ιαν 2021, 07:52:38 μμ από komni »

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 5936
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Υλοποίηση Ψευδογλώσσας
« Απάντηση #41 στις: 19 Ιαν 2021, 07:55:47 μμ »
@bugman, αφού έχουμε πει τόσες φορές ότι δεν πρέπει να δίνεις συμβουλές για τα μαθήματα, γιατί επιμένεις; Δεν είναι ένα τεχνολογικό φόρουμ σαν το insomnia όπου ο καθένας λέει το μακρύ και το κοντό του, εδώ υπάρχουν διακριτοί ρόλοι, οι καθηγητές και οι μαθητές, και αυτά που γράφονται πρέπει να είναι υπεύθυνα γιατί μπορεί να επηρεάσουν το μέλλον των μαθητών. Οι σκέψεις σου μπορεί να ισχύουν σε Visual Basic κλπ, αλλά μπορεί να είναι τελείως λάθος στα πλαίσια των μαθημάτων που διδάσκουμε.

@komni, γενικά μην επηρεάζεσαι από αυτά που γράφει ο bugman, δεν είναι καθηγητής. Η προτεραιότητα των τελεστών έχει πλέον διευκρινιστεί: https://alkisg.mysch.gr/steki/index.php?topic=7661.msg84995#msg84995
Αυτά που γράφει ο pgrontas ισχύουν και στον Διερμηνευτή μου και στην Python, οπότε ναι αν έχεις όρεξη καλό είναι να το διορθώσεις.

Κώδικας: Python
  1. $ python3 -c "import math; print('α'>'β' or not 7 // 5 > math.sqrt(4))"
  2. True

bugman

  • Επισκέπτης
Απ: Υλοποίηση Ψευδογλώσσας
« Απάντηση #42 στις: 19 Ιαν 2021, 08:01:15 μμ »
το -obj δεν έχει καμία έννοια, επειδή το - δεν εφαρμόζεται στο αντικείμενο.
Ομοίως το Όχι 7 mod 5 > Α_Ρ(4) δεν μπορεί να είναι (Όχι 7) ούτε (Όχι 7 mod 5)... κ.ο.κ. Πρέπει η δεξιά έκφραση να είναι τύπου λογικός. Το ζήτημα είναι μέχρι που; Δηλαδή αν το Όχι 7 mod 5>Α_Ρ(4) είχε συνέχεια το Και (....) το ΚΑΙ θα ήταν μέσα ή όχι στην δεξιά έκφραση του Όχι; Κατά την γνώμη δεν είναι. Όπως πχ στο -3-4 το πρώτο - είναι unary, ενώ το δεύτερο (-) δεν είναι, οπότε έχουμε (-3)-(4) και όχι -(3-(4))

Στο δεύτερο σκέλος συμφωνείς ότι το Όχι δεν μπορεί να μην είναι unary, αλλά δεν δείχνεις αν χρειάζεται έναν όρο την ελάχιστη έκφραση που θα δίνει λογικό αποτέλεσμα) για να ολοκληρωθεί όταν απουσιάζουν οι παρενθέσεις.

Alkis, εδώ συζητάμε για ένα λάθος στο διερμηνευτή και αυτό είναι τεχνικό θέμα. Αυτό που δείχνεις με την python, είναι σωστό, όπως και αν το έβαζες και στη Μ2000, αλλά στο διερμηνευτή του komni, βγαίνει λάθος!

komni

  • Θαμώνας
  • ***
  • Μηνύματα: 48
Απ: Υλοποίηση Ψευδογλώσσας
« Απάντηση #43 στις: 19 Ιαν 2021, 10:47:45 μμ »
Διόρθωσα το bug με το οχι

bugman

  • Επισκέπτης
Απ: Υλοποίηση Ψευδογλώσσας
« Απάντηση #44 στις: 19 Ιαν 2021, 11:55:46 μμ »
Διόρθωσα το bug με το οχι
Ωραίος!