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

17
ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-1 Συντακτική Ανάλυση Βασικοί ορισμοί Γραμματικές Χωρίς Συμφραζόμενα (Context-Free Grammars ή CFGs) Παραγωγές (derivations) Συντακτικά δένδρα (parse trees) Συντακτική ανάλυση από πάνω- προς-τα-κάτω (top-down) Συντακτική ανάλυση από κάτω- προς-τα-πάνω (bottom-up) Διφορούμενες γραμματικές L e xica lA n a lyze r S o u rce P rog ram T a rg e t P ro g ram S yn ta x A nalyzer S e m a n tic A na lyze r In te rm e d ia te code generator C o d e optimizer C o d e generator

description

Συντακτική Ανάλυση. Βασικοί ορισμοί Γραμματικές Χωρίς Συμφραζόμενα (Context-Free Grammars ή CFGs) Παραγωγές (derivations) Συντακτικά δένδρα ( parse trees) Συντακτική ανάλυση από πάνω-προς-τα-κάτω (top-down) Συντακτική ανάλυση από κάτω -προς-τα-πάνω (bottom-up) Διφορούμενες γραμματικές. - PowerPoint PPT Presentation

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

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-1

Συντακτική Ανάλυση• Βασικοί ορισμοί• Γραμματικές Χωρίς

Συμφραζόμενα (Context-Free Grammars ή CFGs)

• Παραγωγές (derivations)• Συντακτικά δένδρα (parse trees)• Συντακτική ανάλυση από πάνω-

προς-τα-κάτω (top-down)• Συντακτική ανάλυση από κάτω-

προς-τα-πάνω (bottom-up)• Διφορούμενες γραμματικές

Lexica l Analyzer

Source Program

T arget P rogram

Syntax Ana lyzer

Sem antic Analyzer

In term ediate codegenerator

Code optim izer

C ode generator

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-2

Συντακτική Ανάλυση, Ορισμός• Συντακτική ανάλυση (parsing): η διαδικασία με

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

“I gave him the book”sentence

subject: I verb:gave object: himindirect object

noun phrase

article: the noun: book

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-3

Συντακτική Ανάλυση ΠρογράμματοςSource code(character stream)

Token stream

Syntax tree

if ( b ) a = b ;==

{if (b == (0)) a = b;while (a != 1) printf(“%I “,I--);

}

{

if_stmtexpr

variableb

constant0

blockwhile_stmt

expr== != variable constant

block

1a...

0

Lexical Analysis

Syntax Analysis

expr

variablea b

= variable

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-4

Λειτουργία της Συντακτικής Ανάλυσης• Είσοδος ΣΑ : ροή λεκτικών μονάδων (token

stream)• Έξοδος ΣΑ : συντακτικό δένδρο που προσδιορίζει

τις σχέσεις ανάμεσα στις ΛΜ και/ή ένδειξη ορθότητας του προγράμματος

• Η συντακτική ανάλυση δεν ελέγχει πολλές παραμέτρους όπως π.χ. την συμφωνία ορισμάτων-τελεστών, την αρχικοποίηση των μεταβλητών κ.α.int x = true; int y; z = f(y);

• Τα παραπάνω παραπέμπονται στη σημασιολογική ανάλυση

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-5

Προσδιορισμός του συντακτικού με ΚΕ• Οι κανονικές εκφράσεις είναι εύκολες να κατανοηθούν και

να υλοποιηθούν με ΝΠΑ. Δυστυχώς δεν μπορούν να εκφράσουν το συντακτικό των γλωσσών προγραμματισμού. Π.χ. Η γλώσσα που περιέχει όλες τις συμβολοσειρές με ισορροπημένες (balanced) παρενθέσεις:

() (()) ()()() (())()((()()))Καθώς οι ΚΕ ισοδυναμούν με ΝΠΑ, θα έπρεπε να

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

( ( ( ( (

)))))

Π.χ. για μέχρι πέντε φωλιασμένες παρενθέσεις απαιτείται: S

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-6

Γραμματικές• Μοντέλο παραγωγής (αντί αναγνώρισης) των

συμβολοσειρών που ανήκουν σε μία γλώσσα.• Οι γραμματικές ορίζουν το συντακτικό και όχι τη σημασιολογία της γλώσσας.

• Γενικά, οι γραμματικές δίνονται σαν ένα σύνολο κανόνων “παραγωγής”, π.χ.stmt if expr then stmt else stmtexpr expr + expr | expr * exprΟι κανόνες περιέχουν τερματικά (δηλ. τις λεκτικές μονάδες της γλώσσας) και μη τερματικά σύμβολα (terminals & non-terminals).

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-7

Γραμματικές : ορισμός• Ως γραμματική G ορίζεται η τετράδα:

G = { VN, VT, P, S}, όπουVN : αλφάβητο συμβόλων που ονομάζονται μη τερματικάVT : αλφάβητο συμβόλων που ονομάζονται τερματικάP : σύνολο συντακτικών κανόνων ή κανόνων παραγωγής της μορφής α β όπου αV+ και β V* όπου V = VN VT .S: το αρχικό σύμβολο της γραμματικής VN

Ισχύει ότι VN VT =

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-8

Επεξήγηση• Τερματικά σύμβολα: βασικές δομικές μονάδες

από τις οποίες κατασκευάζουμε μία γλώσσα.• Μη-τερματικά σύμβολα : αναπαριστούν ομάδες

συμβόλων• Κανόνες παραγωγής : καθορίζουν το πώς

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

• Αρχικό σύμβολο : σημείο εκκίνησης για την κατασκευή των συμβολοσειρών της γλώσσας.

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-9

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

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

Free Grammars ή CFG):Α = xόπου Α VN και x V* .– Τύπου 3 ή Κανονικές Γραμματικές (Regular

Grammars):Α = α | α, Βόπου Α, Β VN και a VT .

• Οι κανονικές γραμματικές ισοδυναμούν με ΝΠΑ.

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-10

Γλώσσες με συμφραζόμενα• L1={wcw | όπου w (a|b)*}

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

• L2={anbmcndm | όπου n1, m 1}παράδειγμα κλήσης διαδικασιών, όπου ο αριθμός των παραμέτρων πρέπει να ταιριάζει με όσες έχουν δηλωθεί στις αντίστοιχες δήλωσεις.

• L3={anbncn | όπου n 0} • Λύση : έλεγχος των χαρακτηριστικών που δεν

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

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-11

Σύγκριση ΚΕ - CFG• Οι κανονικές εκφράσεις ισοδυναμούν με ΝΠΑ.• Τα ΝΠΑ είναι ισοδύναμα με κανονικές γραμματικές.• Οι κανονικές γραμματικές είναι υποσύνολο των CFG.• Άρα γιατί δεν χρησιμοποιούμε CFG και για την περιγραφή

των λεκτικών μονάδων;– Η περιγραφή CFG είναι πολύ πιο ισχυρή από ότι απαιτείται

για τη λεκτική ανάλυση– Οι ΚΕ είναι εύκολες στην κατανόηση– Η υλοποίηση της λεκτική ανάλυσης μέσω ΝΠΑ είναι πολύ

πιο αποδοτική.– Ο διαχωρισμός της λεκτικής από την συντακτική ανάλυση

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

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-12

Παραγωγή (derivation)• Μία συμβολοσειρά ανήκει σε μία γλώσσα G αν μπορούμε

να την κατασκευάσουμε ξεκινώντας από το αρχικό σύμβολο της G και εφαρμόζοντας τους κανόνες παραγωγής. Μία τέτοια συμβολοσειρά ονομάζεται “προτασιακός τύπος” (sentential form). Π.χ., έστωexpr = expr, “+” , expr | expr, “*” , expr |

“(”, expr, “)” | “-” , expr | ID ;Μία παραγωγή (δημιουργία συμβολοσειράς) μπορεί να είναι: expr expr , “+” , expr ID , “+”, expr ID , “+” , ID ;

: παραγωγή σε ένα βήμα: παραγωγή σε μηδέν ή περισσότερα βήματα: παραγωγή σε ένα ή περισσότερα βήματα

*

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-13

Παραγωγή (συνέχεια)• Δύο γραμματικές ονομάζονται ισοδύναμες αν

παράγουν την ίδια γλώσσα. Π.χ.

S = A,B ;

A = “a”,A | “” ;

B = “b”,B | “” ;

S = “a”, S | “a” | “b” | Β | “” ;

B = “b”,B | “” ;

παράγουν τη γλώσσα {ambn, όπου m,n 0}

Επιλογές κατά την παραγωγή μίας συμβολοσειράς:– Ποιό μη-τερματικό σύμβολο να αντικαταστήσουμε;– Ποιό κανόνα παραγωγής να επιλέξουμε;

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-14

Αριστερότερη - Δεξιότερη Παραγωγή• Αριστερότερη Παραγωγή (leftmost derivation): σε

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

• Δεξιότερη Παραγωγή (rightmost derivation): σε κάθε βήμα αντικαθιστούμε το μη-τερματικό σύμβολο που βρίσκεται πιο δεξιά. Αποκαλείται επίσης και κανονική παραγωγή.

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

R

L

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-15

Συντακτικό δένδρο (parse tree)• Συντακτικό δένδρο : δένδρο το οποίο κατασκευάζεται

συνδέοντας τα σύμβολα που προκύπτουν από μία παραγωγή με το σύμβολο από το οποίο προήλθαν. Π.χ.expr = expr, “+” , expr | expr, “*” , expr |

“(”, expr, “)” | “-” , expr | ID ;

Η προτασιακή μορφή ID, “+”, ID, “*”, ID μπορεί να προκύψει ως εξής:

expr expr, “+”, expr expr, “+”, expr , “*” , expr expr, “+”, expr , “*” , ID expr, “+”, ID , “*” , ID ID, “+”, ID , “*” , ID

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-16

Συντακτικό δένδρο (συνέχεια)• Eναλλακτικά μπορεί να χρησιμοποιηθεί και η ακόλουθη

επίσης δεξιότερη παραγωγή:

expr expr, “*”, expr expr, “*”, ID expr, “+”, expr , “*” , ID expr,

“+”,ID,“*”,ID ID, “+”, ID , “*” , ID

expr

"*" exprexpr

ID"+" exprexpr

ID ID

expr

"+" exprexpr

ID "*" exprexpr

ID ID

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

ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών 4-17

Διφορούμενες γραμματικές• Τα φύλλα ενός συντακτικού δένδρου είναι τα

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

• Διφορούμενη (ambiguous) γραμματική : ονομάζεται μία γραμματική όταν υπάρχει προτασιακή μορφή της για την οποία υπάρχουν περισσότερα του ενός συντακτικά δένδρα.

• Επιλύεται η ασάφεια (ambiguity);