Εργαστήριο 08 Δημιουργία 1 ου Συντακτικού Αναλυτή

Σχετικά έγγραφα
Εργαστήριο 09 Δημιουργία Νέων Συντακτικών Αναλυτών

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην εξοικείωση με τη διαδικασία κατασκευής ενός Λεξικού Αναλυτή κάνοντας χρήση του lex.

Εργαστήριο 08 Εισαγωγή στo Yacc

Παρουσίαση του εργαλείου BISON

Παρουσίαση του εργαλείου BISON

Mεταγλωττιστές. 4 ο εργαστηριακό μάθημα Λεξική ανάλυση και flex. Θεωρία

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Μεταγλωττιστές. Εργαστήριο 5. Εισαγωγή στο BISON. Γεννήτρια Συντακτικών Αναλυτών. 2 η Φάση Μεταγλώττισης Συντακτική Ανάλυση

Παρουσίαση του εργαλείου FLEX

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στις βασικές έννοιες που σχετίζονται με τη λεξική ανάλυση. Στη δήλωση ορισμό κανονικών εκφράσεων

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Τι είναι το yacc. Δομή ενός αρχείου yacc. Πρόλογος. ΗΥ 340 Γλώσσες και Μεταφραστές Φροντιστήριο. Ο yacc είναι ένας γενικού σκοπού parser generator.

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Θα χρησιμοποιήσουμε το bison, μια βελτιωμένη έκδοση του yacc. Φροντιστήριο 2ο Εισαγωγή στο YACC. Yacc. Δομή Προγράμματος Yacc

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Συντακτική Ανάλυση με το Εργαλείο BISON

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

Τύποι Δεδομένων Είσοδος/Έξοδος

Παρουσίαση του εργαλείου. flex. γεννήτρια λεκτικών αναλυτών. για το µάθηµα: Μεταγλωττιστές. Χανιά, flex 1

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Γ7.2 Συμβολοσειρές (Strings) Γ Λυκείου Κατεύθυνσης

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

HY340, 2010 Α. Σαββίδης. Slide 3 / 43. Slide 4 / 43

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Υλοποίηση ΣΑ με το bison

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Εισαγωγή στο προγραμματιστικό περιβάλλον ANSI

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Υλοποίηση ΣΑ με το bison

Χpήσιµες Βιβλιοθήκες της γλώσσας C

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΕΞΕΤΑΣΗ IOYNIOY 2018 ΘΕΜΑΤΑ Α ΟΝΟΜΑΤΕΠΩΝΥΜΟ:... ΑΕΜ: ΕΞΑΜΗΝΟ:

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών (Κοζάνη) Χειμ. Εξ '15

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

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

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Εισαγωγή στον Προγραμματισμό

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Εισαγωγή στο Flex. Μεταγλωττιστές, Χειμερινό εξάμηνο

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

Η γλώσσα προγραμματισμού C

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C)

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Η γλώσσα προγραμματισμού C

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Διάλεξη 5η: Εντολές Επανάληψης

H ΓΛΩΣΣΑ C. Μάθηµα 1: Το Πρώτο µας Πρόγραµµα σε C. ηµήτρης Ψούνης

Συναρτήσεις. Εισαγωγή

Απλά Προγράμματα. Βήματα: 1. Καθορισμός παράστασης δεδομένων στη μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων

Προγραμματισμός Ι (ΗΥ120)

Ενότητα 4: «Εισαγωγή στον Προγραμματισμό. Τα πρώτα προγράμματα σε γλώσσα C»

Προγραμματισμό για ΗΜΥ

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Εξοικ Εξ ε οικ ίωση ε με το το πρόγ ραμμα πρόγ DEV C++ Επικοι Επικ νωνία οι Χρήσ Χρήστη τη Υπολ Υπο ογισ λ τή

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

Εισαγωγή στον προγραμματισμό. Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 2

ΑΡΧΕΙΑ ΚΕΙΜΕΝΟΥ ΣΤΗΝ C

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)

Προγραμματισμός Υπολογιστών με C++

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσμία: 17/1/14, 22:00

Λεκτικός Αναλυτής. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

Κεφάλαιο 3.1, : Συναρτήσεις I. (Διάλεξη 11)

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εργασία Προγραµµατισµού

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 2 η

ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

Συμβολοσειρές Ορίσματα στη main()

Ανάπτυξη και Σχεδίαση Λογισμικού

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΑΣΚΗΣΗ #5 Προτεινόμενη Λύση

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσμία: Τετάρτη 23/11/2016, 21:00

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Επανάληψη για τις Τελικές εξετάσεις

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Άσκηση 1. Α. Υπολογίστε χωρίς να εκτελέσετε κώδικα FORTRAN τα παρακάτω: Ποιά είναι η τελική τιμή του Z στα παρακάτω κομμάτια κώδικα FORTRAN:

Συναρτήσεις διαχείρισης αλφαριθμητικών

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

είκτες και Πίνακες (2)

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Μεθόδων Επίλυσης Προβλημάτων

H ΓΛΩΣΣΑ C. Μάθηµα 16: Είσοδος/Έξοδος: Συναρτήσεις Eξόδου. ηµήτρης Ψούνης

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Λεκτική Ανάλυση

Transcript:

Εργαστήριο 08 Δημιουργία 1 ου Συντακτικού Αναλυτή Σκοπός: Θεωρία Το μάθημα αυτό αναφέρεται: Στη διαδικασία κατασκευής ενός Συντακτικού Αναλυτή κάνοντας χρήση του Yacc. Στην υλοποίησή του. Θεωρία Πρόλογος Στο προηγούμενο εργαστήριο κάναμε μια εισαγωγή στο Yacc γνωρίζοντας τις δομές και τις συναρτήσεις που αυτό προσφέρει. Σήμερα θα παρουσιάσουμε επακριβώς τον τρόπο που αυτό το εργαλείο μπορεί να χρησιμοποιηθεί για την κατασκευή ενός Συντακτικού Αναλυτή. Αρχείο Περιγραφής Lex: % #include <stdio.h> #include "y_tab.h" % [0-9]+ return NUMBER heat return TOKHEAT on off return STATE target return TOKTARGET temperature return TOKTEMPERATURE \n /* ignore end of line */ [ \t]+ /* ignore whitespace */ Αρχείο Εισόδου Yacc : % #include <stdio.h> #include <string.h>

% %token NUMBER TOKHEAT STATE TOKTARGET TOKTEMPERATURE commands: /* empty */ commands command command: heat_switch target_set heat_switch: TOKHEAT STATE printf("\theat turned on or off\n") target_set: TOKTARGET TOKTEMPERATURE NUMBER printf("\tnew temperature set\n") void yyerror(const char *str) fprintf(stderr,"error: %s\n",str) int yywrap() return 1 main() yyparse()

Χρησιμοποιούμε το παράδειγμα ενός απλού θερμοστάτη, τον οποίο θέλουμε να ελέγξουμε δίνοντας του απλές εντολές. Έχουμε να παρατηρήσουμε τα εξής. Στο αρχείο περιγραφής του Λεξικού αναλυτή δεν τυπώνουμε πλέον μηνύματα αλλά επιστρέφουμε ονόματα Τερματικών. Θέλουμε να αναγνωρίσουμε τις συμβολοσειρές heat, on ή off, target, temperature και τους αριθμούς επιστρέφοντας τα αντίστοιχα tokens TOKHEAT, STATE, TOKTARGET, TOKTEMPERATURE και NUMBER. Επίσης δεν υπάρχει συνάρτηση main(), και αυτό γιατί η λεξική ανάλυση θα γίνει μέσω του Yacc και δεν μας ενδιαφέρει να έχουμε κάποια αποτελέσματα αυτής στην οθόνη. Σύμφωνα με τους γραμματικούς κανόνες του αρχείου περιγραφής του Συντακτικού αναλυτή, παρατηρούμε τα εξής. Ο πρώτος κανόνας ορίζει ότι έχουμε εντολές (commands) οι οποίες μπορεί να είναι ανεξάρτητες εντολές (command). Όπως μπορείτε να δείτε ο κανόνας μας είναι αναδρομικός καθώς περιέχει ξανά τη λέξη commands. Αυτό σημαίνει ότι το πρόγραμμά μας είναι ικανό να επεξεργάζεται έναν ικανό αριθμό εντολών μία προς μία. Ο δεύτερος κανόνας της γραμματικής μας, ορίζει τι μπορεί να είναι αυτή η εντολή (command). Υποστηρίζει μόνο δύο τύπους εντολών τη heat switch και την target set. H heat switch ορίζεται από το token HEAT, που προκύπτει από τη λέξη heat, ακολουθούμενο από το token STATE, που προκύπτει από τις λέξεις on ή off. Η target set ορίζεται από το token TARGET, που προκύπτει από τη λέξη target, ακολουθούμενο από το token TEMPERATURE, που προκύπτει από τη λέξη temperature, και από το token NUMBER, το οποίο είναι ένας αριθμός. Οι εντολές επομένως που αναγνωρίζει αυτός ο θερμοστάτης είναι: heat on - και εκτυπώνει το μήνυμα heat turned on or off heat off - και εκτυπώνει το μήνυμα heat turned on or off target temperature 22 - και εκτυπώνει το μήνυμα New temperature set Διαδικασία για να τρέξω / δημιουργήσω καινούργιο Συντακτικό Αναλυτή. 1. lex example4.l 2. yacc -d example4.y 3. tcc lex.yy.c y.tab.c -o example4

Ασκήσεις 1. Ερωτήσεις Ανάπτυξης i) Γιατί η ανάλυση ξεκινάει από το commands και όχι από κάποιο άλλο μη τερματικό σύμβολο π.χ. command ii) Ποια η χρησιμότητα τελικά του μη Τερματικού συμβόλου commands 2. Ασκήσεις Εξάσκησης - Θερμοστάτης a) Τροποποιήστε το Συντακτικό αναλυτή (θερμοστάτης) έτσι ώστε να τυπώνει διαφορετικό μήνυμα κάθε φορά που ανάβει ή σβήνει ο θερμοστάτης (δηλαδή οι εντολές «heat on» και «heat off» να αναγνωρίζονται ξεχωριστά). Αρχείο περιγραφής Lex: Αποτελέσματα - Σχόλια: b) Εάν γράψουμε «HEAT ON» θα αναγνωριστεί και γιατί Εάν όχι τροποποιήστε το πρόγραμμα ώστε να αναγνωρίζει τις εντολές και με κεφαλαία.

Αρχείο περιγραφής Lex: Αποτέλεσμα - Σχόλια: c) Προσθέστε μία καινούρια εντολή που θα δέχεται ο Θερμοστάτης. Η εντολή είναι: set room temperature και το αποτέλεσμα είναι να εκτυπώνεται στην οθόνη το μήνυμα: room temperature now set (Βοήθεια: Δημιουργήστε ένα νέο μη τερματικό σύμβολο, πχ το new_rule) Αρχείο περιγραφής Lex: Αποτέλεσμα - Σχόλια: