compilers - ll grammars (greek)

121
Κυριακή, 26 Δεκεμβρίου 2021 Κυριακή, 26 Δεκεμβρίου 2021 Τμ. Πληροφορικής, Α.Π.Θ. Τμ. Πληροφορικής, Α.Π.Θ. 1 ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Γραμματικές Ι Ο ρισμός Γραμματική G είναικάθε τετράδα τηςμορφής ) , , , ( P S T N G όπου: Ν είναι ένα πεπερασμένο σύνολο, του οποίου τα στοιχεία αποκαλούμε μη τερματικά σύμβολα , Τ είναιένα άλλο πεπερασμένο σύνολο,που περιλαμβάνειτα τερματικά σύμβολα , S είναικάποιο σύμβολο,που ονομάζεται αρχή ή αξίωμα της γραμματικήςκαι P είναι ένα πεπερασμένο σύνολο κανόνων παραγωγής της μορφής q P με N P και * T N q ,το σύνολο δηλαδή των λέξεων με μήκος μεγαλύτερο ή ίσο του μηδενός,που μπορείνα σχημα- τισθούν από τα στοιχεία του T N : ,.. 2 , 1 , | ... 1 i T N x x x i n

Upload: michael

Post on 03-Feb-2016

227 views

Category:

Documents


0 download

DESCRIPTION

Γραμματικές και συντακτική ανάλυση.

TRANSCRIPT

Page 1: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 11

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές ΙΟρισμός Γραμματική G είναι κάθε τετράδα της μορφής

),,,( PSTNG

όπου: Ν είναι ένα πεπερασμένο σύνολο, του οποίου τα στοιχεία

αποκαλούμε μη τερματικά σύμβολα, Τ είναι ένα άλλο πεπερασμένο σύνολο, που περιλαμβάνει τα

τερματικά σύμβολα, S είναι κάποιο σύμβολο, που ονομάζεται αρχή ή αξίωμα της

γραμματικής και P είναι ένα πεπερασμένο σύνολο κανόνων παραγωγής της

μορφής

qP

με NP και *TNq , το σύνολο δηλαδή των λέξεων με μήκος μεγαλύτερο ή ίσο του μηδενός, που μπορεί να σχημα-τισθούν από τα στοιχεία του TN :

,...2,1,|...1 iTNxxx in

Page 2: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 22

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές ΙΙ

Α ς υποθέσουμε, ότι p και q είναι δύο συμβολοσειρές, κάθε μία από τις οποίες αποτελείται από μηδέν ή περισσότερα μη τερματικά ή/και τερματικά σύμβολα ( *, Vqp ).

Α ν η συμβολοσειρά q προκύπτει από την p χρησιμοποιώ ντας μία και μόνο μία παραγωγή της γραμματικής G , τότε λέμε ότι η p παράγει άμεσα την q και αυτό γράφεται ως qp . Έ τσι, αν zwxp και zyxq και η yw είναι μ ία παραγωγή της γραμματικής G , τότε qp .

Α ν η συμβολοσειρά q προκύπτει από την p με εφαρμογή n παραγωγές της γραμματικής G , με 1n , τότε λέμε ότι η p παράγει την q με μία ή

περισσότερες παραγω γές και αυτό γράφεται ως qp . Α ν η συμβολοσειρά q προκύπτει από την p , όπως προηγουμένω ς, μετά

από 0n παραγωγές, τότε απλά λέμε ότι η p παράγει την q και αυτό

γράφεται ω ς qp * .

Page 3: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 33

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές ΙΙΙ Μία γραμματική ονομάζεται αναδρομική εφόσον επιτρέπει παραγωγές της

μορφής qXpX , όπου NX και *, Vqp . Επίσης, ονομάζεται αρι-

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

Μία γραμματική λέμε ότι παρουσιάζει αυτοένθεση (self-embedding grammar), αν επιτρέπει παραγωγές της μορφής qXpX , όπου NX

και *, Vqp , με ένα τουλάχιστο από αυτά να είναι τερματικό, δηλαδή 0)()( TqTp .

Λέμε ότι η γλώσσα L παράγεται από τη γραμματική G, αν:

wSTwwLG

**;|

Γραμματικές Τύπου 2 (χωρίς συμφραζόμενα) Oι κανόνες παραγωγής έχουν τη μορφή:

qX με NX και TNq

Page 4: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 44

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

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

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

Ο ορισμός της να μην περιλαμβάνει παραγωγές-ε, για τις οποίες θα μιλή-σουμε στη συνέχεια της παραγράφου.

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

Γραμματική με πλεονασματικούς κανόνες παραγωγής

Μη τερματικά σύμβολα: YRQPN ,,,

Τερματικά σύμβολα: xT Αρχή: PS

(i) PP x (ii) QP

(iii) RP (iv) QQ x

(v) xR (vi) xxY

Page 5: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 55

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές VΓραμματική με κανόνα- ε για τερματισμό αναδρομικού ορισμού

Ορισμός γραμματικής με χρήση κανόνα-ε QRP QRR

R xQ

Ορισμός ισοδύναμης γραμματικής χωρίς κανόνα-ε QP QPP xQ

Γραμματική με κυκλικούς κανόνες παραγωγής

QP RQ PR

ή PP

Page 6: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 66

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές και συντακτική ανάλυση Ι

Έστω, η γραμματική χωρίς συμφραζόμενα Γ=(Τ,Ν,S,R),

όπου Τ={NUMBER,+,-,*,/,(,)}

N={E}S=E

με κανόνες παραγωγής: E E+E (1)

| E-E (2)| E*E (3)| E/E (4)| (E) (5)| NUMBER (6)

Page 7: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 77

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές και συντακτική ανάλυση ΙΙΗ παραπάνω γραμματική μπορεί να αναλύσει την παράσταση (3+7)/(8-6).

Πρώτα χρησιμοποιεί τον κανόνα παραγωγής (4) και σχηματίζει το δένδρο:

Μετά σχηματίζει το αριστερό και το δεξί υποδένδρο χρησιμοποιώντας τον κανόνα παραγωγής (5):

E

E / E

Page 8: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 88

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές και συντακτική ανάλυση ΙΙΙ

E

E /

( E )

E

( E )

Η ανάλυση συνεχίζει με τα φύλλα Ε στα δύο υποδένδρα. Το Ε στο αριστερό υποδένδρο αναλύεται με τον κανόνα παραγωγής (1) και το Ε στο δεξί υποδένδρο αναλύεται με τον κανόνα παραγωγής (2).

Page 9: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 99

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές και συντακτική ανάλυση ΙV

E

E /

( E )

E

( E )

E + E E - E

 Τέλος όλα τα φύλλα Ε αναλύονται με τον κανόνα παραγωγής (6).

Page 10: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1010

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές και συντακτική ανάλυση V

E

E /

( E )

E

( E )

E + E E - E

N U M B E R N U M B E R N U M B E R N U M B E R

Page 11: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1111

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

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

Γραμματικές και συντακτική ανάλυση VI

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

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

qplm

*

q

q

qprm

*

Page 12: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1212

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές και συντακτική ανάλυση VII

Λέμε ότι μια γραμματική είναι γραμματική LL(k) αν κάθε της πρόταση μπορεί να προέλθει από την αρχή της μέσω αριστερών προτασιακών μορφών, όπου ο κανόνας που εφαρμόζεται σε κάθε παραγωγή μπορεί να προβλεφθεί με βάση τα k επόμενα σύμβολα της συμβολοσειράς.

Όλες οι γλώσσες της οικογένειας LL είναι προσδιοριστικές.

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

Όλες οι γλώσσες της οικογένειας LR είναι προσδιοριστικές. Η οικογένεια των γλωσσών LR(1) είναι ακριβώς η οικογένεια των

προσδιοριστικών γλωσσών και είναι ευρύτερη από την οικογένεια των γλωσσών LL.

Page 13: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1313

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Συμβολισμοί BNF και EBNF I

Συμβολισμός EBNF του N. Wirth

Μη τερματικά σύμβολα Χρησιμοποιούνται κανονικοί χαρακτήρες, που δεν περικλείονται σε < και >, όπως στην περίπτωση του κλασσικού συμβολισμού BNF.

Τερματικά σύμβολα Περιλαμβάνονται σε “ και ”, όπως π.χ. το “+”. | Χρησιμοποιείται για το συμβολισμό εναλλακτικών περιπτώσεων. ( και ) Χρησιμοποιείται στην ομαδοποίηση συμβόλων και στην αλλαγή της

προτεραιότητας εφαρμογής των άλλων μετασυμβόλων. [ και ] Προαιρετική εμφάνιση ενός συμβόλου ή μιας ομάδας συμβόλων. { και } Προαιρετική επανάληψη ενός συμβόλου ή μιας ομάδας συμβόλων. = Χρησιμοποιείται αντί του ή του ::= στους ορισμούς των κανόνων

παραγωγής. . Σημειώνει το τέλος ενός κανόνα παραγωγής. (* και *) Χρησιμοποιούνται για τη διατύπωση σχολίων.

Page 14: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1414

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Συμβολισμοί BNF και EBNF II

ΠΑΡΑΔΕΙΓΜΑ: Γραμματική αριθμητικών εκφράσεων

S = έκφραση.έκφραση = έκφραση “+” όρος | έκφραση “-” όρος | όρος.όρος = όρος “*” παράγοντας | όρος “/” παράγοντας | παράγοντας.παράγοντας = “(” έκφραση “)” | αριθμός.αριθμός = ψηφίο { ψηφίο }.ψηφίο = “0” | “1” | “2” | “3” | “4” | “5” | “6” | “7” | “8” | “9”.

Page 15: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1515

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Παράγωγα και συντακτικά δένδρα I

Ένα παράγωγο δένδρο αναπαριστά τη δομή μιας πρότασης και έχει το χαρακτηριστικό ότι μπορεί να αντιστοιχεί σε περισσότερες από μία παραγωγές.

ΠΑΡΑΔΕΙΓΜΑS = έκφραση.έκφραση = έκφραση ΤΛ έκφραση | “(” έκφραση “)” |

“αριθμός”.ΤΛ = “+” | “-” | “*” | “/”.

ΠΡΌΤΑΣΗ: (27-5)*8

Page 16: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1616

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Παράγωγα και συντακτικά δένδρα IIΠαραγωγή μέσω δεξιών προτασιακών μορφών

Παραγωγή μέσω αριστερών προτασιακών μορφών

(1) έκφραση έκφραση ΤΛ έκφραση [έκφραση = έκφραση ΤΛ έκφραση] (2) έκφραση ΤΛ αριθμός [έκφραση = “αριθμός”] (3) έκφραση * αριθμός [ΤΛ = “*”] (4) ( έκφραση ) * αριθμός [έκφραση = “(” έκφραση “)”] (5) (έκφραση ΤΛ έκφραση) * αριθμός [έκφραση = έκφραση ΤΛ έκφραση] (6) (έκφραση ΤΛ αριθμός) * αριθμός [έκφραση = “αριθμός”] (7) (έκφραση - αριθμός) * αριθμός [ΤΛ = “-”] (8) (αριθμός - αριθμός) * αριθμός [έκφραση = “αριθμός”]

(1) έκφραση έκφραση ΤΛ έκφραση [έκφραση = έκφραση ΤΛ έκφραση] (2) (έκφραση) ΤΛ έκφραση [έκφραση = “(” έκφραση “)”] (3) (έκφραση ΤΛ έκφραση) ΤΛ έκφραση [έκφραση = έκφραση ΤΛ έκφραση] (4) (αριθμός ΤΛ έκφραση) ΤΛ έκφραση [έκφραση = “αριθμός”] (5) (αριθμός - έκφραση) ΤΛ έκφραση [ΤΛ = “-”] (6) (αριθμός - αριθμός) ΤΛ έκφραση [έκφραση = “αριθμός”] (7) (αριθμός - αριθμός) * έκφραση [ΤΛ = “*”] (8) (αριθμός - αριθμός) * αριθμός [έκφραση = “αριθμός”]

Page 17: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1717

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Παράγωγα και συντακτικά δένδρα IIΙ

έκφραση

έκφραση ΤΛ έκφραση

( )έκφραση * αριθμός

έκφραση έκφρασηΤΛ

αριθμός - αριθμός

Page 18: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1818

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Παράγωγα και συντακτικά δένδρα IV

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

8

27

*

-

5

Page 19: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 1919

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές με ασάφειες Ι

Λέμε ότι μια γραμματική περιέχει ασάφειες, όταν σε μια πρότασή της μπορεί να αντιστοιχούν περισσότερα από ένα δένδρα.

ΑΣΑΦΕΙΑ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΤΕΛΕΣΤΩΝS = έκφραση.έκφραση = έκφραση ΤΛ έκφραση | “(” έκφραση “)” |

“αριθμός”.ΤΛ = “+” | “-” | “*” | “/”.

ΠΡΟΤΑΣΗ: 27-5*8

Page 20: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2020

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές με ασάφειες ΙΙ

(1) έκφραση έκφραση ΤΛ έκφραση [έκφραση = έκφραση ΤΛ έκφραση] (2) έκφραση ΤΛ έκφραση ΤΛ έκφραση [έκφραση = έκφραση ΤΛ έκφραση] (3) αριθμός ΤΛ έκφραση ΤΛ έκφραση [έκφραση = “αριθμός”] (4) αριθμός - έκφραση ΤΛ έκφραση [ΤΛ = “-”] (5) αριθμός - αριθμός ΤΛ έκφραση [έκφραση = “αριθμός”] (6) αριθμός - αριθμός * έκφραση [ΤΛ = “*”] (7) αριθμός - αριθμός * αριθμός [έκφραση = “αριθμός”]

Page 21: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2121

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές με ασάφειες ΙΙΙ

(1) έκφραση έκφραση ΤΛ έκφραση [έκφραση = έκφραση ΤΛ έκφραση] (2) αριθμός ΤΛ έκφραση [έκφραση = “αριθμός”] (3) αριθμός - έκφραση [ΤΛ = “-”] (4) αριθμός - έκφραση ΤΛ έκφραση [έκφραση = έκφραση ΤΛ έκφραση] (5) αριθμός - αριθμός ΤΛ έκφραση [έκφραση = “αριθμός”] (6) αριθμός - αριθμός * έκφραση [ΤΛ = “*”] (7) αριθμός - αριθμός * αριθμός [έκφραση = “αριθμός”]

Page 22: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2222

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές με ασάφειες ΙV

Σωστό δένδρο είναι το δένδρο εκείνο που είναι συμβατό με τη σημασία που θέλει να αποδώσει ο κατασκευαστής σε κάθε στοιχείο της γλώσσας.

Για την ασάφεια προτεραιότητας τελεστών απαιτείται η χρήση κανόνων αποσαφήνισης προτεραιοτήτων.S = έκφραση.έκφραση = έκφραση ΤΛ_ΑΘ έκφραση | όρος.ΤΛ_ΑΘ = “+” | “-”.όρος = όρος ΤΛ_ΓΙ όρος | παράγοντας.ΤΛ_ΓΙ = “*” | “/”.παράγοντας = “(” έκφραση “)” | “αριθμός”.

Page 23: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2323

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές με ασάφειες V

Η προηγούμενη γραμματική παραμένει δέσμια ασάφειας ως προς την προσεταιριστικότητα των πράξεων: πως γίνεται η ανάλυση της 27-5-8; Η συγκεκριμένη γραμματική αφήνει ανοικτό και το ενδεχόμενο (27-5)-8 αλλά και το ενδεχόμενο 27-(5-8).

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

Page 24: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2424

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές με ασάφειες VΙ

Διορθωμένη γραμματική: S = έκφραση.έκφραση = έκφραση ΤΛ_ΑΘ όρος | όρος.ΤΛ_ΑΘ = “+” | “-”.όρος = όρος ΤΛ_ΓΙ παράγοντας | παράγοντας.ΤΛ_ΓΙ = “*” | “/”.παράγοντας = “(” έκφραση “)” | “αριθμός”.

Πρόταση: 27-5*8

Page 25: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2525

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές με ασάφειες VΙΙ

Πρόταση: 27-5-8

έκφραση

έκφραση ΤΛ_ΑΘ όρος

-

ΤΛ_ΑΘ -έκφραση όρος

αριθμός

αριθμόςόρος παράγοντας

παράγοντας

παράγοντας

αριθμός

Page 26: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2626

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές με ασάφειες VΙΙI

ΤΟ ΠΡΟΒΛΗΜΑ ΤΟΥ ΜΕΤΕΩΡΟΥ ELSES = εντολή.εντολή = “if” έκφραση “then” εντολή

| “if” έκφραση “then” εντολή “else” εντολή| άλλο.

if EK1 then if EK2 then ΕΝΤ1 else ΕΝΤ2

Page 27: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2727

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές με ασάφειες IΧ

εντολή

έκφραση εντολήif then

if έκφραση then εντολή else εντολήEK1

EK2 ENT1 ENT2

εντολή

έκφραση εντολήif then

if έκφραση then εντολήEK1

EK2 ENT1

ENT2

else εντολή

Page 28: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2828

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γραμματικές με ασάφειες Χ

ΓΡΑΜΜΑΤΙΚΗ ΠΟΥ ΑΠΟΦΕΥΓΕΙ ΤΟ ΠΡΟΒΛΗΜΑ ΤΟΥ ΜΕΤΕΩΡΟΥ ELSE ΜΕ ΤΕΧΝΑΣΜΑ

S = εντολή.εντολή = συν_εντολή | ασυν_εντολή.συν_εντολή=“if” έκφραση “then” συν_εντολή “else”

συν_εντολή | άλλο.

ασυν_εντολή= “if” έκφραση “then” εντολή | “if” έκφραση “then” συν_εντολή “else”

ασυν_εντολή.

Page 29: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 2929

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Αναπαράσταση παράγωγου δένδρου

#define astEmptyProgram 399

#define astProgram 400

#define astEmptyDeclSeq 401

#define astDeclSeq 402

#define astDecl 403

. . . . . . . . . . . . . .

/* ----------------------------------------------------------- */

/* ----- THE STRUCTURE FOR THE ABSTRACT SYNTAX TREE NODES ---- */

/* ----------------------------------------------------------- */

typedef struct AstNode_tag {

int NodeType;

struct symbol_tag *SymbolNode;

struct AstNode_tag *pAstNode[4];

} AstNode;

Page 30: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3030

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Καθοδική Ανάλυση

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

Καμία από τις τεχνικές που θα εξετάσουμε δεν μπορεί να εφαρμοσθεί σε αριστερά αναδρομικές γραμματικές.

Διακρίνουμε της τεχνικές της οπισθοδρόμησης και τις τεχνικές της πρόγνωσης.

Page 31: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3131

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Καθοδική ανάλυση με οπισθοδρόμηση Ι1. Δοθέντος συγκεκριμένου μη τερματικού συμβόλου εφαρμόζεται ο

πρώτος κανόνας της γραμματικής.2. Στην προτασιακή μορφή, που προκύπτει επιλέγεται το πρώτο από

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

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

μιας σειράς τερματικών συμβόλων (πρόταση γλώσσας αν ταυτίζεται) ή

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

Page 32: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3232

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Καθοδική ανάλυση με οπισθοδρόμηση ΙΙΠΑΡΑΔΕΙΓΜΑ

S = “k” X “n” | “k” Y.X = “l” | “m”.Y = “mmn” | “nnm”. ΠΡΟΤΑΣΗ: “kmmm”

S S

Xk n

S

X

l

k n

(α) (β) (γ)

S

X

m

k n

S

Yk

S

Yk

nm m

(δ) (ε) (στ)

Page 33: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3333

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Καθοδική ανάλυση με οπισθοδρόμηση ΙΙI

Ιδιαίτερα πολύπλοκη Όχι αποδοτική Αρκετά γενική, δηλ. αναγνωρίζει πιο

πολλές γλώσσες από τις άλλες τεχνικές καθοδικής ανάλυσης

Αργεί στον εντοπισμό των λαθών και έτσι η ανάνηψη γίνεται πολύ δύσκολη

Page 34: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3434

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση προβλέπουσας αναδρομικής κατάβασης Ι

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

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

τρέχουσα λεξική μονάδα είναι η αναμενόμενη και καλεί τη διαδικασία λεξικής ανάλυσης, για την ανάγνωση της

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

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

Page 35: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3535

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση προβλέπουσας αναδρομικής κατάβασης ΙΙΠΑΡΑΔΕΙΓΜΑ

S = έκφραση.έκφραση = έκφραση “+” όρος | έκφραση “-” όρος | όρος.όρος = όρος “*” παράγοντας | όρος “/” παράγοντας | παράγοντας.παράγοντας = “(” έκφραση “)” | “αριθμός”.

παράγοντας:Επέλεξε ΛΕΞ_ΜΟΝπερίπτωση “(”:

αναγνώρισε (“(”);έκφραση;αναγνώρισε (“)”);

περίπτωση “αριθμός”:

αναγνώρισε(“αριθμός”);αλλιώς:

λάθος;Τέλος παράγοντα.

//αν_λεξ_μον: αναμενόμενη λεξ. μονάδα

αναγνώρισε (αν_λεξ_μον): αν (ΛΕΞ_ΜΟΝ=αν_λεξ_μον) τότε

διάβασε την επόμενη μονάδα και ενημέρωσε τη μεταβλητή

ΛΕΞ_ΜΟΝ;αλλιώς

λάθος;τέλος αν

Τέλος αναγνώρισε.

Page 36: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3636

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση προβλέπουσας αναδρομικής κατάβασης ΙΙIΗ προβλέπουσα αναδρομική κατάβαση στηρίζεται στην πρόγνωση του κατάλληλου κάθε φορά κανόνα, που οδηγεί στην παραγωγή του δένδρου της πρότασης.Δε μπορεί να εφαρμοσθεί σε αριστερά αναδρομικές γραμματικές, όπως αυτή του προηγούμενου παραδείγματος.Ας θεωρήσουμε τη μη αριστερά αναδρομική γραμματική των αριθμητικών εκφράσεων:

S = έκφραση.έκφραση = όρος υπ_όροι.υπ_όροι = “+” όρος υπ_όροι | “-” όρος υπ_όροι | ε.όρος = παράγοντας υπ_παραγ.υπ_παραγ = “*” παράγοντας υπ_παραγ | “/” παράγοντας υπ_παραγ | ε.παράγοντας = “(”έκφραση “)” | “αριθμός”.

Page 37: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3737

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση προβλέπουσας αναδρομικής κατάβασης ΙV

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

έκφραση όρος υπ_όροι παράγοντας υπ_παραγ υπ_όροι (έκφραση) υπ_παραγ υπ_όροι . . . .

ή την παραγωγή

έκφραση όρος υπ_όροι παράγοντας υπ_παραγ υπ_όροι αριθμός υπ_παραγ υπ_όροι . . . .

Γενικά, για να στηριχθεί η ανάλυση στην τεχνική της πρόγνωσης χρειάζεται για κάθε μη τερματικό σύμβολο, να είναι εκ των προτέρων γνωστό τo σύνολο των τερματικών, που είναι δυνατό να εμφανισθούν στην αρχή των συμβολοσειρών, που παράγονται από αυτό (σύνολο FIRST). Επιπλέον, αν η γραμματική περιλαμβάνει κανόνες-ε, τότε για κάθε μη τερματικό σύμβολο που βρίσκεται στο αριστερό μέρος ενός τέτοιου κανόνα, επιβάλλεται και ο υπολογισμός του συνόλου των τερματικών, που μπορεί να εμφανισθούν αμέσως μετά από αυτό (σύνολο FOLLOW).

Page 38: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3838

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση προβλέπουσας αναδρομικής κατάβασης VΑνάλυση πρόγνωσης: κεντρική ιδέα

Δοθείσης μιας παραγωγής A , ο αναλυτής πρέπει να είναι σε θέση να επιλέξει μεταξύ &

Σύνολα FIRSTΓια ένα δεξί μέρος παραγωγής G, ορίζουμε ως FIRST() το σύνολο των αναγνωριστικών που εμφανίζονται πρώτα στις συμβολοσειρές που παράγονται από το .Δηλαδή ισχύει, x FIRST() αν και μόνο αν * x , για κάποια συμβολοσειρά

Γραμματική LL(1)

Αν A και A εμφανίζονται στη γραμματική πρέπει

FIRST() FIRST() = Αυτό επιτρέπει στον αναλυτή να προγνώσει με ασφάλεια την παραγωγή που θα χρησιμοποιεί σε κάθε βήμα!

Page 39: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 3939

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση προβλέπουσας αναδρομικής κατάβασης VΙ

Δοθείσης μιας γραμματικής που έχει την ιδιότητα LL(1) μπορούμε να γράψουμε διαδικασίες που να αναγνωρίζουν το

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

Οι γραμματικές με την ιδιότητα LL(1) ονομάζονται προγνώσιμες γραμματικές γιατί ο αναλυτής μπορεί να «προγνώσει» τη σωστή ανάπτυξη σε κάθε σημείο της ανάλυσης.

Οι αναλυτές που εκμεταλλεύονται την ιδιότητα LL(1) ονομάζονται αναλυτές πρόγνωσης.

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

Page 40: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4040

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση προβλέπουσας αναδρομικής κατάβασης VΙIΠαράδειγμα διορθωμένης γραμματικής αριθμητικών εκφράσεων (βλ. διαφάνεια Ανάλυση προβλέπουσας αναδρομικής κατάβασης ΙΙΙ)

int PLUS=1, MINUS=2, ...int lookahead = getNextToken(); //καθολική μετβλητή ΛΕΞ_ΜΟΝvoid advance() { lookahead = getNextToken(); }void match(int token) { if (lookahead == token) advance(); else error(); }

void S() { Expr(); } void Expr() { Term(); ExprPrime(); } void ExprPrime() { switch(lookahead) { case PLUS : match(PLUS); Term(); ExprPrime(); break; case MINUS : match(MINUS); Term();

ExprPrime(); break; default: return; }}

void Term() { Factor(); TermPrime(); }

void TermPrime() { switch(lookahead) { case TIMES: match(TIMES); Factor(); TermPrime(); break; case DIV: match(DIV); Factor(); TermPrime(); break; default: return;}}

void Factor() { switch(lookahead) { case LPAR : match(LPAR); Expr();

match(RPAR); break; case NUMBER: match(NUMBER); break; default: error();}}

Page 41: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4141

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση προβλέπουσας αναδρομικής κατάβασης VΙII

Παράδειγμα διορθωμένης γραμματικής αριθμητικών εκφράσεων (βλ. διαφάνεια Ανάλυση προβλέπουσας αναδρομικής κατάβασης

ΙΙΙ)Για την κατασκευή παράγωγου δένδρου: Γράφουμε μέσα στις διαδικασίες

κώδικα για δημιουργία κόμβου Περνάμε τους κόμβους από

διαδικασία σε διαδικασία μέσω μιας στοίβας

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

Για την κατασκευή συντακτικού δένδρου Κατασκευάζουμε λιγότερους

κόμβους Χρειάζεται να τους βάζουμε στη

στοίβα με την κατάλληλη σειρά ώστε να εξασφαλίζουμε αριστερή προσεταιριστικότητα

Expr() { Term(); ExprPrime();/* δημιουργία κόμβου Expr; εξαγωγή κόμβου ExprPrime από στοίβα; εξαγωγή κόμβου Term από στοίβα; καθιστούμε ExprPrime και Term απογόνους του Expr; εισαγωγή κόμβου Expr στη στοίβα;*/}

Page 42: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4242

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση προβλέπουσας αναδρομικής κατάβασης IΧ

Άλλο παράδειγμα

S = “if” E “then” S “else” S| “begin” S L| “print” E.

L = “end”| “;” S L.

E = “num” “=” “num”

void S() { switch(lookahead) { case IF: match(IF); E(); match(THEN); S(); match(ELSE); S(); break; case BEGIN: matvh(BEGIN); S(); L(); break; case PRINT: match(PRINT); E(); break; default: error(); }}

void E() { match(NUM); match(EQ); match(NUM); }

void L() { switch(lookahead) { case END: match(END); break; case SEMI: match(SEMI); S(); L(); break; default: error(); }}

Page 43: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4343

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση προβλέπουσας αναδρομικής κατάβασης Χ

Άλλο παράδειγμα (συνέχεια)

πρόταση: if 2=2 then print 5=5 else print 1=1

main: κλήση S();

S1: εφαρμογή της παραγωγής (S, IF) : Sif E then S else S

S1: match(IF);

S1: κλήση E();

E1: εφαρμογή της παραγωγής για (E, NUM): Enum = num

E1: match(NUM); match(EQ); match(NUM);

E1: return για E1 στο S1

S1: match(THEN);

S1:κλήση S();

S2: εφαρμογή της παραγωγής για (S, PRINT): Sprint E

S2: match(PRINT);

S2: κλήση E();

E2: εφαρμογή της παραγωγής για (E, NUM): Enum = num

E2: match(NUM); match(EQ); match(NUM);

E2: return για E2 στο S2

S2: return για S2 στο S1

S1: match(ELSE);

S1: κλήση S();

S3: εφαρμογή της παραγωγής για (S, PRINT): Sprint E

S3: match(PRINT);

S3: κλήση E();

E3: εφαρμογή της παραγωγής για (E, NUM): Enum = num

E3: match(NUM); match(EQ); match(NUM);

E3: return για E2 στο S3

S3: return για S3 στο S1

S1: return για S1 στο mainmain: match(EOF); return success;

Page 44: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4444

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση προβλέπουσας αναδρομικής κατάβασης ΧΙ

Γενική μορφή διαδικασιών προβλέπουσας αναδρομικής κατάβασης

Αν για το μη τερματικό σύμβολο Χ ορίζεται στη γραμματική ο κανόνας

και αν υποθέσουμε ότι η είναι απαλείψιμη, τότεΧ:Επέλεξε ΛΕΞ_ΜΟΝ

περιπτώσεις FIRST( ):διαδικασίες αναγνώρισης

περιπτώσεις FIRST( ):διαδικασίες αναγνώρισης

....περιπτώσεις FIRST( ) FOLLOW(X):

διαδικασίες αναγνώρισης ή των συμβόλων που ακολουθούν

αλλιώςλάθος;

Τέλος Χ.

...|2|1X pp

ip

1p

2p

ip

1p

2p

ip

Page 45: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4545

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση προβλέπουσας αναδρομικής κατάβασης ΧΙΙ

ΣΥΝΟΛΑ FIRST ΓΙΑ ΣΥΜΒΟΛΑ ΓΡΑΜΜΑΤΙΚΗΣ

Για μία σειρά συμβόλων της γραμματικής ορίζουμε FIRST() ως το σύνολο των αναγνωριστικών που εμφανίζονται στην αρχή των συμβολοσειρών που παράγονται από την

Για να υπολογίσετε το FIRST(X) για ένα σύμβολο X, εφαρμόζετε τους επόμενους κανόνες μέχρι όταν δεν προστίθενται πλέον στο FIRST(X) νέα σύμβολα

Αν το X είναι τερματικό, τότε FIRST(X) είναι το {X}

Αν υπάρχει παραγωγή X τότε το περιλαμβάνεται στο FIRST(X)

Αν το X είναι μη τερματικό και X Y1Y2 ... Yk είναι μια παραγωγή, τότε

συμπεριλαμβάνουμε στο FIRST(X) κάθε στοιχείο του FIRST(Y1) εκτός από το Αν το X είναι μη τερματικό και X Y1Y2 ... Yk είναι μια παραγωγή, τότε

συμπεριλαμβάνουμε το τερματικό a στο FIRST(X) αν το a είναι στο FIRST(Yi) και

είναι στα FIRST(Yj) για όλα τα 1 j i

Αν X είναι ένα μη τερματικό και X Y1Y2 ... Yk μια παραγωγή, τότε

συμπεριλαμβάνουμε το στο FIRST(X) αν το είναι στα FIRST(Yi) για όλα 1 i k

Page 46: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4646

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση προβλέπουσας αναδρομικής κατάβασης ΧΙΙΙ

ΣΥΝΟΛΑ FIRST ΓΙΑ ΣΕΙΡΕΣ ΣΥΜΒΟΛΩΝ ΤΗΣ ΓΡΑΜΜΑΤΙΚΗΣ

Για να υπολογίσουμε το σύνολο FIRST για μία σειρά X1X2 ... Xn συμβόλων της γραμματικής (εφόσον έχουμε υπολογίσει τα σύνολα FIRST για τα X1, Χ2 , ... , Xn) εφαρμόζουμε τα ακόλουθα:

Το FIRST(X1X2 ... Xn) θα περιλαμβάνει: Όλα τα σύμβολα του FIRST(X1) εκτός από το Όλα τα σύμβολα του FIRST(Xi) εκτός από το , αν το

είναι στα FIRST(Xj) για όλα τα 1 j i και το , αν είναι στα FIRST(Xi) για όλα τα 1 i n

Page 47: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4747

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση προβλέπουσας αναδρομικής κατάβασης ΧΙV

ΠΑΡΑΔΕΙΓΜΑ ΥΠΟΛΟΓΙΣΜΟΥ ΣΥΝΟΛΩΝ FIRSTS = έκφραση.έκφραση = όρος υπ_όροι.υπ_όροι = “+” όρος υπ_όροι

| “-” όρος υπ_όροι | ε.

όρος = παράγοντας υπ_παραγ.υπ_παραγ = “*” παράγοντας υπ_παραγ

| “/” παράγοντας υπ_παραγ | ε.

παράγοντας = “(”έκφραση “)” | “αριθμός”.

Σύμβολα FIRST Σύμβολα FIRST Συμβ/ρές FIRSTS {“(”, “αριθμός”} παράγοντας {“(”, “αριθμός”} “+” όρος υπ_όροι {“+”}έκφραση {“(”, “αριθμός”} αριθμός {“αριθμός”} “-” όρος υπ_όροι {“-”}

υπ_όροι { , “+”, “-” } “+” {“+”} “*” παράγοντας υπ_παραγ {“*”} όρος {“(”, “αριθμός”} “-” {“-”} “/” παράγοντας υπ_παραγ {“/”}

υπ_παραγ { , “*”, “/” } “*” {“*”}“/” {“/”}“(” {“(”}

Page 48: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4848

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση προβλέπουσας αναδρομικής κατάβασης ΧV

ΣΥΝΟΛΑ FOLLOW ΓΙΑ MH ΤΕΡΜΑΤΙΚΑ ΣΥΜΒΟΛΑ ΓΡΑΜΜΑΤΙΚΗΣ

Για ένα μη τερματικό σύμβολο A ορίζουμε το FOLLOW(A) ως το σύνολο των τερματικών που μπορούν να εμφανισθούν δεξιά του A σε κάποια προτασιακή μορφή

Για τον υπολογισμό των FOLLOW(A) για ένα μη τερματικό A εφαρμόζουμε τους κανόνες που ακολουθούν μέχρι όταν δεν προστίθενται πλέον νέα σύμβολα στο FOLLOW(A)

Εισάγουμε το $ στο FOLLOW(S) ($ είναι το τέλος συμβολοσειράς, S είναι η αρχή της γραμματικής)

Αν υπάρχει παραγωγή A B , τότε περιλαμβάνουμε στο FOLLOW(B) όλα τα σύμβολα του FIRST() εκτός του

Αν υπάρχει παραγωγή A B, τότε περιλαμβάνουμε στο FOLLOW(B) όλα τα σύμβολα του FOLLOW(A)

Αν υπάρχει παραγωγή A B , και το είναι στο FIRST() τότε περιλαμβάνουμε στο FOLLOW(B) όλα τα σύμβολα του FOLLOW(A)

Page 49: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 4949

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση προβλέπουσας αναδρομικής κατάβασης ΧVΙ

Παραδείγματα FOLLOW (γραμματική αριθμητικών εκφράσεων)

})"",{έκφραση $)FOLLOW(

)FOLLOW()FOLLOW( έκφρασηυπ_όροι

})"",$,"","{}{ "έκφρασηυπ_όροιόρος )FOLLOW()FIRST()FOLLOW(

})"",$,"","{" )FOLLOW()FOLLOW( όροςυπ_παραγ

Page 50: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 5050

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση προβλέπουσας αναδρομικής κατάβασης ΧVΙΙ

Δεν μπορούν να χρησιμοποιηθούν αριστερά αναδρομικές γραμματικές.

Δεν μπορούν να χρησιμοποιηθούν γραμματικές, που δεν είναι LL(1), όπως π.χ.:

σειρά_εντολών = εντολή “;” σειρά_εντολών | εντολή.

εντολή = “τερματικό”.

Page 51: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 5151

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση LL(1) I

Σ υ μ β ολοσ ειρά ε ισ όδ ου

Α λγόρ ιθμ ος

κ εφ α λήα νά γνω σ η ς

" k"

Y

X

σ το ίβ α(σ ύ μ β ολα π ου εκ κ ρεμ εί

η α να γνώ ρ ισ ή του ς)

Π ίνα κ α ςα νά λυ σ η ςM [X , α ]

Page 52: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 5252

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση LL(1) II

Αλγόριθμος υπολογισμού πίνακα ανάλυσης Μ

Για όλες τις παραγωγές A , εφάρμοσε τα εξής βήματα: Για κάθε τερματικό a στο FIRST(), θέσε A στη

θέση M[A, a] Αν το περιλαμβάνεται στο FIRST(), θέσε A

στις θέσεις M[A, b] για κάθε τερματικό b του FOLLOW(A) και θέσε A στη θέση M[A, $] αν το $ περιλαμβάνεται στο FOLLOW(A)

Όλες οι υπόλοιπες θέσεις του πίνακα M εκφράζουν την αναγνώριση λάθους.

Page 53: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 5353

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση LL(1) IIΙΠΑΡΑΔΕΙΓΜΑ (γραμματική αριθμητικών εκφράσεων)

M “αριθμός” “+” “-” “*” “/” “(” “)” $ έκφραση όρος υπ_όροι όρος υπ_όροι υπ_όροι “+” όρος υπ_όροι “-” όρος υπ_όροι ε ε όρος παράγοντας

υπ_παραγ παράγοντας

υπ_παραγ

υπ_παραγ ε ε “*” παράγοντας υπ_παραγ

“/” παράγοντας υπ_παραγ

ε ε

παράγοντας “αριθμός” “(” έκφραση “)”

S = έκφραση.έκφραση = όρος υπ_όροι.υπ_όροι = “+” όρος υπ_όροι

| “-” όρος υπ_όροι | ε.

όρος = παράγοντας υπ_παραγ.υπ_παραγ = “*” παράγοντας υπ_παραγ

| “/” παράγοντας υπ_παραγ | ε.

παράγοντας = “(”έκφραση “)” | “αριθμός”.

Page 54: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 5454

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση LL(1) IV

LL(1) ανάλυση της συμβολοσειράς εισόδου 27-5*8 ΣΤΟΙΒΑ ΣΥΜΒΟΛ. ΠΑΡΑΓΩΓΗ $ έκφραση 27-5*8$ $ υπ_όροι όρος 27-5*8$ έκφραση = όρος υπ_όροι. $ υπ_όροι υπ_παραγ. παράγοντας 27-5*8$ όρος = παράγοντας υπ_παραγ. $ υπ_όροι υπ_παραγ. “αριθμός” 27-5*8$ παράγοντας = “αριθμός”. $ υπ_όροι υπ_παραγ. -5*8$ $ υπ_όροι -5*8$ υπ_παραγ. = ε. $ υπ_όροι όρος “-” -5*8$ υπ_όροι = “-” όρος υπ_όροι. $ υπ_όροι όρος 5*8$ $ υπ_όροι υπ_παραγ. παράγοντας 5*8$ όρος = παράγοντας υπ_παραγ. $ υπ_όροι υπ_παραγ. “αριθμός” 5*8$ παράγοντας = “αριθμός”. $ υπ_όροι υπ_παραγ. *8$ $ υπ_όροι υπ_παραγ. παράγοντας “*” *8$ υπ_παραγ. = “*” παράγοντας υπ_παραγ. $ υπ_όροι υπ_παραγ. παράγοντας 8$ $ υπ_όροι υπ_παραγ. “αριθμός” 8$ παράγοντας = “αριθμός”. $ υπ_όροι υπ_παραγ. $ $ υπ_όροι $ υπ_παραγ. = ε. $ $ υπ_όροι. = ε.

ΠΑΡΑΔΕΙΓΜΑ (γραμματική αριθμητικών εκφράσεων - συνέχεια)

Page 55: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 5555

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση LL(1) VΑλγόριθμος ανάλυσης LL(1)

push($); // $ είναι το σύμβολο τέλους της συμβολοσειράςpush(S); // S είναι η αρχή της γραμματικήςlookahead = get_next_token(); // διάβασε το επόμενο αναγνωριστικόrepeat X = top_of_stack(); if (X είναι τερματικό ή X = = $) then if (X = = lookahead) then pop(X); lookahead = get_next_token(); else error(); else // X ένα μη τερματικό if ( M[X, lookahead] = = X Y1 Y2 ... Yk) then pop(X); push(Yk); push(Yk-1); ... push(Y1); else error();until (X = $)

Page 56: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 5656

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Απομάκρυνση αριστερής αναδρομικότητας Ι

Διακρίνουμε την άμεση και την έμμεση αριστερή αναδρομικότητα

ΠΑΡΑΔΕΙΓΜΑ ΑΜΕΣΗΣ ΑΡ. ΑΝΑΔΡΟΜΙΚΟΤΗΤΑΣ:έκφραση = έκφραση ΤΛ_ΑΘ όρος | όρος.ΠΑΡΑΔΕΙΓΜΑ ΕΜΜΕΣΗΣ ΑΡ. ΑΝΑΔΡΟΜΙΚΟΤΗΤΑΣ:

ΓΕΝΙΚΗ ΜΟΡΦΗ ΑΜΕΣΗΣ ΑΡ. ΑΝΑΔΡΟΜΙΚΟΤΗΤΑΣ:

μετασχηματίζεται στην ισοδύναμη μορφή

......|2pYX

......|1pXY

mn qqqpXpXpXX |...||||...|| 2121

'.|...|'|' 21 XqXqXqX m

.|'|...|'|'' 21 XpXpXpX n

Page 57: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 5757

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Απομάκρυνση αριστερής αναδρομικότητας ΙΙ

ΠΑΡΑΔΕΙΓΜΑΗ S = έκφραση.

έκφραση = έκφραση “+” όρος | έκφραση “-” όρος | όρος.όρος = όρος “*” παράγοντας | όρος “/” παράγοντας | παράγοντας.παράγοντας = “(” έκφραση “)” | “αριθμός”.

μετασχηματίστηκε στηνS = έκφραση.έκφραση = όρος υπ_όροι.υπ_όροι = “+” όρος υπ_όροι | “-” όρος υπ_όροι | ε.όρος = παράγοντας υπ_παραγ.υπ_παραγ = “*” παράγοντας υπ_παραγ | “/” παράγοντας

υπ_παραγ | ε.παράγοντας = “(”έκφραση “)” | “αριθμός”.

Page 58: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 5858

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Απομάκρυνση αριστερής αναδρομικότητας ΙΙΙ

Αλγόριθμος απομάκρυνσης άμεσης και έμμεσης αριστερής αναδρομικότηταςΕίσοδος: Μία γραμματική G χωρίς κυκλικούς κανόνες παραγωγής και κανόνες-ε Έξοδος: Μία ισοδύναμη γραμματική χωρίς αριστερή αναδρομικότητα Περιγραφή: Θεωρούμε τα μη τερματικά σύμβολα nXXX ,...,, 21 , με το δείκτη του καθενός να

αντιστοιχεί στη σειρά με την οποία κάνει την εμφάνισή του ο αντίστοιχος κανόνας στη γραμματική.

Για (i:=1 μέχρι n) επανέλαβε Για (j:=1 μέχρι i-1) επανέλαβε αντικατέστησε κάθε κανόνα της μορφής qXX ji με τους κανόνες

qpqpqpX ki |...|| 21 , για τις υπάρχουσες παραγωγές kj pppX |...|| 21

Τέλος επανάληψης

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

Τέλος επανάληψης

Page 59: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 5959

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Απομάκρυνση αριστερής αναδρομικότητας ΙV

Κατά την απομάκρυνση της αριστερής αναδρομικότητας δεν αλλάζει η γλώσσα της γραμματικής.

Αλλάζει η μορφή των δένδρων που παράγει η επιλεγείσα μέθοδος ανάλυσης.

Σημαντικότερη συνέπεια είναι το γεγονός ότι χάνεται η επιθυμητή ιδιότητα της αριστερής προσεταιριστικότητας.

Page 60: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 6060

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

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

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

κανόνες με το ίδιο πρόθεμα στο δεξί μέρος. ΠΑΡΑΔΕΙΓΜΑΤΑσειρά_εντολών = εντολή “;” σειρά_εντολών | εντολή.εντολή = “τερματικό”.ήεντολή_if = “if” έκφραση “then” εντολή

| “if” έκφραση “then” εντολή “else” εντολή.

Page 61: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 6161

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Αριστερή παραγοντοποίηση ΙΙΓενικά, ο κανόνας

μετασχηματίζεται στον."|""" 21 pypyX

'."" XyX .|' 21 ppX

Ε ί σ ο δ ο ς : Μ ί α γ ρ α μ μ α τ ι κ ή G Έ ξ ο δ ο ς : Μ ί α ι σ ο δ ύ ν α μ η γ ρ α μ μ α τ ι κ ή L L ( 1 )

Π ε ρ ι γ ρ α φ ή : Γ ι α ( κ ά θ ε μ η τ ε ρ μ α τ ι κ ό σ ύ μ β ο λ ο X ) ε π α ν έ λ α β ε σ υ μ β ο λ ί ζ ο υ μ ε μ ε p τ ο μ ε γ α λ ύ τ ε ρ ο κ ο ι ν ό π ρ ό θ ε μ α μ ε τ α ξ ύ δ ύ ο ή π ε ρ ι σ σ ό τ ε ρ ω ν ε ν α λ λ α κ τ ι κ ώ ν π ε ρ ι π τ ώ σ ε ω ν π α ρ α γ ω γ ή ς τ ο υ X α ν ( p ) τ ό τ ε

Έ σ τ ω .|...|| 21 npppX ό λ ε ς ο ι π ι θ α ν έ ς π α ρ α γ ω γ έ ς γ ι α τ ο μ η τ ε ρ μ α τ ι κ ό

σ ύ μ β ο λ ο Χ κ α ι έ σ τ ω ό τ ι ο ι kppp ,...,, 21 μ ο ι ρ ά ζ ο ν τ α ι τ ο κ ο ι ν ό π ρ ό θ ε μ α p , ώ σ τ ε

σ τ ι ς π ι θ α ν έ ς π α ρ α γ ω γ έ ς .|...|||...|| 121 nkk pppqpqpqX τ α kqqq ,...,, 21

δ ε μ ο ι ρ ά ζ ο ν τ α ι κ ά π ο ι ο κ ο ι ν ό π ρ ό θ ε μ α , ε ν ώ τ α nk ppp ,...,, 21 δ ε α ρ χ ί ζ ο υ ν α π ό p .

Α ν τ ι κ α θ ι σ τ ο ύ μ ε κ ά θ ε τ έ τ ο ι ο κ α ν ό ν α μ ε δ ύ ο κ α ν ό ν ε ς τ η ς μ ο ρ φ ή ς .|...||' 1 nk pppXX

.|...|' 1 kqqX

τ έ λ ο ς α ν Τ έ λ ο ς ε π α ν ά λ η ψ η ς

Page 62: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 6262

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανοδική ανάλυση – Γενικά Ι Η συμβολοσειρά εισόδου σταδιακά απλοποιείται στο

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

Η αντιστροφή της απλοποίησης που εκτελεί μία διαδικασία ανοδικής ανάλυσης είναι μία παραγωγή δεξιών προτασιακών μορφών.

Το δένδρο «αναπτύσσεται» βήμα προς βήμα, από αριστερά προς τα δεξιά και από τα φύλλα προς τη ρίζα.

Κάθε διαδικασία ανοδικής ανάλυσης συντονίζει την εκτέλεση ενεργειών ώθησης (στη στοίβα), απλοποίησης και αποδοχής.

Page 63: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 6363

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανοδική ανάλυση – Γενικά ΙΙ Ενέργεια ώθησης

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

Ενέργεια απλοποίησηςΣε μία ενέργεια απλοποίησης με βάση ένα συγκεκριμένο κανόνα

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

npppX ...21

Page 64: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 6464

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανοδική ανάλυση ώθησης – απλοποίησης ΙS = έκφραση.έκφραση = έκφραση “+” “αριθμός” | “αριθμός”.

Ανοδική ανάλυση της συμβολοσειράς 27+5 ΣΤΟΙΒΑ ΣΥΜΒΟΛΟΣΕΙΡΑ ΕΝΕΡΓΕΙΑ $ 27+5$ ώθηση $ “αριθμός” +5$ απλοποίηση κατά έκφραση = “αριθμός”. $ έκφραση +5$ ώθηση $ έκφραση “+” 5$ ώθηση $ έκφραση “+” “αριθμός” $ απλοποίηση κατά έκφραση = έκφραση “+”

“αριθμός”. $ έκφραση $ απλοποίηση κατά S = έκφραση. $ S $ αποδοχή

Αρχή: Προτασιακή μορφή: Κανόνας: (1) S

rm έκφραση [έκφραση = έκφραση “+” “αριθμός”]

(2) rm έκφραση + αριθμός [έκφραση = “αριθμός”]

(3) rm αριθμός + αριθμός

Page 65: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 6565

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανοδική ανάλυση ώθησης – απλοποίησης ΙΙ

αριθμός

έκ φ ρ α σ η

αριθμός

έκφραση

αριθμός

+

(α) (β) (γ)

έκφραση

αριθμός

+ αριθμός

έκφραση

αριθμός

+ αριθμός

έκφραση

(δ) (ε)

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

Page 66: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 6666

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανοδική ανάλυση ώθησης – απλοποίησης ΙΙΙ Το ζωτικό πρόθεμα μιας οποιασδήποτε δεξιάς

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

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

ΠΑΡΑΔΕΙΓΜΑ

Ζωτικό πρόθεμα της δεξιάς προτασιακής μορφής αριθμός + αριθμός: - στο 1ο βήμα της ανάλυσης είναι το ε - στο 2ο βήμα της ανάλυσης είναι το αριθμός

Σε καμία περίπτωση δεν αποτελεί ζωτικό πρόθεμα το αριθμός +. Λαβή απλοποίησης αποτελεί το αριθμός.

Ζωτικό πρόθεμα της δεξιάς προτασιακής μορφής έκφραση + αριθμός: - στο 3ο βήμα της ανάλυσης είναι το έκφραση - στο 4ο βήμα της ανάλυσης είναι το έκφραση + - στο 5ο βήμα της ανάλυσης είναι το έκφραση + αριθμός

Λαβή απλοποίησης αποτελεί το έκφραση + αριθμός.

Page 67: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 6767

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανοδική ανάλυση ώθησης – απλοποίησης ΙV

Διαδικασίες ώθησης – απλοποίησης- ανάλυση προτεραιότητας τελεστών- ανάλυση απλής προήγησης- ανάλυση LR (η πιο σημαντική)

Οι γλώσσες LR είναι προσδιοριστικές (δηλ. υπάρχει αυτόματο στοίβας που τις αναγνωρίζει με προσδιοριστικό τρόπο).

Οι τεχνικές ανάλυσης LR, που χρησιμοποιούμε, δεν αναγνωρίζουν τις προτάσεις της γλώσσας με προσδιοριστικό τρόπο σε όλες τις περιπτώσεις. Πιθανά προβλήματα: Σύγκρουση ώθησης – απλοποίησης (πρόβλημα μετέωρου

else). Σύγκρουση απλοποίησης – απλοποίησης.

Page 68: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 6868

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση LR I

Η οικογένεια των γραμματικών LR είναι ένα υπερσύνολο των γραμματικών, που αναλύονται με χρήση της τεχνικής LL(1). Πλεονεκτήματα:

Άμεσος εντοπισμός λαθών.

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

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

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

Page 69: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 6969

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση LR IΙ

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

Ο αριθμός αυτός ονομάζεται κατάσταση και ειδικά η κατάσταση της ρίζας του δένδρου που βρίσκεται στα δεξιά του δάσους ονομάζεται τρέχουσα κατάσταση.

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

Οι ενέργειες ενός αναλυτή LR εξαρτώνται από την εκάστοτε τρέχουσα κατάστασή του.

Page 70: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 7070

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση LR IΙΙ

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

Σε ενέργεια απλοποίησης, δημιουργείται ένας νέος κόμβος για το μη τερματικό σύμβολο στο οποίο αναφέρεται ο κανόνας και συνδέονται σ΄ αυτόν ως απόγονοι, οι n πιο δεξιές ρίζες του δάσους, που αντιστοιχούν στα σύμβολα του δεξιού μέρους του κανόνα. Τότε διαγράφονται οι καταστάσεις που συνοδεύουν τις n ρίζες. Η κατάσταση που επισυνάπτεται στη νέα ρίζα, καθορίζεται με βάση την κατάσταση της ρίζας, που βρίσκεται αμέσως πιο αριστερά και το μη τερματικό σύμβολο του νέου κόμβου.

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

Page 71: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 7171

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση LR IV

Πίνακας ενεργειών LR(1) ανάλυσης της γραμματικής του προηγούμενου παραδείγματος

ΚΑΤΑΣΤΑΣΕΙΣ ΤΕΡΜΑΤΙΚΑ ΣΥΜΒΟΛΑ ΕΙΣΟΔΟΥ “αριθμός” “+” $ κατάσταση 0 ώθηση κατάσταση 1 ώθηση αποδοχή κατάσταση 2 απλοποίηση

(έκφραση = “αριθμός”) απλοποίηση

(έκφραση = “αριθμός”) κατάσταση 3 ώθηση κατάσταση 4 απλοποίηση

(έκφραση = έκφραση “+” “αριθμός”) απλοποίηση

(έκφραση = έκφραση “+” “αριθμός”)

Πίνακας μεταβάσεων LR(1) ανάλυσης της γραμματικής του παραδείγματος

ΚΑΤΑΣΤΑΣΕΙΣ ΚΑΤΑΣΤΑΣΗ ΝΕΑΣ ΡΙΖΑΣ έκφραση “αριθμός” “+” κατάσταση 0 κατάσταση 1 κατάσταση 2 κατάσταση 1 κατάσταση 3 κατάσταση 2 κατάσταση 3 κατάσταση 4 κατάσταση 4

Page 72: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 7272

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση LR V

(2)αριθμός

(0)

(1 )έκφραση

αριθμός(0)

(1)έκφραση

αριθμός

(3)+

(0)

(α) (β) (γ)

(1)έκφραση

αριθμός

(3)+

(4)αριθμός

(0)

έκφραση

αριθμός

+ αριθμός

(1)έκφραση

(0)

έκφραση

αριθμός

+ αριθμός

(1)έκφραση

(0)επόμενη ενέργεια:

αποδοχή

(δ) (ε) (στ)

Ανάπτυξη δένδρου της έκφρασης 27+5 με ανάλυση LR(1)

Page 73: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 7373

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση LR VIΠΑΡΑΔΕΙΓΜΑ

(1) έκφραση = έκφραση “+” όρος.(2) έκφραση = έκφραση “-” όρος.(3) έκφραση = όρος.(4) όρος = όρος “*” παράγοντας.(5) όρος = όρος “/” παράγοντας.(6) όρος = παράγοντας.(7) παράγοντας = “(” έκφραση “)”.(8) παράγοντας = “αριθμός”.

Πίνακας ενεργειών για τη γραμματική αριθμητικών εκφράσεων “αριθμός” “+” “-” “*” “/” “(” “)” $ κατάσταση 0 ώθηση ώθηση κατάσταση 1 ώθηση ώθηση αποδοχή κατάσταση 2 απλοπ (3) απλοπ (3) ώθηση ώθηση απλοπ (3) απλοπ (3) κατάσταση 3 απλοπ (6) απλοπ (6) απλοπ (6) απλοπ (6) απλοπ (6) απλοπ (6) κατάσταση 4 ώθηση ώθηση κατάσταση 5 απλοπ (8) απλοπ (8) απλοπ (8) απλοπ (8) απλοπ (8) απλοπ (8) κατάσταση 6 ώθηση ώθηση κατάσταση 7 ώθηση ώθηση κατάσταση 8 ώθηση ώθηση κατάσταση 9 ώθηση ώθηση κατάσταση 10 ώθηση ώθηση ώθηση κατάσταση 11 απλοπ (1) απλοπ (1) ώθηση ώθηση απλοπ (1) απλοπ (1) κατάσταση 12 απλοπ (2) απλοπ (2) ώθηση ώθηση απλοπ (2) απλοπ (2) κατάσταση 13 απλοπ (4) απλοπ (4) απλοπ (4) απλοπ (4) απλοπ (4) απλοπ (4) κατάσταση 14 απλοπ (5) απλοπ (5) απλοπ (5) απλοπ (5) απλοπ (5) απλοπ (5) κατάσταση 15 απλοπ (7) απλοπ (7) απλοπ (7) απλοπ (7) απλοπ (7) απλοπ (7)

Page 74: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 7474

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση LR VIΙ

Πίνακας μεταβάσεων για τη γραμματική αριθμητικών εκφράσεων

“αριθμός” “+” “-” “*” “/” “(” “)” έκφραση όρος παράγοντας κατάσταση 0 5 4 1 2 3 κατάσταση 1 6 7 κατάσταση 2 8 9 κατάσταση 3 κατάσταση 4 5 4 10 2 3 κατάσταση 5 κατάσταση 6 5 4 11 3 κατάσταση 7 5 4 12 3 κατάσταση 8 5 4 13 κατάσταση 9 5 4 14 κατάσταση 10 6 7 15 κατάσταση 11 8 9 κατάσταση 12 8 9 κατάσταση 13 κατάσταση 14 κατάσταση 15

Page 75: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 7575

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση LR VIΙΙ

LR(1) ανάλυση της συμβολοσειράς (27-5)*8

ΣΤΟΙΒΑ ΣΥΜΒΟΛΟΣΕΙΡΑ ΕΝΕΡΓΕΙΑ $0 (27-5)*8$ ώθηση $0 “(”4 27-5)*8$ ώθηση $0 “(”4 “αριθμός”5 -5)*8$ απλοποίηση κατά (8) $0 “(”4 παράγοντας3 -5)*8$ απλοποίηση κατά (6) $0 “(”4 όρος2 -5)*8$ απλοποίηση κατά (3) $0 “(”4 έκφραση10 -5)*8$ ώθηση $0 “(”4 έκφραση10 “-”7 5)*8$ ώθηση $0 “(”4 έκφραση10 “-”7 “αριθμός”5 )*8$ απλοποίηση κατά (8) $0“(”4 έκφραση10 “-”7 παράγοντας3 )*8$ απλοποίηση κατά (6) $0 “(”4 έκφραση10 “-”7 όρος12 )*8$ απλοποίηση κατά (2) $0 “(”4 έκφραση10 )*8$ ώθηση $0 “(”4 έκφραση10 “)”15 *8$ απλοποίηση κατά (7) $0 παράγοντας3 *8$ απλοποίηση κατά (6) $0 όρος2 *8$ ώθηση $0 όρος2 “*”8 8$ ώθηση $0 όρος2 “*”8 “αριθμός”5 $ απλοποίηση κατά (8) $0 όρος2 “*”8 παράγοντας13 $ απλοποίηση κατά (4) $0 όρος2 $ απλοποίηση κατά (3) $0 έκφραση1 $ αποδοχή

Page 76: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 7676

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάλυση LR ΙΧ

Αρχή: Προτασιακή μορφή: Κανόνας: S

rm έκφραση [έκφραση = όρος]

rm όρος [όρος = όρος “*” παράγοντας]

rm όρος * παράγοντας [παράγοντας = “αριθμός”]

rm όρος * αριθμός [όρος = παράγοντας]

rm παράγοντας * αριθμός [παράγοντας = “(” έκφραση “)”]

rm ( έκφραση ) * αριθμός [έκφραση = έκφραση “-” όρος]

rm ( έκφραση - όρος ) * αριθμός [όρος = παράγοντας]

rm ( έκφραση - παράγοντας) * αριθμός [παράγοντας = “αριθμός”]

rm ( έκφραση - αριθμός) * αριθμός [έκφραση = όρος]

rm ( όρος - αριθμός) * αριθμός [όρος = παράγοντας]

rm ( παράγοντας - αριθμός) * αριθμός [παράγοντας = “αριθμός”]

rm (αριθμός - αριθμός) * αριθμός

Page 77: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 7777

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Αναλυτής LR ώθησης - απλοποίησης Ι

Σ υ μ β ο λ ο σ ε ιρ ά ε ισ ό δ ο υ

Α λ γ ό ρ ιθ μ ο ςα ν ά λ υ σ η ς L R

κ εφ α λ ήα ν ά γ ν ω σ η ς

4

Y

9

σ το ίβ α (σ ύ μ β ο λ α ζω τ ικ ο ύπ ρ ο θ έμ α το ς κ α ι κ α τα σ τά σ ε ις )

Π ίν α κ α ςεν ερ γ ε ιώ ν

Π ίν α κ α ςμ ετα β ά σ εω ν

Page 78: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 7878

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Αναλυτής LR ώθησης - απλοποίησης ΙI

push($); // $ το σύμβολο τέλους συμβολοσειράςpush(s0); // s0 η αρχική κατάστασηlookahead = get_next_token();repeat forever s = top_of_stack(); // ACTION είναι ο πίνακας ενεργειών if ( ACTION[s,lookahead] = = απλοποίηση ) then pop 2*|| σύμβολα; //αφαιρούνται τα σύμβολα & οι καταστάσεις s = top_of_stack(); push(); push(GOTO[s,]); // GOTO είναι ο πίνακας μεταβάσεων else if ( ACTION[s,lookahead] = = ώθηση si ) then push(lookahead); push(si); lookahead = get_next_token(); else if ( ACTION[s,lookahead] = = αποδοχή and lookahead = = $ ) then return (επιτυχής αναγνώριση); else error();

Page 79: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 7979

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Αναλυτής LR ώθησης - απλοποίησης ΙIΙΜια γραμματική είναι LR(k) αν, δοθείσης μιας δεξιάς παραγωγής

S 0 1 2 … n-1 n πρόταση

μπορούμε: 1. Να αναγνωρίσουμε μια λαβή απλοποίησης για κάθε δεξιά προτασιακή μορφή i , και

2. Να καθορίσουμε τον κανόνα της απλοποίησης

με την ανάγνωση της i από αριστερά προς τα δεξιά, προχωρώντας το πολύ k σύμβολα πιο δεξιά από το τέλος της λαβής απλοποίησης της i .

Page 80: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 8080

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Αναλυτής LR ώθησης - απλοποίησης ΙV Αν μία γραμματική είναι LR(?) υπάρχει μία και μόνο μία δεξιά

παραγωγή της κάθε πρότασης Στο πάνω μέρος της στοίβας είτε

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

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

Η γλώσσα των λαβών απλοποίησης είναι κανονική και άρα μπορεί να κατασκευασθεί ένα προσδιοριστικό πεπερασμένο

αυτόματο που να εκτελεί αναγνώριση λαβών απλοποίησης οι πίνακες ενεργειών και μετάβασης ουσιαστικά εκφράζουν το

συγκεκριμένο αυτόματο Κάθε νέα κατάσταση του αυτόματου την εισάγουμε στη στοίβα Οι τελικές καταστάσεις του αυτόματου αντιστοιχούν σε ενέργειες

απλοποίησης νέα κατάσταση είναι η GOTO[αριστερό σύμβολο κανόνα ,

κατάσταση κορυφής]

Page 81: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 8181

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Αναλυτής LR ώθησης - απλοποίησης VΠως φτιάχνουμε τους πίνακες ενεργειών & μεταβάσεων;

Λεξικός αναλυτής

Αναλυτής

Πίνακες Ενεργειών & Μεταβάσεων

Γεννήτρια αναλυτή (yacc)

πηγαίος κώδικας

γραμματική

Ενδιάμεση Αναπαράστασ

η

Στοίβα

Page 82: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 8282

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Αναλυτής LR ώθησης - απλοποίησης VΙΠως φτιάχνουμε τους πίνακες ενεργειών & μεταβάσεων (χωρίς το yacc);

κατασκευάζουμε από τη γραμματική το αυτόματο αναγνώρισης λαβών απλοποίησης

ορίζουμε τους πίνακες ενεργειών & μεταβάσεων αν η κατασκευή του αυτομάτου πετύχει τότε η γραμματική

είναι γραμματική LR(?) αλλιώς είναι πιθανό να προκύψουν συγκρούσεις ώθησης –

απλοποίησης ή συγκρούσεις απλοποίησης – απλοποίησης τότε ή θα πρέπει να εφαρμοσθεί μία άλλη κατασκευή LR(?) ή

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

οι αναλυτές του byacc όταν έχουμε σύγκρουση ώθησης – απλοποίησης εκτελούν κάθε φορά την ώθηση

Page 83: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 8383

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Αναλυτής LR ώθησης - απλοποίησης VΙΙΠως φτιάχνουμε το αυτόματο αναγνώρισης λαβών απλοποίησης (χωρίς το yacc);

χρησιμοποιούμε στοιχεία LR(k) για να κωδικοποιήσουμε το σύνολο των κανόνων που μπορεί το δεξί τους μέρος να αποτελέσει λαβή απλοποίησης σε μία δεδομένη κατάσταση

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

καταγράφουμε τις καταστάσεις και τις μεταβάσεις του αυτόματου

συμπληρώνουμε τους πίνακες ενεργειών & μεταβάσεων

Page 84: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 8484

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Αναλυτής LR ώθησης - απλοποίησης VΙΙΙΣτοιχείο LR(k) είναι ένα ζεύγος [A , B], όπου

A είναι μία παραγωγή με μία • κάπου στο δεξί μέροςB σύμβολα εισόδου με μήκος ≤ k (τερματικά ή $)

Παραδείγματα:

[• , a]

[• , a]

[• , a]

[• , a]Η • δείχνει την τρέχουσα θέση που μπορούμε να θεωρήσουμε

ότι αναπαριστά η κορυφή της στοίβας στοιχεία LR(0) [ • ] (δεν υπάρχουν σύμβολα εισόδου) στοιχεία LR(1) [ • , a ] (ένα μόνο σύμβολο εισόδου) στοιχεία LR(2) [ • , a b ] (δύο σύμβολα εισόδου) ...

Page 85: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 8585

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Πίνακες ανάλυσης LR(1) IΗ παραγωγή , με σύμβολο εισόδου a, παράγει 4 στοιχεία LR(1)

[• , a], [• , a], [• , a], & [• , a]

Το σύνολο των LR(1) στοιχείων μιας γραμματικής είναι πεπερασμένο.

Ποια είναι η σημασία των συμβόλων εισόδου στα στοιχεία; τα καταγράφουμε έτσι ώστε να οδηγούμαστε στη σωστή

απλοποίηση αν η • βρίσκεται σε ενδιάμεση θέση σε ένα μόνο στοιχείο δεν παίζει

κάποιο ιδιαίτερο ρόλο π.χ. στο [• , a], το σύμβολο εισόδου δεν έχει ιδιαίτερη σημασία στο [• , a], το σύμβολο a οδηγεί στην απλοποίηση στο σύνολο { [• , a],[• , b] }

συμβόλο εισόδου = a απλοποίηση σε ;

σύμβολο εισόδου FIRST() ώθηση

σε μία LR(1) γραμματική ένα σύμβολο εισόδου είναι αρκετό για να καθορίσει την επόμενη ενέργεια

Page 86: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 8686

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Πίνακες ανάλυσης LR(1) II

Οι καταστάσεις του προσδιοριστικού αυτόματου αναγνώρισης λαβών απλοποίησης ορίζονται ως σύνολα στοιχείων, I0 , I1 , ... , In

a. Εισάγουμε ένα νέο σύμβολο S’ και μία παραγωγή S’ S όπου S η αρχή της γραμματικής

b. Η αρχική κατάσταση, I0 περιλαμβάνει τα στοιχεία [S’ •S, $] και όλα τα ισοδύναμα που δίνονται ως closure( I0 )

c. Για κάθε σύνολο Ik και κάθε σύμβολο , βρίσκουμε το goto(Ik , ) αν το σύνολο της goto(Ik , ) δεν έχει ήδη δημιουργηθεί τότε το

δημιουργούμε καταγράφουμε όλες τις μεταβάσεις goto( )

2 Συμπληρώνουμε τους πίνακες ενεργειών και μεταβάσεων της ανάλυσης

Page 87: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 8787

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Πίνακες ανάλυσης LR(1) IIΙΥΠΟΛΟΓΙΣΜΟΣ closure(I) Το closure(I) προσθέτει στο σύνολο I όλα τα στοιχεία που προκύπτουν από τα ήδη υπάρχοντα στο I

κάθε στοιχείο [ , a] δημιουργεί επίσης όλα τα [ , x] για κάθε παραγωγή με στα αριστερά και για όλα τα x FIRST(a)

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

while ( το σύνολο I μεγαλώνει ) for κάθε [ • , a] I for κάθε παραγωγή P for κάθε τερματικό b FIRST(a) if [ • , b] I then προσέθεσε το [ • , b] στο I

Page 88: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 8888

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Πίνακες ανάλυσης LR(1) IVΥΠΟΛΟΓΙΣΜΟΣ goto(I,x) Υπολογίζει τη νέα κατάσταση που ο αναλυτής προσεγγίζει αν αυτός βρίσκεται στην κατάσταση I και αναγνωρίζει το τερματικό x

goto( { [ , a] }, ) παράγει κατάσταση που περιλαμβάνει το [ , a]

αν δεν υπάρχει δημιουργείται και περιλαμβάνεται σε αυτή και το closure( [ , a] )

Goto( I, x ) new = Ø for κάθε [ • x , a] I new = new [ x • , a]

return closure(new)

Page 89: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 8989

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Πίνακες ανάλυσης LR(1) VΑΛΓΟΡΙΘΜΟΣ ΚΑΤΑΣΚΕΥΗΣ ΑΥΤΌΜΑΤΟΥΞεκινάμε από το I0 = closure( [S’ • S , $] )

Δημιουργούμε συνέχεια νέες καταστάσεις μέχρι τη στιγμή που δεν θα μπορεί να δημιουργηθούν άλλες

I0 = closure( [S’ • S , $] )C = { I0 }

while ( προστίθενται στο C νέα σύνολα στοιχείων ) for κάθε Ii C και κάθε x ( TNT ) Inew = goto(Ii , x) if Inew C then C = C Inew κατέγραψε τη μετάβαση Ii Inew με αναγνώριση του x

Page 90: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 9090

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Πίνακες ανάλυσης LR(1) VΙΑΛΓΟΡΙΘΜΟΙ ΚΑΤΑΣΚΕΥΗΣ ΠΙΝΑΚΩΝ LR(1)

Closure( I ) while ( το σύνολο I μεγαλώνει ) for κάθε [ • , a] I for κάθε παραγωγή P for κάθε τερματικό b FIRST(a) if [ • , b] I then προσέθεσε το [ • , b] στο I

Goto( I, x ) new = Ø for κάθε [ • x , a] I new = new [ x • , a]

return closure(new)

I0 = closure( [S’ • S , $] )C = { I0 }

while ( προστίθενται στο C νέα σύνολα στοιχείων ) for κάθε Ii C και κάθε x ( TNT ) Inew = goto(Ii , x) if Inew C then C = C Inew κατέγραψε τη μετάβαση Ii Inew με αναγνώριση του x

Page 91: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 9191

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Παράδειγμα ανάλυσης LR(1) Ι

S έκφρασηέκφραση όρος - έκφρασηέκφραση όροςόρος παράγοντας * όρος όρος παράγονταςπαράγοντας id

Σύμβολο FIRSTS { id }έκφραση { id}όρος { id }παράγοντας { id}- { - }* { * }id { id}

Page 92: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 9292

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Παράδειγμα ανάλυσης LR(1) ΙΙ

I0 = {[S •έκφραση ,\0], [έκφραση •όρος - έκφραση , \0], [έκφραση •όρος , \0], [όρος •παράγοντας * όρος , {\0,-}], [όρος •παράγοντας , {\0,-}], [παράγοντας • id ,{\0,-,*}]}

I5 = {[έκφραση όρος - •έκφραση, \0], [έκφραση •όρος - έκφραση, \0], [έκφραση •όρος, \0], [όρος •παράγοντας * όρος, {\0,-}], [όρος •παράγοντας, {\0,-}], [παραγοντας • id, {\0,-,*}] }

I8 = { [όρος παράγοντας * όρος •, {\0,-}] }

I1= {[S έκφραση •, \0]}

I2 = { [έκφραση όρος • - έκφραση , \0], [έκφραση όρος •, \0] }

I3 = {[όρος παράγοντας •* όρος , {\0,-}], [όρος παράγοντας •, {\0,-}]}

I4 = { [παράγοντας id •, {\0,-,*}] }

I6 ={[όρος παράγοντας * • όρος , {\0,-}], [όρος • παράγοντας * όρος , {\0,-}], [όρος • παράγοντας , {\0,-}], [παράγοντας • id , {\0, -, *}]}

I7 = { [έκφραση όρος - έκφραση •, \0] }

έκφραση

παράγονταςid

όρος

id

id

όρος

παράγοντας

*

-

παράγοντας

έκφραση

Page 93: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 9393

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Παράδειγμα ανάλυσης LR(1) ΙΙΙΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΩΝ

for κάθε σύνολο στοιχείων Ix C for κάθε στοιχείο Ix if στοιχείο είναι [ •a,b] και a T και goto(Ix,a) = Ik , then ACTION[x,a] “ώθηση k” else if στοιχείο είναι [S’S •,$] then ACTION[x ,$] “αποδοχή” else if στοιχείο είναι [ •,a] then ACTION[x,a] “απλοποίηση ”

for κάθε n NT if goto(Ix ,n) == Ik then GOTO[x,n] k

Page 94: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 9494

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Παράδειγμα ανάλυσης LR(1) ΙV

ΕΝΕΡΓΕΙΕΣ ΜΕΤΑΒΑΣΕΙΣ

id - * $ έκφραση όρος παράγοντας

0 ωθ 4 1 2 3

1 αποδ

2 ωθ 5 απ 3

3 απ 5 ωθ 6 απ 5

4 απ 6 απ 6 απ 6

5 ωθ 4 7 2 3

6 ωθ 4 8 3

7 απ 2

8 απ 4 απ 4

Page 95: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 9595

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Συγκρούσεις ενεργειώνΤι γίνεται αν η κατάσταση s περιέχει [ • a , b] και [ • , a] ; Το πρώτο στοιχείο παράγει “ώθηση” και το δεύτερο “απλοποίηση” Δεν μπορούμε στο ACTION[s,a] να συμπληρώσουμε δύο ενέργειες Σύγκρουση ώθησης – απλοποίησης (shift – reduce conflict) Μπορούμε ή να αλλάξουμε τη γραμματική ή αυθαίρετα να επιλέξουμε την εκτέλεση ώθησης, κάτι που έχει αποδειχθεί

ότι συνήθως αποδίδει τη σωστή σημασία (π.χ. Πρόβλημα μετέωρου else) ή

να επιλέξουμε κάποια άλλη ανάλυση LR

Τι γίνεται όταν η κατάσταση s περιέχει [ • , a] και [ • , a] ; Κάθε στοιχείο παράγει “απλοποίηση”, αλλά με διαφορετικό κανόνα Δεν μπορούμε στο ACTION[s,a] να συμπληρώσουμε δύο ενέργειες Σύγκρουση απλοποίησης – απλοποίησης (reduce – reduce conflict) Ένδειξη λάθους στη γραμματική

και στις δύο περιπτώσεις λέμε ότι η γραμματική δεν είναι LR(1)

Page 96: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 9696

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Παραλλαγές ανάλυσης LR: LR(0)

• Βασικά είναι οι ίδιοι αλγόριθμοι όπως και για την ανάλυση LR(1)• Η μόνη διαφορά είναι ότι στα στοιχεία LR(0) δεν υπάρχει σύμβολο εισόδου και γι΄ αυτό δεν παράγονται πολλά στοιχεία σε κάθε σύνολο• Η ανάλυση LR(0) παράγει λιγότερες καταστάσεις• Δεν μπορεί να αναγνωρίσει όλες τις γραμματικές που αναγνωρίζει η LR(1)• Είναι πιο πιθανό να οδηγήσει σε συγκρούσεις ανάλυσης

κλείσιμο συνόλου στοιχείων LR(0):μεταβάσεις συνόλων στοιχείων LR(0):

κατασκευή συνόλων στοιχείων LR(0):

Closure( I ) while ( το σύνολο I μεγαλώνει ) for κάθε στοιχείο [ • ] I for κάθε παραγωγή P if [ • ] I then προσέθεσε το [ • ] στο I

Goto( I, x ) new = Ø for κάθε [ • x ] I new = new [ x • ]

return closure(new)

I0 = closure( [S’ • S ] )C = { I0 }

while ( προστίθενται στο C νέα σύνολα στοιχείων) for κάθε Ii C και κάθε x ( TNT ) Inew = goto(Ii , x) if Inew C then C = C Inew κατέγραψε τη μετάβαση Ii Inew με αναγνώριση του x

Page 97: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 9797

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Παραλλαγές ανάλυσης LR: SLR(1)Ο αλγόριθμος SLR(1) για να καθορίσει πότε θα γίνει απλοποίηση χρησιμοποιεί και τα σύνολα FOLLOWΟι αναλυτές SLR(1) έχουν λιγότερες καταστάσεις από ότι οι LR(1)for κάθε σύνολο στοιχείων Ix C

for κάθε στοιχείο Ix if στοιχείο είναι [ •a] και a T και goto(Ix,a) = Ik , then ACTION[x,a] “ώθηση k” else if στοιχείο είναι [S’S •] then ACTION[x ,\0] “αποδοχή” else if στοιχείο είναι [ •] then for κάθε a FOLLOW() then ACTION[x,a] “απλοποίηση ”

for each n NT if goto(Ix ,n) = Ik then GOTO[x,n] k

Page 98: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 9898

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Παραλλαγές ανάλυσης LR: LALR(1) Βασική ιδέα: συνένωση καταστάσεων LR(1)

κρατάμε τον πυρήνα LR(0) των στοιχείων LR(1) (αγνοούμε τα σύμβολα εισόδου)

αν δύο σύνολα LR(1) έχουν τον ίδιο πυρήνα, τότε τα συνενώνουμε και ενημερώνουμε τους πίνακες ACTION και GOTO

Οι αναλυτές LALR(1) μπορούν να φτιαχτούν με δύο τρόπους1. Κατασκευή των συνόλων στοιχείων LR(1) και συνένωση2. Αγνοούμε τα στοιχεία με τελεία στην αρχή του δεξιού μέρους

και κατασκευάζουμε πυρήνες συνόλων στοιχείων LR(0). Στη συνέχεια χρησιμοποιούμε έναν αλγόριθμο προώθησης συμβόλων εισόδου για να υπολογίσουμε τα σύμβολα εισόδου.

Η δεύτερη προσέγγιση είναι πιο αποδοτική επειδή αποφεύγει τη δημιουργία μεγάλων ενδιάμεσων LR(1) πινάκων

Page 99: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 9999

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Παραλλαγές ανάλυσης LR: LALR(1) Ένας αναλυτής LALR(1) για μια γραμματική G έχει τον ίδιο

αριθμό καταστάσεων με τον αντίστοιχο αναλυτή SLR(1)

Αν ένας αναλυτής LR(1) για μια γραμματική G δεν παρουσιάζει συγκρούσεις ώθησης - απλοποίησης, τότε δεν θα έχει συγκρούσεις ώθησης – απλοποίησης και ο αναλυτής LALR(1)

Ένας αναλυτής LALR(1) μπορεί να εμφανίζει σύγκρουση απλοποίησης - απλοποίησης χωρίς αυτό να συμβαίνει και στον αντίστοιχο LR(1)

Οι αναλυτές LALR(1) είναι πιο γενικοί από τους SLR(1) και συγχρόνως έχουν το ίδιο μικρό χώρο καταστάσεων

Ανάλυση LALR(1) παράγουν οι γεννήτριες yacc και byacc

Page 100: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 100100

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γλώσσες χωρίς συμφραζόμενα Ι

Γλώσσες χωρίς συμφραζόμενα

Προσδιοριστικές γλώσσες (LR(k))

Γλώσσες LL(k) Γλώσσες απλής προήγησης

Γλώσσες LL(1) Γλώσσες προτεραιότητας

τελεστών

LR(k) LR(1)

Η ιεραρχία γλωσσών χωρίς συμφραζόμενα

Page 101: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 101101

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Γλώσσες χωρίς συμφραζόμενα ΙΙ

Ιεραρχία γλωσσών χωρίς συμφραζόμενα

• Οι γλώσσες προτεραιότητας τελεστών περιλαμβάνουν και κάποιες γλώσσες με ασάφειες

• LL(1) είναι υποσύνολο των γραμματικών SLR(1)

Γλώσσες χωρίς συμφραζόμενα

Γλώσσες χωρίς

ασάφειες

Προτεραιότητας τελεστών

LR(k)

LR(1)

LALR(1)

SLR(1)

LR(0)

LL(k)

LL(1)

Page 102: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 102102

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάνηψη λαθών Ι

Εντοπισμός λάθους όσο το δυνατόν πιο έγκαιρα. Επιλογή θέσης από όπου θα συνεχίζεται η ανάλυση. Να εντοπίζονται μόνο υπαρκτά λάθη και να μην

εμφανίζονται διαδιδόμενα πλασματικά λάθη. Να αποφεύγεται η μετάπτωση του αναλυτή σε

ατέρμονες βρόχους.

Τεχνικές ανάνηψης λαθών:- ανάνηψη «πανικού»- ανάνηψη σε επίπεδο φράσης- κανόνες παραγωγής για λάθη - συνολική διόρθωση

Page 103: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 103103

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάνηψη λαθών ΙΙ

Η ανάνηψη «πανικού» στην προβλέπουσα αναδρομική κατάβαση υλοποιείται με τον καθορισμό μονάδων συγχρονισμού.Όταν ο αναλυτής βρει λάθος, τότε προσπερνά τις επόμενες μονάδες μέχρι να εντοπίσει μια μονάδα συγχρονισμού από την οποία μπορεί να συνεχίσει την ανάλυσης. Κάθε μη τερματικό σύμβολο έχει τις δικές του μονάδες συγχρονισμού. Οι μονάδες συγχρονισμού επιλέγονται μέσα από τα σύνολα FOLLOW.

Στην ανάλυση LL(1) έχουμε εντοπισμό λάθους, όταν στην κορυφή της στοίβας βρίσκεται ένα μη τερματικό σύμβολο X, τέτοιο ώστε το τρέχον σύμβολο εισόδου να μην περιλαμβάνεται στο σύνολο FIRST(X) και αν αυτό συμβαίνει να περιέχει το ε, ούτε στο σύνολο FOLLOW(X).

Page 104: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 104104

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάνηψη «πανικού» στην ανάλυση LL(1) I

Η ανάνηψη «πανικού» μπορεί εύκολα να υλοποιηθεί με τον προσδιορισμό της κατάλληλης ενέργειας, για κάθε περίπτωση κενής θέσης, στον πίνακα ανάλυσης. Διακρίνουμε τρεις πιθανές ενέργειες ανάνηψης:

την αφαίρεση του συμβόλου Χ από τη στοίβα (pop), το προσπέρασμα ενός αριθμού συμβόλων εισόδου, μέχρι

τον εντοπισμό μονάδας, που μπορεί να χρησιμοποιηθεί για την επανεκκίνηση της διαδικασίας ανάλυσης (scan) και

την ώθηση στη στοίβα ενός νέου μη τερματικού συμβόλου.

Page 105: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 105105

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάνηψη «πανικού» στην ανάλυση LL(1) II

Η pop εκτελείται, όταν η τρέχουσα λεξική μονάδα είναι η $ ή όταν αυτή ανήκει στο FOLLOW(X).

Η scan εκτελείται, όταν η τρέχουσα λεξική μονάδα δεν είναι η $ και δεν ανήκει στο .

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

)()( XFOLLOWXFIRST

Page 106: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 106106

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάνηψη «πανικού» στην ανάλυση LL(1) III

ΠΑΡΑΔΕΙΓΜΑ (ανάνηψη λαθών στη γραμματική αριθμητικών εκφράσεων)

S = έκφραση.έκφραση = όρος υπ_όροι.υπ_όροι = “+” όρος υπ_όροι

| “-” όρος υπ_όροι | ε.

όρος = παράγοντας υπ_παραγ.υπ_παραγ = “*” παράγοντας υπ_παραγ

| “/” παράγοντας υπ_παραγ | ε.

παράγοντας = “(”έκφραση “)” | “αριθμός”.

Page 107: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 107107

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάνηψη «πανικού» στην ανάλυση LL(1) IV

“αριθμός” “+” “-” “*” “/” “(” “)” $ έκφραση όρος

υπ_όροι scan scan scan scan όρος υπ_όροι pop pop

υπ_όροι scan “+” όρος υπ_όροι “-” όρος υπ_όροι scan scan scan ε ε όρος παράγοντας

υπ_παραγ pop pop scan scan παράγοντας

υπ_παραγ pop pop

υπ_παραγ scan ε ε “*” παράγοντας υπ_παραγ

“/” παράγοντας υπ_παραγ

scan ε ε

παράγοντας “αριθμός” pop pop pop pop “(” έκφραση “)” pop pop

M “αριθμός” “+” “-” “*” “/” “(” “)” $ έκφραση όρος υπ_όροι όρος υπ_όροι υπ_όροι “+” όρος υπ_όροι “-” όρος υπ_όροι ε ε όρος παράγοντας

υπ_παραγ παράγοντας

υπ_παραγ

υπ_παραγ ε ε “*” παράγοντας υπ_παραγ

“/” παράγοντας υπ_παραγ

ε ε

παράγοντας “αριθμός” “(” έκφραση “)”

ΠΙΝΑΚΑΣ ΑΝΑΛΥΣΗΣ ΧΩΡΙΣ ΑΝΑΝΗΨΗ ΛΑΘΩΝ:

ΠΙΝΑΚΑΣ ΑΝΑΛΥΣΗΣ ΜΕ ΑΝΑΝΗΨΗ ΛΑΘΩΝ:

Page 108: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 108108

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Ανάνηψη «πανικού» στην ανάλυση LL(1) V

LL(1) ανάλυση και ανάνηψη λαθών για τη συμβολοσειρά (27-*) ΣΤΟΙΒΑ ΣΥΜ/ΕΙΡΑ ΠΑΡΑΓΩΓΗ $ έκφραση (27-*)$ $ υπ_όροι όρος (27-*)$ έκφραση = όρος υπ_όροι. $ υπ_όροι υπ_παραγ. παράγοντας (27-*)$ όρος = παράγοντας υπ_παραγ. $ υπ_όροι υπ_παραγ. “)” έκφραση “(” (27-*)$ παράγοντας = “(” έκφραση “)”. $ υπ_όροι υπ_παραγ. “)” έκφραση 27-*)$ $ υπ_όροι υπ_παραγ. “)” υπ_όροι όρος 27-*)$ έκφραση = όρος υπ_όροι. $ υπ_όροι υπ_παραγ. “)” υπ_όροι υπ_παραγ. παράγοντας 27-*)$ όρος = παράγοντας υπ_παραγ. $ υπ_όροι υπ_παραγ. “)” υπ_όροι υπ_παραγ. “αριθμός” 27-*)$ παράγοντας = “αριθμός”. $ υπ_όροι υπ_παραγ. “)” υπ_όροι υπ_παραγ. -*)$ $ υπ_όροι υπ_παραγ. “)” υπ_όροι -*)$ υπ_παραγ. = ε. $ υπ_όροι υπ_παραγ. “)” υπ_όροι όρος “-” -*)$ υπ_όροι = “-” όρος υπ_όροι. $ υπ_όροι υπ_παραγ. “)” υπ_όροι όρος *)$ $ υπ_όροι υπ_παραγ. “)” υπ_όροι όρος )$ scan $ υπ_όροι υπ_παραγ. “)” υπ_όροι )$ pop $ υπ_όροι υπ_παραγ. “)” )$ υπ_όροι. = ε. $ υπ_όροι υπ_παραγ. $ $ υπ_όροι $ υπ_παραγ. = ε. $ $ υπ_όροι. = ε.

Page 109: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 109109

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Εντοπισμός λάθους στην ανάλυση LR I(1) έκφραση = έκφραση “+” όρος.(2) έκφραση = έκφραση “-” όρος.(3) έκφραση = όρος.(4) όρος = όρος “*” παράγοντας.(5) όρος = όρος “/” παράγοντας.(6) όρος = παράγοντας.(7) παράγοντας = “(” έκφραση “)”.(8) παράγοντας = “αριθμός”.

Πίνακας ενεργειών για τη γραμματική αριθμητικών εκφράσεων “αριθμός” “+” “-” “*” “/” “(” “)” $ κατάσταση 0 ώθηση ώθηση κατάσταση 1 ώθηση ώθηση αποδοχή κατάσταση 2 απλοπ (3) απλοπ (3) ώθηση ώθηση απλοπ (3) απλοπ (3) κατάσταση 3 απλοπ (6) απλοπ (6) απλοπ (6) απλοπ (6) απλοπ (6) απλοπ (6) κατάσταση 4 ώθηση ώθηση κατάσταση 5 απλοπ (8) απλοπ (8) απλοπ (8) απλοπ (8) απλοπ (8) απλοπ (8) κατάσταση 6 ώθηση ώθηση κατάσταση 7 ώθηση ώθηση κατάσταση 8 ώθηση ώθηση κατάσταση 9 ώθηση ώθηση κατάσταση 10 ώθηση ώθηση ώθηση κατάσταση 11 απλοπ (1) απλοπ (1) ώθηση ώθηση απλοπ (1) απλοπ (1) κατάσταση 12 απλοπ (2) απλοπ (2) ώθηση ώθηση απλοπ (2) απλοπ (2) κατάσταση 13 απλοπ (4) απλοπ (4) απλοπ (4) απλοπ (4) απλοπ (4) απλοπ (4) κατάσταση 14 απλοπ (5) απλοπ (5) απλοπ (5) απλοπ (5) απλοπ (5) απλοπ (5) κατάσταση 15 απλοπ (7) απλοπ (7) απλοπ (7) απλοπ (7) απλοπ (7) απλοπ (7)

Page 110: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 110110

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Εντοπισμός λάθους στην ανάλυση LR II

Πίνακας μεταβάσεων για τη γραμματική αριθμητικών εκφράσεων “αριθμός” “+” “-” “*” “/” “(” “)” έκφραση όρος παράγοντας κατάσταση 0 5 4 1 2 3 κατάσταση 1 6 7 κατάσταση 2 8 9 κατάσταση 3 κατάσταση 4 5 4 10 2 3 κατάσταση 5 κατάσταση 6 5 4 11 3 κατάσταση 7 5 4 12 3 κατάσταση 8 5 4 13 κατάσταση 9 5 4 14 κατάσταση 10 6 7 15 κατάσταση 11 8 9 κατάσταση 12 8 9 κατάσταση 13 κατάσταση 14 κατάσταση 15

Page 111: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 111111

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Εντοπισμός λάθους στην ανάλυση LR III

Διάγνωση λάθους στη συμβολοσειρά (27-5*8

ΣΤΟΙΒΑ ΣΥΜΒΟΛΟΣΕΙΡΑ ΕΝΕΡΓΕΙΑ

$0 (27-5*8$ ώθηση

$0 “(”4 27-5*8$ ώθηση

$0 “(”4 “αριθμός”5 -5*8$ απλοποίηση κατά (8)

$0 “(”4 παράγοντας3 -5*8$ απλοποίηση κατά (6)

$0 “(”4 όρος2 -5*8$ απλοποίηση κατά (3)

$0 “(”4 έκφραση10 -5*8$ ώθηση

$0 “(”4 έκφραση10 “-”7 5*8$ ώθηση

$0 “(”4 έκφραση10 “-”7 “αριθμός”5 *8$ απλοποίηση κατά (8)

$0 “(”4 έκφραση10 “-”7 παράγοντας3 *8$ απλοποίηση κατά (6)

$0 “(”4 έκφραση10 “-”7 όρος12 *8$ ώθηση

$0 “(”4 έκφραση10 “-”7 όρος12 “*”8 8$ ώθηση

$0 “(”4 έκφραση10 “-”7 όρος12 “*”8 “αριθμός”5 $ απλοποίηση κατά (8)

$0 “(”4 έκφραση10 “-”7 όρος12 “*”8 παράγοντας13 $ απλοποίηση κατά (4)

$0 “(”4 έκφραση10 “-”7 όρος12 $ απλοποίηση κατά (2)

$0 “(”4 έκφραση10 $ ΛΑΘΟΣ

(“Missing parenthesis”)

Page 112: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 112112

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Εντοπισμός λάθους στην ανάλυση LR IV Αναγνώριση λάθους γίνεται όταν ο αλγόριθμος

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

Το διαγνωστικό μήνυμα λάθους που πρέπει να τυπωθεί μπορεί να επιλεγεί αν εξετάσουμε τα περιεχόμενα της στοίβας.

Διάγνωση λάθους στη συμβολοσειρά 27-*8

ΣΤΟΙΒΑ ΣΥΜΒΟΛΟΣΕΙΡΑ ΕΝΕΡΓΕΙΑ

$0 27-*8$ ώθηση

$0 “αριθμός”5 -*8$ απλοποίηση κατά (8)

$0 παράγοντας3 -*8$ απλοποίηση κατά (6)

$0 όρος2 -*8$ απλοποίηση κατά (3)

$0 έκφραση1 -*8$ ώθηση

$0 έκφραση1 “-”7 *8$ ΛΑΘΟΣ

(“Missing operand”)

Page 113: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 113113

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Εντοπισμός λάθους στην ανάλυση LR V Ανάνηψη «πανικού»:

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

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

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

Μετά την εκτέλεση της ενέργειας αυτής ο έλεγχος επανέρχεται στον αναλυτή για τη συνέχιση της διαδικασίας.

Page 114: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 114114

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Εντοπισμός λάθους στην ανάλυση LR VΙ Ανάνηψη σε επίπεδο φράσης:

Πρέπει όχι απλά να εντοπισθεί το λάθος, αλλά να γίνει και αναγνώριση του λάθους που εντοπίσθηκε.

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

Μία προσέγγιση αυτού του τύπου χαρακτηρίζεται από το ρίσκο να περιέλθει η ανάλυση σε ατέρμονα βρόχο.

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

την ώθηση στη στοίβα τουλάχιστο μιας λεξικής μονάδας εγγυώνται το άδειασμα της στοίβας με την ολοκλήρωση της

ανάγνωσης της συμβολοσειράς δεν αφαιρούν από τη στοίβα μη τερματικά σύμβολα και τις

αντίστοιχες καταστάσεις, που έχουν ήδη αναγνωρισθεί

Page 115: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 115115

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Εντοπισμός λάθους στην ανάλυση LR VΙΙ Ανάνηψη λαθών σε αναλυτές του byacc:

Τροποποιούμε τη γραμματική προσθέτοντας κανόνες παραγωγής για λάθη, της μορφής:

μη τερματικό: error μονάδες_συγχρονισμού

όπου error η ψευδομονάδα λάθους του byacc. Μετά τον εντοπισμό λάθους (κενή θέση στον πίνακα ενεργειών) το

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

Στη συνέχεια ο αναλυτής ωθεί στη στοίβα τη μονάδα error, ως αν αυτή ήταν μια τυπική περίπτωση συμβόλου εισόδου.

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

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

Page 116: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 116116

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Εντοπισμός λάθους στην ανάλυση LR VΙΙΙ

(1) έκφραση = έκφραση “+” όρος.(2) έκφραση = έκφραση “-” όρος.(3) έκφραση = όρος.(4) όρος = όρος “*” παράγοντας.(5) όρος = όρος “/” παράγοντας.(6) όρος = παράγοντας.(7) παράγοντας = “(” έκφραση “)”.(8) παράγοντας = “αριθμός”.

ΠΑΡΑΔΕΙΓΜΑ: ΓΡΑΜΜΑΤΙΚΗ ΑΡΙΘΜΗΤΙΚΩΝ ΕΚΦΡΑΣΕΩΝ

Γράφουμε τον τελευταίο κανόνα της γραμματική μέσα στο byacc ως εξής:

paragontas : ARITHMOS {$$=$1;}

| ‘(’ ekfrasi ‘)’ {$$=$2;}

| error {$$=0;}

;

Page 117: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 117117

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Εντοπισμός λάθους στην ανάλυση LR IXΠΑΡΑΔΕΙΓΜΑ: ΓΡΑΜΜΑΤΙΚΗ ΑΡΙΘΜΗΤΙΚΩΝ ΕΚΦΡΑΣΕΩΝ (συνέχεια)

σημείωση: στην παραπάνω ανάλυση οι πίνακες της ανάλυσης είναι οι LALR(1) πίνακες που παράγει το byacc και όχι αυτοί που χρησιμοποιήσαμε σε προηγούμενα παραδείγματα

Ανάνηψη λάθους στην ανάλυση της συμβολοσειράς 27-*8

ΣΤΟΙΒΑ ΣΥΜΒΟΛΟΣΕΙΡΑ ΕΝΕΡΓΕΙΑ

$0 27-*8$ ώθηση

$0 “αριθμός”2 -*8$ απλοποίηση κατά (8)

$0 παράγοντας6 -*8$ απλοποίηση κατά (6)

$0 όρος5 -*8$ απλοποίηση κατά (3)

$0 έκφραση4 -*8$ ώθηση

$0 έκφραση4 “-”9 *8$ ΛΑΘΟΣ - ώθηση

(“syntax error”)

$0 έκφραση4 “-”9 error1 *8$ απλοποίηση κατά (9)

$0 έκφραση4 “-”9 παράγοντας6 *8$ απλοποίηση κατά (6)

$0 έκφραση4 “-”9 όρος14 *8$ ώθηση

$0 έκφραση4 “-”9 όρος14 “*”10 8$ ώθηση

$0 έκφραση4 “-”9 όρος14 “*”10 “αριθμός”2 $ απλοποίηση κατά (8)

$0 έκφραση4 “-”9 όρος14 “*”10 παράγοντας15 $ απλοποίηση κατά (4)

$0 έκφραση4 “-”9 όρος14 $ απλοποίηση κατά (2)

$0 έκφραση4 $ αποδοχή

Page 118: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 118118

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Εντοπισμός λάθους στην ανάλυση LR X σημαντική λεπτομέρεια:

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

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

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

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

Page 119: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 119119

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Εντοπισμός λάθους στην ανάλυση LR XΙ ΠΡΟΣΟΧΗ:

Αν στο προηγούμενο παράδειγμα γράφαμ

paragontas : ARITHMOS {$$=$1;}

| ‘(’ ekfrasi ‘)’{$$=$2;}

| error

{

yyerrok;

$$=0;

}

;

τότε η ανάλυση της συμβολοσειράς 27 8 οδηγείται σε έναν ατέρμονα βρόχο εκτύπωσης του μηνύματος

syntax error

Page 120: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 120120

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Εντοπισμός λάθους στην ανάλυση LR X περίπτωση που η χρήση του yyerrok είναι επωφελής:

while_statement : WHILE expr DO statement DONE

{

$$=exec_do_while($2,$4);

}

| error DONE

{

yyerror(“Bad WHILE syntax”);

yyerrok;

$$=NULL;

}

;

άλλη δυνατότητα: να αγνοηθεί το σύμβολο εισόδου, που προκαλεί τον εντοπισμό λάθους και να συνεχισθεί η ανάλυση με το σύμβολο που ακλουθεί. Για να γίνει αυτό χρησιμοποιείτε το macro yyclearin

Page 121: Compilers - LL Grammars (Greek)

Σάββατο, 22 Απριλίου 2023Σάββατο, 22 Απριλίου 2023 Τμ. Πληροφορικής, Α.Π.Θ.Τμ. Πληροφορικής, Α.Π.Θ. 121121

ΜΑΘΗΜΑ: ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ

Εντοπισμός λάθους στην ανάλυση LR XI Στο παράδειγμα της προηγούμενης διαφάνειας ο

κανόνας λάθους συνοδεύεται από μονάδα συγχρονισμού. Πως αντιδρά ο αναλυτής σε μία τέτοια περίπτωση; Το byacc αγνοεί όσα σύμβολα εισόδου χρειάζεται, μέχρι

τον εντοπισμό κάποιου που είτε είναι μία από τις μονάδες συγχρονισμού, είτε μπορεί δυνητικά να απλοποιηθεί σε κάποιο απ΄ αυτά (αν αυτό είναι μη τερματικό).

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