Επαναληπτικό...

87
Γλώσσες Προγραμματισμού Μεταγλωττιστές Επαναληπτικό Μάθημα Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου

Transcript of Επαναληπτικό...

Page 1: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Γλώσσες Προγραμματισμού Μεταγλωττιστές

Επαναληπτικό ΜάθημαΠανεπιστήμιο Μακεδονίας

Τμήμα Εφαρμοσμένης Πληροφορικής

Ηλίας Σακελλαρίου

Page 2: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Γλώσσες Προγραμματισμού▪ Γλώσσα προγραμματισμού: Συμβολική

περιγραφή υπολογισμών (computations).• Προδιαγραφή, οργάνωση και συλλογιστική

υπολογισμών.▪ Πρόγραμμα = συμβολική περιγραφή ενός υπολογισμού

σε κάποια γλώσσα. ▪ Μια γλώσσα προγραμματισμού έχει σαν στόχο

• να επιτρέπει την εύκολη περιγραφή των υπολογισμών,

• να εκμεταλλεύεται αποδοτικά την υπολογιστική ισχύ των μηχανών.

Ευκολία προέχει της απόδοσης!

Page 3: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Φάσεις Μεταγλώττισης

Συντακτική Ανάλυση

Λεκτική Ανάλυση

Σημασιολογική Ανάλυση

Παραγωγή Ενδιάμεσου Κώδικα

Βελτιστοποίηση Ενδιάμεσου Κώδικα

Βελτιστοποίηση Τελικού Κώδικα

Παραγωγή Τελικού Κώδικα

Πίνακας Συμβόλων

Χειριστής Σφαλμάτων

Αρχικό Πρόγραμμα

λεκτικές μονάδες

συντακτικό δένδρο

συντακτικό δένδρο

ενδιάμεσος κώδικας

ενδιάμεσος κώδικας

τελικός κώδικας

Τελικό Πρόγραμμα

Page 4: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Λεκτική Ανάλυση

▪ Αποδοχή μιας συμβολοσειράς χαρακτήρων που αποτελούν το αρχικό πρόγραμμα και εξαγωγή των λεκτικών μονάδων (tokens).• Οι λεκτικές μονάδες χρησιμοποιούνται σαν είσοδος

στην φάση της συντακτικής ανάλυσης.• Αποτελούν τερματικά σύμβολα της γλώσσας.

▪ Υλοποιείται από τον λεκτικό αναλυτή (lexical analyser, scanner) .• Αποθήκευση λεκτικών μονάδων στον πίνακα

συμβόλων. • Ανίχνευση σφαλμάτων• Διαγραφή σχολίων, διαστημάτων, κενών γραμμών.

Page 5: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Γραμματικές

▪ Πώς θα γίνει η περιγραφή των λεκτικών μονάδων και (αργότερα) της σύνταξης μιας γλώσσας;

▪ Γραμματικές: Σύστημα παραγωγής συμβολοσειρών G, που αποτελείται από μια τετράδα (T,N,P,S)• T τερματικά σύμβολα (terminals) που αποτελούν το

αλφάβητο της γλώσσας. • N μη-τερματικά σύμβολα (non-terminals)• P κανόνες παραγωγής (production rules) της

μορφής α → β, όπου α και β ∈ (Τ ∩ Ν)* • S αρχικό σύνολο, το οποίο είναι στοιχείο το Ν (start

symbol)

Page 6: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Ιεραρχία Chomsky

▪ Γραμματικές τύπου 0. ▪ Γραμματικές τύπου 1 (γραμματικές με

συμφραζόμενα – context sensitive grammars)▪ Γραμματικές τύπου 2 (γραμματικές χωρίς

συμφραζόμενα – context free grammars)▪ Γραμματικές τύπου 3 (κανονικές γραμματικές –

regular grammars)

Page 7: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Γραμματικές για Μεταγλωττιστές

▪ Γραμματικές τύπου 2 (γραμματικές χωρίς συμφραζόμενα – context free grammars)• Οι κανόνες παραγωγής έχουν μορφή α→β, όπου η

συμβολοσειρά α αποτελείται από ένα μη-τερματικό σύμβολο και η β είναι συμβολοσειρά.

▪ Γραμματικές τύπου 3 (κανονικές γραμματικές – regular grammars)• Οι κανόνες παραγωγής έχουν την μορφή

Α→aΒ Α→a Α→εA,B μη τερματικά και a τερματικό.

Page 8: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Αντιστοιχία Μοντέλων

Γεννητικά Μοντέλα Αναγνωριστικά Μοντέλα

Γραμματικές τύπου 0.

Αυτόματα Στοίβας

Κανονικές γραμματικές Πεπερασμένα Αυτόματα.

Μηχανή Turing

Γραμματικές με συμφραζόμενα

Γραμμικά Περιορισμένη Μηχανή Turing

Γραμματικές χωρίς συμφραζόμενα

Page 9: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Κανονικές Εκφράσεις

▪ Χρησιμοποιούνται για την περιγραφή κανονικών γλωσσών.• Κομψότερος και λακωνικότερος φορμαλισμός.

▪ Αντιστοιχία μεταξύ κανονικών εκφράσεων και κανονικής γραμματικής και πεπερασμένων αυτομάτων.

▪ Χρήση από εργαλεία κατασκευής λεκτικών αναλυτών.

Page 10: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Κανονικές Εκφράσεις

▪ Έστω ένα αλφάβητο Σ, μια κανονική έκφραση (KE) r ορίζει μια γλώσσα L(r) πάνω στο Σ.• Αναδρομικός ορισμός

▪ Κανονική έκφραση είναι • H κενή συμβολοσειρά L(ε)={ε} • Κάθε σύμβολο a του Σ L(a) = {a}• Η διάζευξη r|s L(r|s) = L(r)∪L(s)• H παράθεση rs L(rs)=L(r)L(s)• Το κλείσιμο Kleene r* L(r*)=L(r)*

▪ όπου τα r και s είναι κανονικές εκφράσεις.

Page 11: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Επέκταση Κανονικών Εκφράσεων

▪ Θετικό κλείσιμο Kleene r+ = rr*• Έκφραση εμφανίζεται μία η περισσότερες φορές

▪ Μηδέν ή μια εμφανίσεις της r r? = r|ε▪ Κλάσεις χαρακτήρων [a,b,c]=a|b|c▪ Διαστήματα χαρακτήρων [a-z]=a|b|...|z▪ Ειδικό σύμβολο για οποιονδήποτε χαρακτήρα

• Συνήθως είναι η τελεία▪ Ειδικοί χαρακτήρες παριστάνονται με το

σύμβολο \ να προηγείται. \) \( \[

Page 12: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Άσκηση● Περιγράψτε με κανονική έκφραση

συμβολοσειρές που ξεκινούν με το πρόθεμα "func" ή "endfunc" ακολουθούμενο το σύμβολο "-"και από ένα ή περισσότερα γράμματα πχ. func-double, func-computeString, func-a, endfunc-a

▪ Απάντηση: (func|endfunc)-([a-zA-Z])+

Page 13: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Πεπερασμένα Αυτόματα

▪ Αφηρημένες μηχανές που μπορούν να χρησιμοποιηθούν σαν “αναγνωριστές” σε κανονικές γλώσσες.• Ντετερμινιστικά Πεπερασμένα Αυτόματα (ΝΠΑ)• Μη-Ντετερμινιστικά Πεπερασμένα Αυτόματα (ΜΠΑ)• Μη-Ντετερμινιστικά Πεπερασμένα Αυτόματα με

μηδενικές Μεταβάσεις (ΜΠΑ-ε)▪ Όλα τα παραπάνω είναι ισοδύναμα από πλευράς

υπολογιστικής ικανότητας.

Page 14: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Διαγραμματική Αναπαράσταση(Γράφος Μετάβασης)

0 1

2

a

b

b

a

a b

3

b

a

▪ Συμβολοσειρές που αναγνωρίζει;• abb, aabb aaaabbbbb

▪ Κανονική Έκφραση • a+b+• aa*bb*

Page 15: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Παράδειγμα ΜΠΑ (i)

▪ Τι αναγνωρίζει το ακόλουθο αυτόματο;• abb• abababb• ababbaabbabaabb

0 1 2a

b

b

a

3b

Page 16: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Παράδειγμα ΜΠΑ-ε

1 2a

bb

a

0

5 6

a

ε b

8b

ε

7

3

4

ε

ε

▪ (aa|bb)(a|b)*b

Page 17: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Άσκηση

▪ Έστω συμβολοσειρές που αποτελούνται από 0 και 1, όπου κάθε 0 έχει πριν και μετά τουλάχιστον ένα 1. πχ. 11 101 101011 ενώ απορρίπτονται οι 110, 00 και 0010. • Να δοθεί το αντίστοιχο ντετερμινιστικό πεπερασμένο

αυτόματο• Η αντίστοιχη κανονική γραμματική • Η κανονική έκφραση

Page 18: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Απάντηση: ΝΠΑ

Α Β Γ1

1

1

0

Page 19: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Απάντηση: Γραμματική και Κανονική Έκφραση

▪ ΓραμματικήS::=1DD::=εD::=1DD::=01D

▪ Κανονική έκφραση 1(1|01)*

Page 20: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Άσκηση

▪ Έστω συμβολοσειρές με μήκος τουλάχιστον 2 που περιέχουν τουλάχιστον ένα 1, οι οποίες όταν ξεκινούν από 1 τότε η υπόλοιπη συμβολοσειρά πρέπει να έχει άρτιο αριθμό 1, ενώ όταν ξεκινούν από 0 η υπόλοιπη συμβολοσειρά πρέπει να έχει περιττό αριθμό 1, πχ 1011, 1010101110100 και 01, 0111, 0100010100. • Να δοθεί το αντίστοιχο ντετερμινιστικό πεπερασμένο

αυτόματο.

Page 21: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Απάντηση

Α DC

1

1

0

Β

0

1

1

0

0

Page 22: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Γραμματική και Κανονική Έκφραση

▪ Κανονική έκφραση: (0|10*1)0*1(0|10*1)*▪ Γραμματική:

S::=1BS::=0CB::=0BB::=1CC::=0CC::=1DD::=εD::=1CD::=0D

Page 23: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Αναγωγή Κανονικής Γραμματικής σε ΜΠΑ-ε

▪ Έστω μια γραμματική G=(T,N,P,S). Το αντίστοιχο ΜΠΑ-ε (Σ,Q,δ,F) θα έχει:• Σ = Τ, το αλφάβητο του ΜΠΑ-ε είναι το αλφάβητο της

γραμματικής• Q = Ν ∪ {qf}, οι καταστάσεις του ΜΠΑ-ε είναι τα μη-

τερματικά σύμβολα της γραμματικής, επαυξημένα με μια ακόμη κατάσταση που είναι η τελική.

• Για κάθε κανόνα Α →aΒ δ(Α,a)=BΑ →a δ(Α,a)=qf A→ε δ(Α,ε)=qf

• F = {qf}, τελική κατάσταση του αυτομάτου.

Page 24: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Παράδειγμα Αναγωγής σε ΜΠΑ-ε

▪ Έστω η γραμματική• Τ = {a,b}• N = {I,S,U}• P = {I → aS, S → bU U →ε

S → aS, S → bS U →b}• S = I

Ι Sa

a

b

bU

b

εqf

Page 25: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Αναγωγή ΚΕ σε ΜΠΑ-ε

▪ Η αναγωγή γίνεται αναδρομικά με κατάλληλη σύνθεση των ΜΠΑ-ε που αντιστοιχούν σε υπο-εκφράσεις της αρχικής.

▪ Στα επόμενα το Μ(r) είναι το ΜΠΑ-ε που αντιστοιχεί στην έκφραση r.

Page 26: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Αναγωγές (i)

▪ Κενή συμβολοσειρά ε παράγεται από το αυτόματο Μ(ε):

▪ Κανονική έκφραση που περιέχει ένα σύμβολο a του αλφαβήτου, από το αυτόματο Μ(a):

at qf

ε qf

Page 27: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Αναγωγές (ii)

▪ Συμβολοσειρά rs, όπου κάθε υποέκφραση παράγεται από τα αυτόματα Μ(r) και Μ(s) αντίστοιχα, παράγεται από το αυτόματο Μ(rs):

t2 qf2

εM(r)t1 qf1

M(s)

t2 qf2

M(r)t1

M(s)

Page 28: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Αναγωγές (iii)

▪ Συμβολοσειρά r|s, όπου κάθε υποέκφραση παράγεται από τα αυτόματα Μ(r) και Μ(s) αντίστοιχα, παράγεται από το αυτόματο Μ(r|s):

t2 qf2

εM(r)t1 qf1

M(s)

qft

εε

ε

Page 29: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Αναγωγές (iv)

▪ Συμβολοσειρά r*, όπου κάθε υποέκφραση παράγεται από τα αυτόματα Μ(r) και Μ(s) αντίστοιχα, παράγεται από το αυτόματο Μ(r*):

M(r)t1 qf1 qft

ε

ε

ε

Page 30: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Παράδειγμα

▪ Κανονική Έκφραση: (a|b)a(aa|bb)*

a

a a a

b bb ε

εε

ε ε

εε

ε

ε

ε

Page 31: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Συντακτική Ανάλυση

Page 32: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Συντακτικοί Αναλυτές (parsers)

▪ Οι ΣΑ που χρησιμοποιούνται στην πράξη αφορούν ένα υποσύνολο των γραμματικών χωρίς συμφραζόμενα.• Επιβολή περιορισμών λόγω αποδοτικότητας.

▪ Ακόμα και με περιορισμούς εν λόγω γραμματικές καλύπτουν τις ανάγκες των περισσοτέρων γλωσσών προγραμματισμού.

▪ Οι από πάνω προς τα κάτω ΣΑ (top-down parers), ευκολότεροι στην κατασκευή και προγραμματίζονται χειρωνακτικά.

▪ Οι από κάτω προς τα πάνω (bottom-up parsers), καλύπτουν μια μεγαλύτερη κλάση γλωσσών και κατασκευάζονται συνήθως από αυτοματοποιημένα εργαλεία.

Page 33: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Παραγωγές στις Γραμματικές χωρίς Συμφραζόμενα (ΓΧΣ)

▪ Παραγωγή: Αντικατάσταση υποσυμβολοσειράς που ταιριάζει με αριστερό μέλος, με το αντίστοιχο δεξιό μέλος του κανόνα παραγωγής.

▪ Στις ΓΧΣ κάθε φορά αντικαθίσταται οποιοδήποτε μη-τερματικό σύμβολο που περιέχεται στην συμβολοσειρά.• Αριστερότερη παραγωγή: αντικατάσταση πάντα

του αριστερότερου μη-τερματικού συμβόλου• Δεξιότερη παραγωγή: αντικατάσταση του

δεξιότερου μη-τερματικού συμβόλου.

Page 34: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Συντακτικό Δένδρο(syntax tree)

▪ Τρόπος αναπαράστασης μιας παραγωγής.▪ Το αρχικό μη-τερματικό σύμβολο τοποθετείται

στη ρίζα του δένδρου.▪ Κάθε "ενδιάμεσος" κόμβος του δένδρου

αναπαριστά ένα μη-τερματικό σύμβολο. ▪ Κάθε φύλλο του δένδρου αναπαριστά ένα

τερματικό σύμβολο.▪ Οι ακμές από ένα "ενδιάμεσο" κόμβο στους

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

Page 35: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Παράδειγμα (II.1)P={Stmt→ if ( Expr ) then StmtStmt→ while ( Expr ) StmtStmt→ id := id ;Stmt→ id := num ;Stmt→ begin StmtList endStmtList→ Stmt StmtList→ Stmt SmtList Expr→ id Op idExpr→ id Op numOp→ >Op→ <}

if (id > id) then id := id ;

Stmt

StmtthenExprif )(

id Op id id id:= ;

>

Page 36: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

'Ασκηση● Έστω η γραμματική και η συμβολοσειρά αα+αα**

▪ S::= SS+ | SS* | a• Δώστε την αριστερότερη παραγωγή της

συμβολοσειράς.• Δώστε την δεξιότερη παραγωγή της συμβολοσειράς• Δώστε το συντακτικό δένδρο της συμβολοσειράς για

την συγκεκριμένη γραμματική.▪ Απάντηση

• S=>SS*=>SS+S*=>aS+S*=>aa+S*=>aa+SS**=>aa+aS**=>aa+aa**

• S=>SS*=>SSS**=>SSa**=>Saa**=>SS+aa**=>Sa+aa**=>aa+aa**

Page 37: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Συντακτικό Δένδρο

S

SS

SSS S

*

*+

a a a a

Page 38: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Διφορούμενες Γραμματικές▪ Όταν μια συμβολοσειρά μπορεί να αντιστοιχεί

σε δύο συντακτικά δένδρα για μια γραμματική τότε η γραμματική ονομάζεται διφορούμενη.

▪ Για παράδειγμα:E::=E"+"E | E"-"E| Ε"*"Ε | Ε"/"Ε | D D::="1"|"2"|"3""...|"9"|"0"

Συμβολοσειρά:1+2+3

Ε

Ε + E

D D

1

Ε

+ E

2

D

3

Ε

Ε + E

D D

2

Ε

+E

3

D

1

Page 39: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Άσκηση● Η παρακάτω γραμματική είναι διφορούμενη? Δώστε ένα παράδειγμα (δηλαδή μια συμβολοσειρά που αντιστοιχεί σε δύο συντακτικά δένδρα) που να αποδεικνύει το ισχυρισμό σας.

S::="a" S "b"B::="a" BB::=B "b"B::=ε

Page 40: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Απάντηση

▪ Ναι γιατί για παράδειγμα η συμβολοσειρά aabb έχει δύο συντακτικά δένδρα.

S

Ba

B

b

ε

B

a

b

S

Ba

B

b

ε

Ba

b

Page 41: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Τελεστές και Γραμματικές

▪ Πώς μπορεί να εκφραστεί η προτεραιότητα και προσεταιριστικότητα μέσω μιας μη-διφορούμενης γραμματικής;• Προτεραιότητα: Για κάθε ομάδα τελεστών ίσης

προτεραιότητας, δημιουργούμε ένα μη-τερματικό σύμβολο.

• Προσεταιριστικότητα: Για κάθε τελεστή ορίζεται κατάλληλα ο αντίστοιχος κανόνας παραγωγής.

Page 42: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Προσεταιριστικότητα

▪ Αριστερά προσεταιριστικός τελεστήςList ::= List "," Letter | LetterLetter ::= "a"|"b"|...|"z" Συμβολοσειρά a,b,c

▪ Δεξιά προσεταιριστικός τελεστήςΑssg ::= Letter "="Assg | LetterLetter ::= "a"|"b"|...|"z" Συμβολοσειρά a = b = c

List

List , Letter

Letter b

a

List

, Letter

c

Letter

Assg=Letter

Letterb

a

Assg

=

c

Assg

Page 43: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Παράδειγμα (i)

▪ Γραμματική:E::=E"+"E | E"-"E| Ε"*"Ε | Ε"/"Ε | D D::="1"|"2"|"3""...|"9"|"0"

▪ Δύο κατηγορίες τελεστών ως προς την προτεραιότητα:• αριστερά προσεταιριστικοί "+", "-"

▫ δημιουργία μη-τερματικού E• αριστερά προσεταιριστικοί "*" , "/"

▫ δημιουργία μη-τερματικού T. • το σύμβολο D παραμένει για να δηλώσει τις βασικές

μονάδες.

Page 44: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Παράδειγμα (ii)

▪ Αρ. προσεταιριστικοί "+", "-" (συμβ. Ε)

▪ Αρ. προσεταιριστικοί "*" , "/" (συμβ. Τ)

▪ το σύμβολο D

Συμβολοσειρά 4-3+5*8

▪ E::=E"+"T | E"-"T|T

▪ T::=T"*"D|T"/"D|D

▪ D::="1"|"2"|...|"9"|"0"

Ε

Ε - T

T D

Ε

+ Τ

3

D

8

Τ *

D

5D

4

Page 45: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Απαλοιφή Αριστερής Αναδρομής

▪ Αριστερά αναδρομικός κανόνας με:• Άμεση αναδρομή Α::= Αβ• Έμμεση αναδρομή Α::=αβ, όπου σε μία ή

περισσότερες παραγωγές η συμβολοσειρά α παράγει την Αγ.

• Γενικότερα Α→α και α ⇒∗ Αβ▪ Η αριστερή αναδρομή είναι ανεπιθύμητη στην

περίπτωση της από-πάνω προς τα κάτω ανάλυσης (top-down). • Γιατί;

Page 46: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Μέθοδος Απαλοιφής

▪ Έστω ο κανόνας Α::=Αα1|Αα2|...|Ααn|β1|...|βm

▪ Ο μετασχηματισμός περιλαμβάνει την εισαγωγή ενός νέου τερματικού Α' και την μεταγραφή του κανόνα στους ακόλουθους:Α::=β1Α'|...|βmΑ'Α'::=α1Α'|α2Α'|...|αnΑ'|ε

▪ Παράδειγμα:E::=E "+"T | E "-" T | T

Α::=Α α1 | Α α2 | β1

Α::=β1Α'γίνεται Ε::=ΤΕ'Α'::=α1Α'| α2Α' |ε γίνεται Ε'::="+"ΤΕ' | "-"ΤΕ'|ε

Page 47: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Αντικατάσταση▪ Οι μετασχηματισμοί για τις έμμεσες αναδρομές

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

▪ Αντικατάσταση είναι ο μετασχηματισμός στον οποίο αντικαθιστούμε ένα μη-τερματικό σύμβολο Β στο δεξιό μέλος ενός κανόνα Α με όλα τα εναλλακτικά δεξιά μέλη κανόνων που αφορούν το Β.

▪ Α::=α1Βα2 Α::=α1β1α2|α1β2α2|...|α1βnα2

▪ Β::=β1|β2|...|βn Β::=β1|β2|...|βn

Page 48: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Αριστερή Παραγοντοποίηση

▪ Για την αποδοτική υλοποίηση των συντακτικών αναλυτών δεν πρέπει δύο εναλλακτικοί κανόνες για ένα μη-τερματικό να ξεκινούν με το ίδιο πρόθεμα. Δηλαδή:Α::=αβ1|αβ2|...|αβn|γ1|γ2|...|γn

▪ Η γραμματική με αριστερή παραγοντοποίηση μετατρέπεται στην:Α::=αΒ|γ1|γ2|...|γn

Β::=β1|β2|...|βn

Page 49: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Άσκηση

▪ Εφαρμόστε αριστερή παραγοντοποίηση και τις απαραίτητες αντικαταστάσεις στην ακόλουθη γραμματική: S::=aBc|adeC|C|gB::=deC::=adefB

▪ Απάντηση:• Με αντικατάσταση της Β και της C το πρώτο σύνολο

κανόνων γίνεται:S::=adec|adeadefB|adefB|g• και με παραγοντοποίηση:S::=adeS'|gS'::=c|adefB|fB

Page 50: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Συναρτήσεις FIRST και FOLLOW

▪ Οι δύο συναρτήσεις ορίζονται για τα σύμβολα μιας γραμματικής και αφορούν την κατασκευή συντακτικών αναλυτών και των δύο τύπων.

▪ Έστω μια γραμματική G={T,N,P,S}• Η συνάρτηση FIRST(α) ορίζεται για κάθε

συμβολοσειρά α ∈ (Τ ∪ Ν)* και ισούται με το σύνολο των τερματικών συμβόλων με τα οποία μπορεί να ξεκινά μια συμβολοσειρά η οποία παράγεται από την α.

• Η συνάρτηση FOLLOW(A), όπου Α ∈ Ν, είναι το σύνολο των τερματικών συμβόλων που μπορεί να ακολουθούν την Α σε ένα προτασιακό τύπο.

Page 51: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Υπολογισμός Συνάρτησης FIRST (i)

▪ Για κάθε σύμβολο Χ της γραμματικής G, ισχύουν οι ακόλουθοι κανόνες υπολογισμού:• Αν Χ τερματικό τότε FIRST(X) ={X}• Αν Χ ∈ Ν και υπάρχει κανόνας Χ→ε, τότε

FIRST(X)=FIRST(X)∪{ε}• Αν Χ ∈ Ν, και για κάθε κανόνα Χ→Α1,Α2...Αn, τότε

FIRST(X) = FIRST(X)∪(FIRST(Ai) -{ε}), για κάθε i, τέτοιο ώστε ∀ j | 0<j<i ε∈FIRST(Aj).

• Εάν ∀ j | 0<j≤n ε∈FIRST(Aj), τότε FIRST(X)=FIRST(X)∪ {ε}

▪ Οι κανόνες εφαρμόζονται μέχρι να μην μπορούν να μεταβληθούν τα σύνολα FIRST.

Page 52: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Υπολογισμός Συνάρτησης FIRST (ii)

▪ Για κάθε συμβολοσειρά Χ1,Χ2,...,Χn • FIRST(Χ1,...,Χn) = FIRST(X1) – {ε}• Για κάθε i | 1<i≤n, εάν ∀ j | 0<j<i ε∈FIRST(Xj) τότε

FIRST(Χ1,...,Χn)=FIRST(Χ1,...,Χn)∪(FIRST(Xi)- {ε})

• Εάν για κάθε 0<i≤n, ε∈FIRST(Xi), τότε FIRST(Χ1,...,Χn) = FIRST(Χ1,...,Χn)∪{ε}

Page 53: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Συνάρτηση FOLLOW

▪ Δεδομένης μιας γραμματικής G={T,N,P,S}, και A∈Ν, τότε η συνάρτηση FOLLOW(A) ⊆ Τ∪{EOF}, ορίζεται ως:• Αν υπάρχει παραγωγή S ⇒* αAaβ, όπου α,β∈(Τ∪Ν)*

και a είναι τερματικό σύμβολο, τότε a∈FOLLOW(Α).• Αν υπάρχει παραγωγή S ⇒* αA, όπου α∈(Τ∪Ν)*

τότε EOF ∈ FOLLOW(Α).

Page 54: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Υπολογισμός της συνάρτησης FOLLOW

▪ FOLLOW(S)={EOF}▪ Για κάθε κανόνα της μορφής Α→αΒβ, όπου Α και

Β ∈ Ν και α,β∈(Τ∪Ν)*,FOLLOW(B)=FOLLOW(B)∪(FIRST(β)-{ε})

▪ Εάν ε∈FIRST(β) τοτε FOLLOW(B)=FOLLOW(B)∪FOLLOW(Α)

▪ Το παραπάνω εκτελείται μέχρι τα σύνολα FOLLOW να μην μεταβάλλονται.

Page 55: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Συντακτική Ανάλυση από Πάνω προς τα Κάτω

▪ Η συντακτική ανάλυση ξεκινά από το αρχικό σύμβολο της γραμματικής (ρίζα του συντακτικού δένδρου) και αντικαθιστά αυτό με τα σύμβολα από ένα κανόνα παραγωγής. Η διαδικασία συνεχίζεται με τους επόμενους κόμβους μέχρι όλα τα φύλλα του δένδρου να είναι τερματικά σύμβολα της γραμματικής.• Με ποια σειρά θα εξεταστούν οι κόμβοι παιδιά

ενός κόμβου; • Ποιος από τους πιθανούς εναλλακτικούς

κανόνες θα χρησιμοποιηθεί για την αντικατάσταση του μη-τερματικού συμβόλου;

Page 56: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

LL(1) Γραμματικές

▪ LL(1) γραμματική: Αναγνώσιμη από ένα LL(1) ΣΑ (αναδρομικής κατάβασης ή ΑΣ).• Υποσύνολο των γραμματικών χωρίς συμφραζόμενα,

αρκετά πλούσιο όμως για να περιγράψει τις περισσότερες γλώσσες.

▪ Προϋποθέσεις:• Για κάθε ζεύγος κανόνων παραγωγής Α→α και Α→β

πρέπει να ισχύει FIRST(α)∩FIRST(β) =∅ .• Αν το ε ανήκει στο FIRST(A) (για παράδειγμα

υπάρχει κανόνας Α→ε) πρέπει να ισχύει FIRST(Α)∩FOLLOW(Α) = ∅ .

Page 57: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

LL(1) Γραμματικές

▪ Αποκλείονται οι γραμματικές:• Αριστερά αναδρομικές• Έχουν δύο εναλλακτικούς κανόνες με δεξιά μέλη που

ξεκινούν με το ίδιο σύμβολο.• Έχουν δύο εναλλακτικούς κανόνες τα δεξιά μέλη των

οποίων παράγουν την κενή συμβολοσειρά. ▪ Πως επιτυγχάνεται το παραπάνω;

• Απαλοιφή αριστερής αναδρομής• Αντικατάσταση• Αριστερή παραγοντοποίηση

Page 58: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Άσκηση● Είναι η ακόλουθη γραμματική LL; Αν όχι κάντε τους απαραίτητους μετασχηματισμούς ώστε να γίνει LL.

▪ S::= SS+ | SS* | a

▪ Απάντηση:▪ Όχι η γραμματική δεν είναι LL, καθώς είναι

αριστερά αναδρομική.

Page 59: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Απάντηση

▪ Οι μετασχηματισμοί που πρέπει να γίνουν είναι οι ακόλουθοι.

▪ (παραγοντοποίηση) • S::=SSB | a • B::=+|*

▪ (απαλοιφή αριστερής αναδρομής)• S::=aC • C::=SBC|ε• B::=+|*

▪ Εναλλακτικά θα μπορούσαν οι μετασχηματισμοί να γίνουν με διαφορετική σειρά.

Page 60: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Υπολογισμός FIRST

▪ FIRST(S)={a}▪ FIRST(B)={+,*}▪ FIRST(C)={ε + FIRST(S)}={ε,a}

▪ FOLLOW(S)={EOF,+FIRST(B)}={EOF,+,*}▪ FOLLOW(C)=FOLLOW(S)={EOF,+,*}▪ FOLLOW(B)={(FIRST(C)-ε))+FOLLOW(C)}={a

+FOLLOW(S)}={a,EOF,+,*}

S::=aC C::=SBC|εB::=+|*

Page 61: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

ΣΑ Αναδρομικής Κατάβασης

▪ Recursive Descent ▪ ΣΑ από πάνω προς τα κάτω, εύκολα

κατασκευάσιμος χειρωνακτικά. ▪ Σε κάθε μη-τερματικό σύμβολο, αντιστοιχίζεται

μια ρουτίνα η οποία το αναγνωρίζει. ▪ Αποφυγή οπισθοδρόμησης: Χρήση της

συνάρτησης FIRST για την επιλογή της κατάλληλης ρουτίνας για την αναγνώριση, εξετάζοντας την επόμενη λεκτική μονάδα (lookahead).

Page 62: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

ΣΑ Αναδρομικής Κατάβασης (ii)

▪ Έστω Α::=α1|α2|...|αn και η επόμενη λεκτική μονάδα είναι η token.

▪ O κώδικας για την αναγνώριση της Α είναι: if token ∈ FIRST(α1) then <κώδικας για την α1>...elseif token ∈ FIRST(αn) then <κώδικας για την αn>elseif ε ∉ FIRST(α1)∪...∪FIRST(αn) then <συντακτικό σφάλμα>elseif token ∉ FOLLOW(A) then <συντακτικό σφάλμα>

Page 63: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Χειροκίνητη Κατασκευή Συντακτικού Αναλυτή

▪ FIRST(S)={a}▪ FIRST(B)={+,*}▪ FIRST(C)={ε,a}▪ FOLLOW(S)={EOF,+,*}▪ FOLLOW(C)={EOF,+,*}▪ FOLLOW(B)={a,EOF,+,*}

void S() {if token=a match(a);call C; else error;}void B() {if token = + match(+) elseif token=* match(*); else error}void C(){if token = a call S; call B; call C;

elseif token not_in {EOF,+,*} error;}

S::=aC FIRST(aC)={a}C::=SBC|ε FIRST(SBC)={a}

FIRST(ε) = {ε}B::=+|* FIRST(+)={+}

FIRST(-)={-}

Page 64: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

ΣΑ LL(1) Αυτομάτου Στοίβας

xn

...

x2

x1

a1 a2 am EOF...

Πίνακας Συντακτικής Ανάλυσης

LL(1)

Page 65: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Κατασκευή Πίνακα Συντακτικής Ανάλυσης

▪ Για κάθε κανόνα παραγωγής Α→β:• Για κάθε τερματικό σύμβολο a | a∈FIRST(β),

πρόσθεσε τον κανόνα Α→β στη θέση M[A,a]• Αν ε∈FIRST(β), τότε για κάθε τερματικό σύμβολο

a∈FOLLOW(Α), πρόσθεσε τον κανόνα Α→β στην θέση Μ[Α,a].

• Αν ε∈FIRST(β) και EOF∈FOLLOW(Α) τότε πρόσθεσε τον κανόνα Α→β στην θέση Μ[Α,EOF]

• Όσες θέσεις του πίνακα μένουν κενές συμπληρώνονται με την ένδειξη error (ή απλώς υπονοείται).

Page 66: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Πίνακας LL

▪ FIRST(S)={a}▪ FIRST(B)={+,*}▪ FIRST(C)={ε,a}▪ FOLLOW(S)={EOF,+,*}▪ FOLLOW(C)={EOF,+,*}▪ FOLLOW(B)={a,EOF,+,*}

S::=aC FIRST(aC)={a}C::=SBC|ε FIRST(SBC)={a}

FIRST(ε) = {ε}B::=+|* FIRST(+)={+}

FIRST(-)={-}

* + EOFB * +C ε ε SBC εS

a

aC

Page 67: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Λειτουργία ΣΑ LL(1)

▪ Συμπίπτει με την λειτουργία του ΑΣ.▪ Μέχρι η στοίβα να είναι κενή:

• Αν στην κορυφή της στοίβας βρίσκεται το τερματικό σύμβολο a το οποίο συμπίπτει με το επόμενο σύμβολο της συμβολοσειράς εισόδου, τότε το a αφαιρείται από τη στοίβα και το αυτόματο προχωρά στο επόμενο σύμβολο.

• Αν στην κορυφή της στοίβας είναι το μη-τερματικό Α, και το επόμενο σύμβολο της συμβολοσειράς εισόδου τότε είναι το a, και υπάρχει κανόνας Α→β στο Μ[Α,a], τότε το Α αφαιρείται από τη στοίβα και τοποθετούνται τα σύμβολα του β στη στοίβα.

• Αλλιώς σφάλμα.

Page 68: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Συντακτική Ανάλυση από Κάτω προς τα Πάνω

▪ Bottom-up Syntax Analysis▪ Δημιουργία δένδρου: Κατασκευή αριστερότερου

κόμβου, του οποίου όλοι οι κόμβοι παιδιά (απόγονοι) έχουν ήδη κατασκευαστεί.

▪ Η κατασκευή του δένδρου τερματίζει όταν κατασκευαστεί το τερματικό σύμβολο της γραμματικής (ρίζα).

▪ Πρόβλημα: Ποιοι ήδη δημιουργημένοι κόμβοι θα χρησιμοποιηθούν ως παιδιά για την κατασκευή του νέου κόμβου;

Page 69: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Παράδειγμα

▪ Έστω η ακόλουθη γραμματική και η συμβολοσειρά id * id.

Ε ::= Ε "+" Τ | ΤT ::= Τ "*" F | FF ::= "id" | "(" E ")"▪ Η δημιουργία του δένδρου

περιλαμβάνει

id id*

id

id*F

id

id*

F

T *

id

id

*

F

id

T F

T

id

id

*

F

T F

E

T

id

id

*

F

T F

Page 70: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

ΣΑ Ολίσθησης Ελάττωσης(shift-reduce)

▪ Γενική κατηγορία ΣΑ από κάτω προς τα πάνω ▪ Χρησιμοποιούν στοίβα για να αποθηκεύουν

τερματικά και μη-τερματικά σύμβολα.▪ Ενέργειες ενός ΣΑ:

• Ολίσθηση (shift), όπου ένα σύμβολο εισόδου τοποθετείται στη στοίβα

• Ελάττωση (reduce), όπου ένα ή περισσότερα σύμβολα από την κορυφή της στοίβας αντικαθίστανται από ένα μη-τερματικό σύμβολο.

• Αποδοχή (accept), όταν η στοίβα περιέχει το αρχικό σύμβολο της γραμματικής

• Σφάλμα (error), όταν εμφανιστεί συντακτικό σφάλμα.

Page 71: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Αποφάσεις κατά την διάρκεια της Συντακτικής Ανάλυσης

Ε ::= Ε "+" Τ | ΤT ::= Τ "*" F | FF ::= "id" | "(" E ")"

Στοίβα Είσοδος Ενέργεια$

$F$T$T*

EOF$T*F EOF$T EOF$E EOF

id * id EOF shift$id *id EOF reduce F::=id

*id EOF reduce T::=F*id EOF shiftid EOF shift

$T*id reduce F::=idreduce T::=T*Freduce E::=T

accept

▪ Ελάττωση με κανόνα Ε::=Τ ή ολίσθηση?

▪ Ελάττωση με τον κανόνα Τ::=Τ*F ή T::=F?

Page 72: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

ΣΑ LR(1)

▪ Οι ΣΑ της κατηγορίας υλοποιούνται με αυτόματο στοίβας της μορφής:

ΠΙΝΑΚΕΣ ΕΛΕΓΧΟΥ ΣΥΝΤΑΚΤΙΚΗΣ ΑΝΑΛΥΣΗΣ

ACTION NEXT

ΑΛΓΟΡΙΘΜΟΣ LR

a1 a2 am EOF...

xn

...

s1

x1

s0

sn

Page 73: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Λειτουργία ΣΑ LR

▪ Αρχικά, η στοίβα περιέχει μόνο η αρχική κατάσταση. ▪ Έστω ότι στην κορυφή της στοίβας βρίσκεται η

κατάσταση s και το σύμβολο εισόδου είναι a. Τότε αν το κελί του πίνακα action(s,a) περιέχει:• πράξη ολίσθησης, τότε το a τοποθετείται στη στοίβα

και μετά από αυτό η κατάσταση next(s,a).• πράξη ελάττωσης, με ένα κανόνα της μορφής Α::=β,

τότε αφαιρούνται από τη στοίβα |β| ζεύγη καταστάσεων-συμβόλων. Η επόμενη κατάσταση καθορίζεται από την ενέργεια s''=next(s',Α) (πίνακας ΝΕΧΤ), όπου s' το στοιχείο στην κορυφή της στοίβας. Τοποθετείται στη στοίβα το Α και η κατάσταση s''.

• πράξη αποδοχής, τότε ο ΣΑ σταματά.

Page 74: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Παράδειγμα Πίνακα ΣΑ LR

(1) Ε ::= Ε "+" Τ(2) Ε ::= Τ(3) T ::= Τ "*" F (4) T::=F(5) F::="(" E ")"(6) F ::= "id"

STATE Action Goto (Next)id + * ( ) EOF E T F

0 s5 s4 1 2 31 s6 acc2 r2 s7 r2 r23 r4 r4 r4 r44 s5 s4 8 2 35 r6 r6 r6 r66 s5 s4 9 37 s5 s4 108 s6 s119 r1 s7 r1 r110 r3 r3 r3 r311 r5 r5 r5 r5

Page 75: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Παράδειγμα ανάλυσης της id * id + id

Στοίβα Είσοδος Ενέργεια1 0 id*id+id EOF shift (s5)

2 0 id 5 *id+id EOF reduce by F ::= id (r6)

3 0 F 3 *id+id EOF reduce T ::= F (r4)

4 0 T 2 *id+id EOF shift (s7)

5 0 T 2 * 7 id+id EOF shift (s5)

6 0 T 2 * 7 id 5 +id EOF reduce by F ::= id (r6)

7 0 T 2 * 7 F 10 +id EOF reduce by T::=T*F (r3)

8 0 T 2 +id EOF reduce by E ::= T (r2)

9 0 E 1 +id EOF shift (s6)

10 0 E 1 + 6 id EOF shift (s5)

11 0 E 1 + 6 id 5 EOF reduce by F ::= id (r6)

12 0 E 1 + 6 F 3 EOF reduce by T ::=F (r4)

13 0 E 1 + 6 T 9 EOF reduce by E::=E+T (r1)

14 0 E 1 EOF accept

Page 76: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Κατασκευή Πίνακα SLR(1)

▪ Για την κατασκευή του αντίστοιχου πίνακα συντακτικής ανάλυσης απαιτείται ο ορισμός:• της έννοιας του στοιχείου (item),• της συνάρτησης CLOSURE(I) (κλεισίματος) ενός

συνόλου στοιχείων,• της συνάρτησης GOTO(I,X) ενός συνόλου στοιχείων

και ενός συμβόλου της γραμματικής, η οποία επιστρέφει ένα σύνολο στοιχείων,

• ορισμός των καταστάσεων του αυτομάτου.▪ Αλγόριθμος κατασκευής του πίνακα βάσει των

παραπάνω.

Page 77: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Στοιχεία (Items)

▪ Στοιχείο είναι ένας κανόνας παραγωγής, στον οποίο έχει προστεθεί το σύμβολο "●" . Για παράδειγμα στον κανόνα Α::= ΧΥΖ αντιστοιχούν τα ακόλουθα στοιχεία• Α::= ● ΧΥΖ, Α::= Χ●ΥΖ, Α::= ΧΥ●Ζ Α::= ΧΥΖ●

▪ Το σημείο "●" σηματοδοτεί το σημείο της συμβολοσειράς που έχουμε ήδη δει, και το τι περιμένουμε να δούμε στη συνέχεια.

Page 78: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Συνάρτηση CLOSURE(I)

▪ Η συνάρτηση CLOSURE (κλείσιμο) ενός συνόλου στοιχείων Ι της γραμματικής δίνεται από:• όλα τα στοιχεία του συνόλου Ι,• για κάθε στοιχείο του Ι της μορφής Α::=α●Ββ το

οποίο ανήκει στο σύνολο CLOSURE(I) και για κάθε κανόνα της γραμματικής της μορφής Β::=γ, το στοιχείο Β::=●γ ανήκει στο CLOSURE(I).

• Το παραπάνω βήμα εκτελείται μέχρι να μη ν μεταβάλλεται το CLOSURE(I).

Page 79: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Παράδειγμα Υπολογισμού CLOSURE(I)

▪ Έστω η (επαυξημένη) γραμματική:Ε' ::= ΕΕ ::= Ε "+" Τ | ΤT ::= Τ "*" F | FF ::= "id" | "(" E ")"

▪ Εάν θεωρήσω το σύνολο I0 = {E' ::=●E} η συνάρτηση CLOSURE(I0) είναι:

CLOSURE(I0) = {E'::=●E; E::=●E+T; E::=●T; T ::=●T * F; T ::= ●F; F ::=●(E); F ::= ●id }

Page 80: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Συνάρτηση GOTO(Ι,Χ)

▪ Η συνάρτηση GOTO(I,X) απεικονίζει ένα σύνολο στοιχείων Ι και ένα σύμβολο της γραμματικής Χ (τερματικό ή μη) σε ένα σύνολο Ι' στοιχείων τέτοιων ώστε:GOTO(I,X) = CLOSURE(J) J = {A::=αX●b | A::=α●Xb ∈ I}

▪ Παράδειγμα Υπολογισμού GOTO: I1={E'::=E●; E::=E●+T}

GOTO(I1,*) = {}GOTO(I1,+)={E::=E+●T; T::=●T*F;T::=●F; F::=●id; F::=●(E) }

Ε' ::= ΕΕ ::= Ε "+" Τ | ΤT ::= Τ "*" F | FF ::= "id" | "(" E ")"

Page 81: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Καταστάσεις του Αυτομάτου

▪ Αρχικά το αυτόματο δεν έχει "διαβάσει" κανένα σύμβολο. Άρα η αρχική του κατάσταση είναι:Ε' ::= ● E

▪ Φυσικά, το Ι0=CLOSURE(E'::= ● E)CLOSURE(E'::=●E) = {E'::=●E; E::=●E+T; E::=●T; T ::=●T * F; T ::= ●F; F ::=●(E); F ::= ●id }▪ Αν το αυτόματο διαβάσει ένα σύμβολο a τότε η

κατάσταση του θα δίνεται από την I1=GOTO(I0,a)

▪ Πχ. "ανάγνωση" σύμβολου id, άραGOTO(I0,id)={ F ::= id●} = I1

Page 82: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Κατασκευή Καταστάσεων▪ Έστω μια γραμματική G=(T,N,P,S) και η επαυξημένη

γραμματική: G'={T,N∪S',P∪(S'::=S),S'} ▪ Οι καταστάσεις Ι0, Ι1,...Ιn προκύπτουν από την

ακόλουθη διαδικασία:I0 = CLOSURE({S'::=●S})C = {I0}repeatforall Ιi ∈ C forall α ∈ (T∪N) if GOTO(Ιi,α)≠∅ and GOTO(Ιi,α) ∉ C then Ij = GOTO(Ιi,α) C = C ∪ { Ij}until C unchaged

Page 83: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Κατασκευή Πίνακα SLR(1) ΣΑ για μια Γραμματική G

1) Δημιουργία των καταστάσεων των στοιχείων της G.2) Για μια κατάσταση Ιi, αν υπάρχει στο Ιi κανόνας:

i) Α::=α●aβ και a είναι τερματικό σύμβολο και υπάρχει GOTO(Ιi,a)= Ιj τότε action(i,a)=shift j

ii) Α::=α● τότε για κάθε a στο FOLLOW(A) με Α≠S', τότε action(i,a)= reduce A::=α

iii) S'::=S● τότε action(i,EOF) = accept3) Για κάθε μη-τερματικό σύμβολο Α αν GOTO(Ιi,A)= Ιj

τότε next(i,A)= j4) Όλες οι άλλες θέσεις του πίνακα παίρνουν την τιμή

error.5) Η αρχική κατάσταση είναι η Ι0=CLOSURE({S'::=●S})

Page 84: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Παράδειγμα

▪ Να υπολογιστεί ο SLR πίνακας συντακτικής ανάλυσης για την γραμματικήS::=01|0S1

▪ Επαυξημένη ΓραμματικήS'::=SS::=01S::=0S1

▪ FIRST(S)={0} FOLLOW(S)={1,EOF}

Page 85: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Υπολογισμός GOTO

▪ I0={S'::= ● S,S::= ● 01, S::= ● 0S1}

▪ GOTO(I0,0)={S::= 0●1, S::= 0● S1,S::= ● 01, S::= ● 0S1} = I1

▪ GOTO(I0,1)={} <no state>

▪ GOTO(I0,S)={S'::=S●}=I2

▪ GOTO(I1,0)={S::= 0●1, S::= 0● S1,S::= ● 01, S::= ● 0S1} = I1

▪ GOTO(I1,1)={S::= 01●}=I3

▪ GOTO(I1,S)={S::= 0S●1}=I4

▪ GOTO(I4,1)={S::= 0S1●}=I5

S'::=S(1) S::=01(2) S::=0S1

Page 86: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Πίνακας SLR

0 1 EOF S0 s1 21 s1 s3 423 r1 r14 s55 r2 r2

accS'::=S(1) S::=01(2) S::=0S1

▪ I0={S'::= ● S,S::= ● 01, S::= ● 0S1}

▪ GOTO(I0,0)={S::= 0●1, S::= 0● S1,S::= ● 01, S::= ● 0S1} = I1

▪ GOTO(I0,S)={S'::=S●}=I2

▪ GOTO(I1,0)={S::= 0●1, S::= 0● S1,S::= ● 01, S::= ● 0S1} = I1

▪ GOTO(I1,1)={S::= 01●}=I3

▪ GOTO(I1,S)={S::= 0S●1}=I4

▪ GOTO(I4,1)={S::= 0S1●}=I5

Page 87: Επαναληπτικό Μάθημαusers.uom.gr/~iliass/Courses/Compilers/Slides/Revision.pdfA→ε δ(Α,ε)=q f ... • Δώστε το συντακτικό δένδρο της

Εξετάσεις

▪ Το σύγγραμα μοιράζεται από το Βιβλιοπωλείο ΑΝΙΚΟΥΛΑ (ισόγειο)

▪ Η ύλη είναι στο site του Μαθήματος.▪ Ερωτήσεις γρ. 529 ή e-mail.▪ Σύμφωνα με το πρόγραμμα οι εξετάσεις είναι:

Παρασκευή 1 Φεβρουαρίου 2008 15:00-17:00 Αιθ. 10Καλή επιτυχία!