Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Μεταγλωττιστές (Compilers) (Θ) Ενότητα 4: Λεκτική Ανάλυση Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Μεταγλωττιστές (Compilers) (Θ) Ενότητα 4: Λεκτική Ανάλυση Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας."— Μεταγράφημα παρουσίασης:

1 Μεταγλωττιστές (Compilers) (Θ) Ενότητα 4: Λεκτική Ανάλυση Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.

2 Περιεχόμενα Μαθήματος 1.Εισαγωγή στους Μεταφραστές 2.Γλώσσες & Γραμματικές 3. Αυτόματα Αναγνώρισης 4.Λεκτική Ανάλυση 5.Συντακτική Ανάλυση 6.Σημασιολογική Ανάλυση & Πίνακες Συμβόλων 7.Παραγωγή Ενδιάμεσου Κώδικα 8.Βελτιστοποίηση Ενδιάμεσου Κώδικα 9.Παραγωγή & Βελτιστοποίηση τελικού κώδικα 1

3 Λεκτική ανάλυση O σκοπός της λεκτικής ανάλυσης είναι η αναγνώριση των λεκτικών μονάδων (tokens) σε μία ροή συμβόλων (συμβολοσειρά). Για την επίτευξη του παραπάνω στόχου, η λεκτική ανάλυση βασίζεται στη γραμματική της πηγαίας γλώσσας και στα πρότυπα αναγνώρισής της. Κατά τη μεταγλώττιση, η αναγνώριση της επόμενης λεκτικής μονάδας γίνεται μετά από αίτημα του συντακτικού αναλυτή. 2 Ροή συμβόλων Λεκτική ανάλυση Ενδιάμεση αναπαράσταση Συντακτική ανάλυση Λάθη Λεκτική μονάδα Αίτημα για επόμενη Λεκτική μονάδα

4 Πρότυπα αναγνώρισης Τα πρότυπα αναγνώρισης (αναγνωριστικά– patterns) χρησιμοποιούνται από τη γραμματική για να περιγράψουν το λεξικό μιας γλώσσας. Παραδείγματα:  Ονόματα  ένας χαρακτήρας που ακολουθείται από 0 ή περισσότερους χαρακτήρες ή/και ψηφία  Αριθμοί  Ακολουθία ψηφίων μεταξύ 0 και 9 Οι κανονικές εκφράσεις αποτελούν πρότυπα αναγνώρισης. 3

5 Λεξήματα-Λεκτικές μονάδες Οι λέξεις (λεξήματα – lexemes) είναι συμβολοσειρές, που ικανοποιώντας ένα πρότυπο αναγνώρισης προσδιορίζουν ένα μια λεκτική μονάδα (token). Π.χ. Πρότυπο αναγνώρισης για αριθμούς: συμβολοσειρά με ψηφία Κανονική έκφραση για αριθμούς NUM: [0-9]+ Λέξημα: 1023 αντίστοιχη λεκτική μονάδα: NUM Ένας πηγαίος κώδικας αποτελείται από λεξήματα Ένας πηγαίος κώδικας ΔΕΝ περιέχει λεκτικές μονάδες-tokens Ένα πρότυπο αναγνώρισης περιγράφει λεκτικές μονάδες ΌΧΙ λεξήματα Ένα αυτόματο ‘δέχεται’ ή απορρίπτει λεξήματα 4

6 Λεκτικές μονάδες Οι λεκτικές μονάδες μπορεί να αντιστοιχούν σε: δεσμευμένες λέξεις ή λέξεις-κλειδιά, ειδικά σύμβολα, στα οποία περιλαμβάνονται οι τελεστές και οι διαχωριστές (‘;’, σχόλιο κ.α.), ονόματα, αριθμούς κ.α. Η αναγνώριση λεκτικών μονάδων είναι ουσιαστικά αναγνώριση προτύπων. 5

7 Αναγνώριση προτύπων ΛέξημαΠρότυπο αναγνώρισηςΑναγνωριστικό - Token ifΟι χαρακτήρες ‘i’ και ‘f’IF +Ο χαρακτήρας ‘+’PLUS_OP x1x1Συμβολοσειρά που αρχίζει από λατινικό χαρακτήρα και ακολουθούν κανένα ή περισσότερα ψηφία ID 123συμβολοσειρά με ψηφία μεταξύ 0-9NUM <Ο χαρακτήρας ‘<’LT_OP <= Οι χαρακτήρες ‘<’ και ‘=’LE_OP =Ο χαρακτήρας ‘=’EQ_OP <>Οι χαρακτήρες ‘ ’NE_OP >Ο χαρακτήρας ‘>’GT_OP >=Οι χαρακτήρες ‘>’ και ‘=’GE_OP 6

8 1o παράδειγμα προσδιορισμού tokens 7 if (i == j) z = 0; else z = 1; δίνει τα tokens IF, LPAREN, ID, EQEQ_OP, ID, RPAREN, ID, EQ_OP, NUM, SEMICOLON, ELSE, ID, EQ_OP, NUM, SEMICOLON Ερώτημα: Είναι η ροή των tokens αρκετή ως πληροφορία που διαβιβάζεται στη συντακτική ανάλυση; Πώς ξεχωρίζουν π.χ. τα ονόματα των μεταβλητών; IF, LPAREN,, EQEQ_OP,, RPAREN,, EQ,, SEMICOLON, ELSE,, EQ,, SEMICOLON Απάντηση: Απαιτείται επιπλέον: πληροφορία για τις ιδιότητές των λεξημάτων, δηλαδή η ολοκληρωμένη περιγραφή της λεκτικής μονάδας.

9 2o παράδειγμα προσδιορισμού tokens Αν γράψουμε τον πηγαίο κώδικα: a == x * y + 10 τα tokens που θα προσδιορίσει ο λεκτικός αναλυτής θα είναι τα εξής: EQEQ_OP MULT_OP PLUS_OP 8

10 Για να σχεδιαστεί ένα λεκτικός αναλυτής προηγείται η ανάγκη μιας: τυπικής περιγραφής προτύπων αναγνώρισης για το προσδιορισμό των λεκτικών μονάδων της πηγαίας τυπικής γλώσσας. 9 Μια κανονική γλώσσα είναι μια τυπική γλώσσα που χρησιμοποιεί κανονικές εκφράσεις για την τυπική περιγραφή προτύπων αναγνώρισης Τυπικές γλώσσες

11 Ασάφεια στα πρότυπα περιγραφής Ασάφειες: Οι συμβολοσειρές if και while μπορεί σύμφωνα με την περιγραφή, που δίνεται από ένα πρότυπο, εκτός από λέξεις-κλειδιά να είναι και ονόματα. Τι προτιμάται κατά την αναγνώριση; Τι γίνεται με τη συμβολοσειρά <>; Είναι μία λεκτική μονάδα ή δύο; 10

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

13 Διαχωριστές Διαχωριστές είναι οι χαρακτήρες, που δεν υπάρχει περίπτωση να αποτελούν μέρος μιας μεγαλύτερης λεκτικής μονάδας. Έτσι, π.χ. στη συμβολοσειρά x=y, το = διαχωρίζει το όνομα x από την υπόλοιπη συμβολοσειρά, καθώς το σύμβολο αυτό δεν μπορεί να αποτελέσει μέρος μιας άλλης λεκτικής μονάδας. Σημείωση: Τα διαχωριστικά περιγράφονται με τις δικές τους κανονικές εκφράσεις και αυτόματα start delim other οther 2829

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

15 Λεκτική ανάλυση και πεπερασμένα αυτόματα Τα Πεπερασμένα Αυτόματα (ΠΑ) αποτελούν μηχανές αναγνώρισης προτύπων που μας παρέχουν ένα θεωρητικό πλαίσιο και πλήθος αλγορίθμων για την ανάπτυξη αλγορίθμων αναγνώρισης των λεκτικών μονάδων μιας κανονικής γλώσσας. Άρα Είναι χρήσιμα εργαλεία για τους λεκτικούς αναλυτές (Λ.Α.) 14

16 Κατασκευή ΛΑ  Εναλλακτικοί τρόποι υλοποίησης Χειρωνακτικά, Με τη βοήθεια πινάκων μετάβασης, Με Γεννήτρια ΛΑ (flex). 15

17 Παράδειγμα προγραμματισμού ΛΑ χειρωνακτικά ΠΑΡΑΔΕΙΓΜΑ: Κανονική έκφραση για σχόλιο σε πρόγραμμα Pascal : {([^}])*} "/*"{ register int c; for(;;) { while( ((c=input()) != '*') && (c != EOF) ); if(c == '*') { while( (c=input()) == '*'); if(c == '/') break;} if(c == EOF) { printf("End-of-File in comment\n"); break;}}} 16

18 Για τη δημιουργία ενός Λεκτικού Αναλυτή ενός μεταγλωττιστή μιας γλώσσας με πίνακες μετάβασης: Ορίζουμε όλα τα μη προσδιοριστικά πεπερασμένα αυτόματα (ΜΠΑ) που αντιστοιχούν στο σύνολο των αναγνωριστικών μιας γλώσσας. Κατασκευή ΛΑ με πίνακες μετάβασης 17 Στη συνέχεια μετατρέπουμε όλα τα ΜΠΑ σε ΠΠΑ Τέλος βρίσκουμε τρόπο προσομοίωσης του ενιαίου προσδιοριστικού πεπερασμένου αυτόματου (ΠΠΑ) που αναγνωρίζει όλες τις λεκτικές μονάδες της γλώσσας και το χρησιμοποιούμε μέσα στον κώδικα του ΛΑ.

19 Ολοκλήρωση ΠΠΑ σε διάγραμμα μετάβασης Τα Διαγράμματα Μετάβασης (transition diagrams) είναι τροποποιημένα ΠΠΑ που απεικονίζουν εύγλωττα τις λειτουργίες ενός Λεκτικού Αναλυτή. 18 other >= Return (relop, LE) Return (relop, GT) 0 1 D E Διάγραμμα μετάβασης (transition diagram)  Λεκτικός Αναλυτής

20 Διαγράμματα μετάβασης Διαφορές ΔΜ και ΠΠΑ  Από τις τελικές καταστάσεις δεν υπάρχουν μεταβάσεις.  Σε κάθε τελική κατάσταση αντιστοιχεί κωδικός εξόδου, μοναδικός για κάθε λεκτική μονάδα.  Στις τελικές καταστάσεις σημειώνονται ο αριθμός των συμβόλων (n) που πρέπει να οπισθοδρομήσει το αυτόματο, με το συμβολισμό *n. Κατασκευή με εμπειρικό τρόπο (συνήθως) 19

21 Παράδειγμα διαγράμματος μετάβασης 20 other > < = > αρχή = =

22 Από το διάγραμμα μετάβασης σε πίνακα μετάβασης 21 other >= Return (relop, LE) Return (relop, GT) Α Β D E >=Delimiter or other ΑBERROR Β DE D Return (relop, LE) EERROR Return (relop, GT)

23 Προσομοίωση λειτουργίας ΔΜ με χρήση ΠΜ Αλγόριθμος προσομοίωσης Είσοδος: Μία συμβολοσειρά εισόδου, ένας πίνακας μετάβασης Τ και ένας πίνακας λογικών τιμών ΚΑ, που δηλώνουν τις καταλήξεις του διαγράμματος μετάβασης Έξοδος: Το αν η συμβολοσειρά εισόδου ανήκει στη γλώσσα ή όχι 22

24 Αλγόριθμος υλοποίηση ΔΜ με χρήση ΠΜ Περιγραφή: κατάσταση:= «αρχή»; ch:= ο επόμενος χαρακτήρας εισόδου; Όσο ((όχι ΚΑ[κατάσταση]) ΚΑΙ (όχι Τ[κατάσταση, ch] κενό-κελί)) επανέλαβε νέα_κατάσταση:= Τ[κατάσταση, ch]; ch:= ο επόμενος χαρακτήρας εισόδου; κατάσταση:= νέα_κατάσταση; Τέλος επανάληψης αν (ΚΑ[κατάσταση]) τότε συμβολοσειρά αποδεκτή, αποστολή Token σε ΣΑ; αλλιώς συμβολοσειρά μη αποδεκτή, εμφάνιση σφάλματος, ΑΝΑΝΗΨΗ ; 23

25 Αλγόριθμος υλοποίησης ΔΜ με χρήση while εντολής 24 procedure FSA1 {declaration} begin {table T initialization}; state := start; GetSymbol; while (TRUE) do begin next-state = T [state, symbol]; if (next-state=(ERROR) break; state = next-state; if (current-char == EOF) break; GetSymbol; end; (*while*) If (is-final-state(state)) … a valid token is recognised else lexical-error (current-char); end.

26 Αλγόριθμος υλοποίησης ΔΜ με χρήση case εντολής 25 procedure FSA2 {declaration} begin {table T initialization}; state := start; GetSymbol; while Symbol in Alphabet do begin case state of start: if symbol in LegalStart then next-state ::= T [state, symbol] else State:=”error” 1:if symbol in LegalOne then next-state ::= T [state, symbol] else State:=”error” 2: …. error: ErrorHandling end (*case*) state = next-state; GetSymbol; end; (*while*) accept:= state in AcceptfinalStates; end.

27 Αλγόριθμος αναγνώρισης των σχολίων της Pascal με case εντολή 26 procedure FSA {declaration} begin state := start; GetSymbol; while Symbol in Alphabet or State not ::= exit do begin case state of start:if symbol = ‘(‘ or ‘{‘ then next-state ::= 1 else next-state::=”error” 1:if symbol = ‘(‘ then next-state::= 2 else next-state::= 5 2:if symbol = ‘*’ then next-state ::= 3 else next-state ::=”error” 3:if symbol = ‘*‘ then next-state ::= 4 4:if symbol = ‘)’ then next-state ::= exit else if symbol not = ‘*’ then next- state ::= 3 5:if symbol = ‘}‘ then next-state ::= exit error: ErrorHandling end (*case*) state = next-state; GetSymbol; (η συνάρτηση επιστρέφει τον επόμενο χαρακτήρα εκτός εάν η κατάσταση που μόλις επισκέφτηκε είναι η start) end; (*while*) end.

28 Παράδειγμα υλοποίησης ΛΑ 27 return (gettoken (), install_id()) return (relop, LE) return (relop, NE) return (relop, LT) return (relop, GE) return (relop, GT) return (relop, EQ) letter or digit letter other digit other < = = = > > * * * …………………………………………………………………………… Ολοκληρωμένο ΔΜ μιας γλώσσας προγραμματισμού

29 Προγραμματισμός ΛΑ (1 από 3) 28

30 Προγραμματισμός ΛΑ (2 από 3) 29 return (gettoken (), install_id()) letter or digit letter other start * case 9: c= nextchar (); if (isletter (c)) state = 10; else state = fail (); break; case 10: c = nextchar(); if (isletter (c)) state = 10; else if (isdigit(c)) state = 10; else state = 11; break; case 11: retract (1); instal_id(); return ( gettoken () ); …/* cases here*/

31 Προγραμματισμός ΛΑ (3 από 3) 30 start digit other case 25: c= nextchar (); if (isdigit (c)) state = 26; else state = fail (); break; case 26: c = nextchar(); if (isdigit (c)) state = 26; else if (isdigit(c)) state = 10; else state = 27; break; case 27: retract (1); instal_num(); return ( NUM ); }

32 Υλοποίηση ΛΑ - προβλήματα Το λέξημα που αναγνωρίζεται ως μια ανεξάρτητη λεκτική μονάδα θα μπορούσε να είναι μέρος μιας μεγαλύτερης συμβολοσειράς εισόδου.  Παράδειγμα: Αναγνώριση των λεξημάτων ">" "= =" Επισκόπηση επιπλέον χαρακτήρων και αναγκαστική οπισθοδρόμηση.  Ορισμένοι χαρακτήρες "διαβάζονται" περισσότερες από μια φορές. Αναγνώριση της συμβολοσειράς με το μεγαλύτερο μήκος. 31

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

34 Γεννήτριες 33

35 Γεννήτριες λεκτικών αναλυτών (1 από 2) Είσοδος: ορισμοί κανονικών εκφράσεων για την περιγραφή της γραμματικής Εσωτερική μετάφραση των κανονικών εκφράσεων σε πεπερασμένα αυτόματα Προσομοίωση πεπερασμένων αυτόματων σε πίνακες μετάβασης για τη δημιουργία κώδικα λεκτικής ανάλυσης 34 Λ. Α. Γεννήτρια Λ.Α. Ορισμοί (κανονικών εκφράσεων) Πηγαίος κώδικας προς λεκτική ανάλυση αναγνωριστικά κώδικας Λ.Α.

36 Βήματα δημιουργίας ΛΑ με flex 35 Lex γεννήτρια Είσοδος lex.l lex.yy.c C μεταγλωττιστής lex.yy.c a.out Ροή συμβόλων εισόδου Σειρά αναγνωριστικών

37 Γεννήτριες λεκτικών αναλυτών (2 από 2) Το αρχείο περιγραφής διοχετεύεται ως είσοδος στη γεννήτρια κώδικα λεκτικής ανάλυσης. Ο κώδικας που προκύπτει ως αποτέλεσμα περιλαμβάνεται στο αρχείο lexyy.c ή lex.yy.c και περιλαμβάνει σίγουρα τη συνάρτηση λεκτικής ανάλυσης yylex(). Αν το αρχείο περιγραφής περιλαμβάνει συνάρτηση main(), τότε το πρόγραμμα που παράχθηκε μπορεί να λειτουργήσει αυτόνομα και για να γίνει αυτό πρέπει να περάσει από ένα μεταγλωττιστή της C. Αν όχι, τότε για να χρησιμοποιηθεί ο παραγόμενος κώδικας στο πλαίσιο μιας άλλης συνάρτησης (συντακτικός αναλυτής) χρειάζεται να συμπεριληφθεί με την οδηγία include “lexyy.c” 36

38 Δομή ενός προγράμματος (f)lex 37 Ορισμοί % Κανόνες % Κώδικας χρήστη line.*\n {line}{printf(“%5d %s”, lineno++, yytext);} void main() { yylex();}

39 Σύνταξη flex Στους ορισμούς περιλαμβάνεται πιθανός Κώδικας, ο οποίος δεν ανήκει σε συγκεκριμένες συναρτήσεις και είναι επιθυμητή η συμπερίληψή του στον παραγόμενο λεκτικό αναλυτή. Ο κώδικας αυτός εμφανίζεται ανάμεσα στους ειδικούς χαρακτήρες {% και %} και προηγείται του χαρακτήρα %, που διαχωρίζει το πρώτο από το δεύτερο μέρος της περιγραφής. %{ /* πρόγραμμα αρίθμησης των γραμμών ενός κειμένου */ #include int lineno = 1; %} 38

40 Παράδειγμα σύνταξης %{ /* πρόγραμμα αρίθμησης των γραμμών ενός κειμένου */ #include int lineno = 1; %} line.*\n % {line}{printf(“%5d %s”, lineno++, yytext);} % void main() { yylex();} 39

41 Flex (1 από 2) YYTYPE yylvalΗ μεταβλητή μέσω της οποίας επικοινωνεί ο λεκτικός αναλυτής με το συντακτικό αναλυτή. Ο προκαθορισμένος τύπος YYTYPE είναι int, αλλά ο χρήστης μπορεί να τον ορίσει σύμφωνα με τις ανάγκες του στο πρώτο μέρος της περιγραφής του λεκτικού ή του συντακτικού αναλυτή. Η τιμή της μεταβλητής yylval, πρέπει να ενημερώνεται, όποτε αυτή χρειάζεται, στα τμήματα κώδικα action i του δευτέρου μέρους της περιγραφής. char * yytextΗ μεταβλητή αυτή παρέχει έναν προσωρινό χώρο αποθήκευσης της συμβολοσειράς, που αντιστοιχεί στη λεκτική μονάδα που αναγνωρίσθηκε. Είναι ιδιαίτερα χρήσιμη κατά την αναγνώριση ονομάτων και σταθερών. int yylengΗ τιμή της εκφράζει το μήκος της συμβολοσειράς που διαβάστηκε. FILE * yyinΗ τιμή της παρέχει ένα δείκτη στο αρχείου εισόδου του λεκτικού αναλυτή (προκαθορισμένη τιμή: stdin). FILE * yyoutΗ τιμή της παρέχει ένα δείκτη στο αρχείου εξόδου του λεκτικού αναλυτή (προκαθορισμένη τιμή: stdout). int yylex()Η παραγόμενη συνάρτηση λεκτικής ανάλυσης. Επιστρέφει τη λεκτική μονάδα που αναγνωρίστηκε. 40

42 Flex (2 από 2) register int input()Επιστρέφει τον επόμενο χαρακτήρα της συμβολοσειράς εισόδου. void yymore()Επιτρέπει στο λεκτικό αναλυτή να προχωρήσει στην αναγνώριση της επόμενης λεκτικής μονάδας, διατηρώντας στην yytext τη συμβολοσειρά της λεκτικής μονάδας, που αναγνωρίσθηκε τελευταία. void yyless(int n)Οπισθοδρόμηση n χαρακτήρων στη συμβολοσειρά εισόδου της λεκτικής ανάλυσης. ECHOΕκτυπώνει την yytext στο yyout. 41

43 Γεννήτριες λεκτικών αναλυτών X (1 από 2) ΠΑΡΑΔΕΙΓΜΑ: %{ /* πρόγραμμα αναπαραγωγής γραμμών που αρχίζουν ή καταλήγουν στο χαρακτήρα a */ #include %} ends_with_a.*a\n begins_with_aa.*\n % {ends_with_a}ECHO; {begins_with_a}ECHO;.*\n; % void main() { yylex();} 42

44 Γεννήτριες λεκτικών αναλυτών X (2 από 2) 43

45 Ένας ολοκληρωμένος λεκτικός αναλυτής 44

46 Διαδικασία για την παραγωγή του τελικού προγράμματος 45 scanner.l Meta compiler για λεξικογραφικούς αναλυτές (flex/lex) scanner.c C/C++ Compiler εκτελέσιμο: scanner βιβλιοθήκες

47 Τέλος Ενότητας

48 Σημειώματα

49 Σημείωμα Αναφοράς Copyright Τεχνολογικό Εκπαιδευτικό Ίδρυμα Αθήνας, Κατερίνα Γεωργούλη Κατερίνα Γεωργούλη. «Μεταγλωττιστές. Ενότητα 4: Λεκτική Ανάλυση». Έκδοση: 1.0. Αθήνα Διαθέσιμο από τη δικτυακή διεύθυνση: ocp.teiath.gr. ocp.teiath.gr

50 Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό. Οι όροι χρήσης των έργων τρίτων επεξηγούνται στη διαφάνεια «Επεξήγηση όρων χρήσης έργων τρίτων». Τα έργα για τα οποία έχει ζητηθεί άδεια αναφέρονται στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί.

51 Επεξήγηση όρων χρήσης έργων τρίτων 50 Δεν επιτρέπεται η επαναχρησιμοποίηση του έργου, παρά μόνο εάν ζητηθεί εκ νέου άδεια από το δημιουργό. © διαθέσιμο με άδεια CC-BY διαθέσιμο με άδεια CC-BY-SA διαθέσιμο με άδεια CC-BY-NC-SA διαθέσιμο με άδεια CC-BY-NC Επιτρέπεται η επαναχρησιμοποίηση του έργου και η δημιουργία παραγώγων αυτού με απλή αναφορά του δημιουργού. Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού, και διάθεση του έργου ή του παράγωγου αυτού με την ίδια άδεια. Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού. Δεν επιτρέπεται η εμπορική χρήση του έργου. Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού και διάθεση του έργου ή του παράγωγου αυτού με την ίδια άδεια. Δεν επιτρέπεται η εμπορική χρήση του έργου. διαθέσιμο με άδεια CC-BY-ND Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού. Δεν επιτρέπεται η δημιουργία παραγώγων του έργου. διαθέσιμο με άδεια CC-BY-NC-ND Επιτρέπεται η επαναχρησιμοποίηση του έργου με αναφορά του δημιουργού. Δεν επιτρέπεται η εμπορική χρήση του έργου και η δημιουργία παραγώγων του. διαθέσιμο με άδεια CC0 Public Domain διαθέσιμο ως κοινό κτήμα Επιτρέπεται η επαναχρησιμοποίηση του έργου, η δημιουργία παραγώγων αυτού και η εμπορική του χρήση, χωρίς αναφορά του δημιουργού. χωρίς σήμανσηΣυνήθως δεν επιτρέπεται η επαναχρησιμοποίηση του έργου.

52 Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει:  το Σημείωμα Αναφοράς  το Σημείωμα Αδειοδότησης  τη δήλωση Διατήρησης Σημειωμάτων  το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει) μαζί με τους συνοδευόμενους υπερσυνδέσμους.

53 Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας» έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.


Κατέβασμα ppt "Μεταγλωττιστές (Compilers) (Θ) Ενότητα 4: Λεκτική Ανάλυση Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google