κατηγορίες σφαλμάτων

Ξεκίνησε από epsilonXi, 09 Μαρ 2021, 11:57:27 ΠΜ

« προηγούμενο - επόμενο »

epsilonXi

δοκιμάζω:

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


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

δοκιμάζω:
Κώδικας: glossa
ΠΡΟΓΡΑΜΜΑ πχ
ΑΡΧΗ
  ΓΡΑΨΕ 'ααα'
  ΓΡΑΨΕ Τ_Ρ('α')
  ΓΡΑΨΕ 'βββ'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


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

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

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


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

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

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

alkisg

Είναι κάποιο από τα παραπάνω που σου φαίνεται μη αναμενόμενο;

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

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

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

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


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

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

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

epsilonXi

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

petrosp13

Γι'αυτό και αν ζητηθεί τέτοιο θέμα, θα πρέπει να είναι μονοσήμαντη η απάντηση
Αλίμονο μας αν μπλέξουμε και με αυτά
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής