Αποστολέας Θέμα: κατηγορίες σφαλμάτων  (Αναγνώστηκε 540 φορές)

epsilonXi

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 167
κατηγορίες σφαλμάτων
« στις: 09 Μαρ 2021, 11:57:27 πμ »
δοκιμάζω:

Κώδικας: ΓΛΩΣΣΑ
  1. ΠΡΟΓΡΑΜΜΑ πχ
  2. ΑΡΧΗ
  3.   ΓΡΑΨΕ 'ααα'
  4.   ΓΡΑΨΕ Τ_Ρ(1,2)
  5.   ΓΡΑΨΕ 'βββ'
  6. ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

και παίρνω έξοδο:
Δεν έκλεισε η δεξιά παρένθεση της ενσωματωμένης συνάρτησης «Τ_Ρ».
δηλαδή δεν ξεκίνησε καν να τρέξει, σφάλμα σύνταξης

δοκιμάζω:
Κώδικας: ΓΛΩΣΣΑ
  1. ΠΡΟΓΡΑΜΜΑ πχ
  2. ΑΡΧΗ
  3.   ΓΡΑΨΕ 'ααα'
  4.   ΓΡΑΨΕ Τ_Ρ('α')
  5.   ΓΡΑΨΕ 'βββ'
  6. ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


και παίρνω έξοδο:
Η ενσωματωμένη συνάρτηση «Τ_Ρ» δεν μπορεί να δεχτεί αυτό το όρισμα.
«'α'»: αλφαριθμητική σταθερά

δηλαδή δεν ξεκίνησε καν να τρέξει, σφάλμα σύνταξης

δοκιμάζω:
Κώδικας: ΓΛΩΣΣΑ
  1. ΠΡΟΓΡΑΜΜΑ πχ
  2. ΑΡΧΗ
  3.   ΓΡΑΨΕ 'ααα'
  4.   ΓΡΑΨΕ Τ_Ρ(-1)
  5.   ΓΡΑΨΕ 'βββ'
  6. ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

και παίρνω έξοδο:
ααα
Σφάλμα «?sfa?µ??? ?e?t?????a p?a?µat???? a???µ??» κατά την αποτίμηση της ενσωματωμένης συνάρτησης «Τ_Ρ».
Τιμή ορίσματος: «-1» = -1

δηλαδή ξεκινάει και τρέχει και πετάει σφάλμα χρόνου εκτέλεσης

και «αναρωτιέμαι»
μήπως το τί σφάλμα είναι ένα κάποιο σφάλμα έχει να κάνει με την υλοποίηση του compiler/interpreter/ide

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 6077
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: κατηγορίες σφαλμάτων
« Απάντηση #1 στις: 09 Μαρ 2021, 12:30:32 μμ »
Είναι κάποιο από τα παραπάνω που σου φαίνεται μη αναμενόμενο;

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

Το τρίτο, ο υπολογισμός του `Τ_Ρ(-1)` στην ΓΡΑΨΕ, δεν γίνεται από τον μεταγλωττιστή αλλά κατά τον χρόνο εκτέλεσης, από τις βιβλιοθήκες (runtime) του προγράμματος.

Όμως προσοχή, στο παρακάτω παράδειγμα, η ίδια έκφραση είναι λάθος χρόνου μεταγλώττισης:

Κώδικας: ΓΛΩΣΣΑ
  1. ΠΡΟΓΡΑΜΜΑ ΑρνητικόΌριο
  2. ΜΕΤΑΒΛΗΤΕΣ
  3.   ΑΚΕΡΑΙΕΣ: πίνακας[Α_Μ(Τ_Ρ(-1))]
  4. ΑΡΧΗ
  5.   ΓΡΑΨΕ 'ΟΚ'
  6. ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

Αυτό γιατί ο Διερμηνευτής είναι υποχρεωμένος να υπολογίσει το μέγεθος του πίνακα και άρα να αποτιμήσει το Τ_Ρ(-1) ΠΡΙΝ παράξει τον εκτελέσιμο κώδικα.

Στην πράξη τα πράγματα είναι ακόμα πιο πολύπλοκα, αφού μερικά προχωρημένα περιβάλλοντα προσπαθούν να κάνουν όσο περισσότερους ελέγχους μπορούν (linting) για να προειδοποιήσουν σχετικά τους developers, και έτσι θα ανιχνεύσουν το σφάλμα στην `ΓΡΑΨΕ Τ_Ρ(-1)` ακόμα και κατά τον στατικό έλεγχο. Σ' αυτήν την περίπτωση δεν λέγεται συντακτικό το λάθος αφού δεν παραβιάζεται κανένας συντακτικός κανόνας. Μπορεί να προκαλέσει compilation warning ή compilation error, ανάλογα με τις ρυθμίσεις.

Το linting όμως ξεφεύγει από τους στόχους του μαθήματος, οπότε καλύτερα να θεωρήσουμε ότι ΔΕΝ έχουμε τέτοιον προχωρημένο compiler στα πλαίσια του μαθήματος. Ο Διερμηνευτής επίτηδες κάνει μόνο τις πράξεις που είναι απαραίτητες για την μεταγλώττιση.

epsilonXi

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 167
Απ: κατηγορίες σφαλμάτων
« Απάντηση #2 στις: 10 Μαρ 2021, 12:46:21 μμ »
το σχολιάζω μόνο να πω ότι σε ένα σχολικό μάθημα είναι πρακτικά αδύνατο να εξηγήσεις ώστε να μπορέσει ένας μαθητής να ξεχωρίσει μετά βεβαιότητας τη μια κατηγορία σφάλματος από την άλλη

petrosp13

  • Ομάδα Νέου Λυκείου
  • *
  • Μηνύματα: 2372
Απ: κατηγορίες σφαλμάτων
« Απάντηση #3 στις: 10 Μαρ 2021, 01:26:31 μμ »
Γι'αυτό και αν ζητηθεί τέτοιο θέμα, θα πρέπει να είναι μονοσήμαντη η απάντηση
Αλίμονο μας αν μπλέξουμε και με αυτά
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής