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

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

Περιεχόμενα Μαθήματος

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


Παρουσίαση με θέμα: "Περιεχόμενα Μαθήματος"— Μεταγράφημα παρουσίασης:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

16 Παράδειγμα προγραμματισμού ΛΑ χειρωνακτικά
ΠΑΡΑΔΕΙΓΜΑ: Κανονική έκφραση για σχόλιο σε πρόγραμμα 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;}}}

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

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

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

20 Παράδειγμα διαγράμματος μετάβασης
<relop,55> <relop,53> <relop,57> <relop,56> <relop,58> <relop,54> other > < = αρχή 1 2 3 4 5 6 7 8 9

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

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

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

24 Αλγόριθμος υλοποίησης ΔΜ με χρήση while εντολής
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; end; (*while*) If (is-final-state(state)) … a valid token is recognised else lexical-error (current-char); end.

25 Αλγόριθμος υλοποίησης ΔΜ με χρήση case εντολής
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 2: …. error: ErrorHandling end (*case*) state = next-state; end; (*while*) accept:= state in AcceptfinalStates; end.

26 Αλγόριθμος αναγνώρισης των σχολίων της Pascal με case εντολή
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.

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 < = > * 1 2 3 4 5 6 7 8 9 10 11 25 26 27 ……………………………………………………………………………

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

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

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

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

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

33 Γεννήτριες

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

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

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

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

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

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

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

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

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

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

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

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

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

47 Σημειώματα

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

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

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

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

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


Κατέβασμα ppt "Περιεχόμενα Μαθήματος"

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


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