Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Προπτυχιακό μάθημα Αρχές Γλωσσών Προγραμματισμού Π. Ροντογιάννης 1
Εισαγωγή - 1 Μία κλασσική γλώσσα προγραμματισμού αποτελείται από: Εκφράσεις (των οποίων η τιμή πρέπει να απποτιμηθεί) Εντολές (οι οποίες εκτελούνται και αλλάζουν την κατάσταση του υπολογιστή) 2
Εισαγωγή - 2 Βασική σημασιολογική έννοια Κατάσταση Τιμές, που έχουν οι μεταβλητές στη μνήμη του υπολογιστή Η τιμή μίας έκφρασης του προγράμματος εξαρτάται από την παρούσα κατάσταση του υπολογιστή Αλλαγή κατάστασης (π.χ. με καταχώρηση νέας τιμής σε μία από τις μεταβλητές του προγράμματος) 3
Προστακτικές Γλώσσες Δομές ελέγχου Καθορίζουν την πορεία εκτέλεσης εντολών ενός προγράμματος Π.χ. If-then-else, for, while Υποστηρίζονται από προστακτικές γλώσσες 4
Συντακτικό Απλή προστακτική γλώσσα Υποστήριξη δύο τύπων δεδομένων Τιμές αληθείας (Boolean) Φυσικούς αριθμούς (Natural) Εισαγωγή και άλλων τύπων χωρίς πρόβλημα Int, real, char Τρεις κατηγορίες συντακτικών στοιχείων Λογικές εκφράσεις Αριθμητικές εκφράσεις Εντολές 5
Βασικές Αριθμητικές και Λογικές Εκφράσεις Αριθμητικές Σταθερά (0) Τελεστής (succ) Παράγει τον επόμενο φυσικό αριθμό Λογικές Σταθερά true Εκφράσεις, που παράγονται με χρήση τελεστών (not, and, κλπ) Προσθήκη επιπλέον συμβόλων (πχ false,1,2 κλπ) και τελεστών χωρίς πρόβλημα 6
Κύριες Εντολές «Κενή» εντολή (skip) Δεν έχει κανένα αποτέλεσμα Σύνθεση εντολών Συμβολισμός με «;» Μηχανισμός βρόγχου Ο βρόγχος for N do C εκτελείται υπολογίζοντας την τιμή της αριθμητικής έκφρασης Ν και μετά εκτελώντας το σώμα C τόσες φορές όσες είναι η τιμή της αριθμητικής έκφρασης. Ο βρόγχος ονομάζεται οριστικός, γιατί ο αριθμός των επαναλήψεων καθορίζεται πριν την εκτέλεση του. 7
Εντολές Η γλώσσα δεν διαθέτει (αρχικά) μηχανισμούς αλλαγής της κατάστασης ούτε μεταβλητές. 8
Συντακτικό Δίνεται με τη βοήθεια context-free γραμματικής Το σύμβολο C αναπαριστά μία εντολή Β μία λογική έκφραση Ν μία αριθμητική έκφραση 9
Κανόνες Παραγωγής Εντολών C::= skip C o ; C 1 for N do C if B then C o else C 1 (C) 10
Κανόνες Παραγωγής Λογικών Εκφράσεων Β ::= true not B B o and B 1 N o < N 1 N o = N1 B o = B 1 if B then B o else B 1 (B) 11
Κανόνες Παραγωγής Αριθμητικών Εκφράσεων N ::= 0 succ N if B then N o else N 1 (N) 12
Σημασιολογία - 1 Βασική είναι η έννοια της κατάστασης (state) Αναπαριστά τη μνήμη υπολογιστή Η τιμή μιας έκφρασης σε μία προστακτική γλώσσα προγραμματισμού εξαρτάται από τις μεταβλητές της έκφρασης. Οι τιμές των μεταβλητών φυλάσσονται στη μνήμη του υπολογιστή Η γλώσσα όπως ορίσθηκε δεν διαθέτει μεταβλητές και εντολές ανάθεσης 13
Σημασιολογία - 2 Η γλώσσα όμως θα επεκταθεί και έχουν ήδη εισαχθεί απλές εντολές Η σημασιολογία της γλώσσας δίνεται με βάση την έννοια της κατάστασης 14
Σημασιολογία - 3 Έστω σύνολο καταστάσεων S Το νόημα μιας Έκφρασης της γλώσσας είναι μία συνάρτηση η οποία για κάθε κατάσταση του υπολογιστή δίνει την τιμή της έκφρασης σε σχέση με την κατάσταση αυτή Εντολής είναι μία συνάρτηση η οποία μετασχηματίζει την τρέχουσα κατάσταση του υπολογιστή σε μία νέα κατάσταση 15
Συναρτήσεις C[[ ]] Δίνει νόημα στις εντολές της γλώσσας Β[[ ]] Δίνει νόημα στις λογικές εκφράσεις N[[ ]] Δίνει νόημα στις αριθμητικές εκφράσεις Οι συναρτήσεις αυτές ορίζονται αναδρομικά και ο ορισμός καθεμίας χρησιμοποιεί τις υπόλοιπες 16
Ορισμός Συνάρτησης Β[[ ]] Β[[true]]s = true true, if B[[B]]s =false B[[not B]]s = false, if B[[B]]s =true B[[B o and B 1 ]]s = true, if B[[B o ]]s =true and B[[B 1 ]]s =true false, otherwise 17
Ορισμός Συνάρτησης Β[[ ]] B[[N o < N 1 ]]s = true, if N[[N o ]]s < N[[N 1 ]]s false, otherwise B[[N o = N 1 ]]s = true, if N[[N o ]]s = N[[N 1 ]]s false, otherwise 18
Ορισμός Συνάρτησης Β[[ ]] B[[B o = B 1 ]]s = true, if B[[B o ]]s = B[[B 1 ]]s false, otherwise B[[if B then B o else B 1 ]]s = B[[B o ]]s, if B[[B]]s = true B[[B 1 ]]s, otherwise B[[(B)]]s = B[[B]]s 19
Ορισμός Συνάρτησης N[[ ]] N[[0]]s = 0 N[[succ N]]s = N[[N]]s +1 N[[if B then N o else N 1 ]]s = N[[N o ]]s, if B[[B]]s = true N[[N 1 ]]s, otherwise N[[(N)]]s = N[[N]]s 20
Σημασιολογία Εντολών Δίνεται από τη συνάρτηση C[[ ]] C[[skip]]s C [[C o ;C 1 ]]s C [[for N do C]]s = s = C [[C 1 ]](C [[C o ]]s) = C [[C]] n (s), where n=n[[n]]s C[[if B then C o else C 1 ]]s = C[[C o ]]s, if B[[B]]s = true C[[(C)]]s C[[C 1 ]]s, otherwise = C[[C]]s 21
Δομική Επαγωγή Τεχνική για αποδείξεις στη σημασιολογία Εφαρμογή της συνηθισμένης επαγωγής στην συντακτική δομή των εκφράσεων μιας γλώσσας (πιο συγκεκριμένα στο βάθος του συντακτικού δέντρου των εκφράσεων της γλώσσας) 22
Δομική Επαγωγή Μία ιδιότητα αποδεικνύεται για κάθε Ένα από τα πρωτόγονα στοιχεία του συντακτικού της γλώσσας Σύνθετη έκφραση της γλώσσας με βάση την υπόθεση ότι οι εκφράσεις που την αποτελούν έχουν την ιδιότητα 23
Παράδειγμα 4.1 Με τη χρήση δομικής επαγωγής μπορεί να δειχθεί ότι για την δεδομένη γλώσσα (που δεν έχει εντολές ανάθεσης) ισχύει: C[[C]]s = s για κάθε εντολή C και για κάθε κατάσταση s. 24
Παράδειγμα 4.1 Για την επαγωγική βάση αρκεί να εξετασθεί η περίπτωση C=skip, για την οποία ισχύει το ζητούμενο, καθώς C[[skip]]s=s Μένει να δειχθεί ότι ισχύει και για πιο σύνθετες εντολές με βάση ότι ισχύει για τις υποεντολές, που τις συνθέτουν. Αυτό απαιτεί την εξέταση τεσσάρων περιπτώσεων μιας σύνθετης εντολής (σύνθεση εντολών, for, if και παρενθετοποίηση). 25
Σύνθεση C [[C o ;C 1 ]]s = C [[C 1 ]](C [[C o ]]s) (Semantics) = C [[C 1 ]](s) (Hypothesis) = s (Hypothesis) Οι υπόλοιπες περιπτώσεις σύνθετων εντολών μπορούν να δειχθούν με ανάλογο τρόπο. 26
Εντολές Ανάθεσης Σημαντική έλλειψη της γλώσσας η απουσία μεθόδων για προσπέλαση και αλλαγή της κατάστασης (δηλαδή της μνήμης) Για το σκοπό αυτό ορίζεται ένα σύνολο ονομάτων μεταβλητών (variable-identifiers) Συμβολίζεται με Var Χωρίζεται σε δύο υποσύνολα μεταβλητών Λογικές (Boolean) Αριθμητικές (Natural) 27
Συνάρτηση π Προσδιορίζει τον τύπο της κάθε μεταβλητής Παράδειγμα: Αν i είναι μία λογική μεταβλητή, τότε π(i)=boolean, ενώ αν j είναι μία αριθμητική μεταβλητή, τότε π(j)= natural 28
Επέκταση Συντακτικού Επιτρέπει χρήση μεταβλητών και εντολών ανάθεσης Επεκτείνουμε κανόνες παραγωγής εκφράσεων και εντολών της γλώσσας, ως εξής: Β ::=... i, where i Var, π(i)=boolean Ν ::=... i, where i Var, π(i)=natural C ::=... i:= B, π(i)=boolean i:= N, π(i)=natural 29
Μαθηματικός Ορισμός Συνόλου Καταστάσεων Διαισθητικά, μία κατάσταση s S είναι μία συνάρτηση, που αντιστοιχίζει σε κάθε μεταβλητή της γλώσσας μία τιμή πρέπει να «σέβεται» τον τύπο κάθε μεταβλητής αντιστοιχίζει στις Λογικές μεταβλητές, λογικές τιμές Αριθμητικές μεταβλητές, αριθμητικές τιμές 30
Ορισμός Με βάση τις παρατηρήσεις, το σύνολο S των καταστάσεων ορίζεται ως: S ={ s: Var Nat {true, false} s(i) Nat if π(i)= natural and s(i) {true,false} if π(i)= boolean} Η σημασιολογία της γλώσσας μπορεί να επεκταθεί, για να καλύψει μεταβλητές και εντολές ανάθεσης 31
Παράδειγμα Στην δεύτερη εξίσωση, το σύμβολο Ε χρησιμοποιείται για αναπαράσταση οποιασδήποτε έκφρασης της γλώσσας (λογικής ή αριθμητικής) [[i]]s = s(i) [[i :=E]]s = (s i [[E]]s) Όπου (s i [[E]]s) είναι μία νέα κατάσταση s έτσι ώστε s (i)=[[e]]s και για κάθε άλλη μεταβλητή i i, s (i )=s(i) 32
Παράδειγμα Η δεύτερη εξίσωση λέει ότι η εκτέλεση μίας εντολής ανάθεσης σε μία δεδομένη κατάσταση έχει ως αποτέλεσμα την παραγωγή μιας «νέας» κατάστασης στην οποία άλλαξε μόνο η τιμή της μεταβλητής, που σχετίζεται με την ανάθεση. Η νέα τιμή είναι η τιμή του δεξιού μέλους της εντολής ανάθεσης υπολογισμένη στην «παλαιά» κατάσταση. 33
Απόδειξη Ισοδυναμίας Εντολών Η εντολή i :=( if B then E o else E 1 ) και η εντολή if B then (i:= E o ) else (i:=e 1 ) μπορούν εύκολα να αποδειχθούν ισοδύναμες με τη χρήση των παραπάνω σημασιολογικών εξισώσεων 34