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

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

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

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

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

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

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

ΘΕΜΑΤΑ ΕΞΕΤΑΣΗΣ ΚΑΙ ΑΠΑΝΤΗΣΕΙΣ ΤΟΥΣ

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

ΣΥΝΟΠΤΙΚΟΣ ΟΔΗΓΟΣ ΓΛΩΣΣΑΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C

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

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

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

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση

Δομημένος Προγραμματισμός

ΦΥΛΛΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ 1

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

Δομημένος Προγραμματισμός (ΤΛ1006)

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

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

Εισαγωγή στη γλώσσα προγραμματισμού C++

ΠΣ-ΕΡ+ΤΑΠΕ, όπου: ΠΧ είναι η πάγια χρέωση, ύψους Є. ΠΣ είναι το ποσό στρογγυλοποίησης (ΠΣ) του προηγούμενου λογαριασμού.

ΕΡΓΑΣΤΗΡΙΟ 2 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Εργαστήριο 2. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

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

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

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

Υπολογισμός - Εντολές Επανάληψης

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

Οικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2

Διαδικασιακός Προγραμματισμός

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

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

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

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

Τμήμα Πληροφορικής & Επικοινωνιών

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

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

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

ΔΙΑΡΚΕΙΑ ΕΞΕΤΑΣΗΣ: 2 ΩΡΕΣ

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

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

TMHMA TEXNΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛ/ΝΙΩΝ Προγραμματισμός Ι ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ , Α ΕΞΑΜΗΝΟ Βασίλης Μποζαντζής. Βασίλης Μποζαντζής

Εισαγωγή στην Πληροφορική

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

Βασικές Αρχές Προγραμματισμού

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

ΘΕΜΑΤΑ ΕΞΕΤΑΣΗΣ ΚΑΙ ΑΠΑΝΤΗΣΕΙΣ

Διαδικασιακός Προγραμματισμός

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

5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while)

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

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

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

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

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

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

Pascal, απλοί τύποι, τελεστές και εκφράσεις

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

Γλώσσα Προγραμματισμού C

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

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

Διαδικασία Ανάπτυξης Λογισμικού

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7)

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

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

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

Μεταφερσιμότητα Τα προγράμματα μεταφέρονται εύκολα σε διαφορετικά λειτουργικά συστήματα

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

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

Ηβασικήσυνάρτηση προγράμματος main()

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

5 &6. Τύποι δεδομένων, τελεστές και

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Αντικειμενοστρεφής Προγραμματισμός

Κεφάλαιο Πίνακες Ι. (Διάλεξη 16)

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

Transcript:

Εργαστήριο 09 Δημιουργία Νέων Συντακτικών Αναλυτών Θεωρία Σκοπός: Το μάθημα αυτό αναφέρεται: Στην εξοικείωση με τη διαδικασία κατασκευής ενός Συντακτικού Αναλυτή κάνοντας χρήση του Yacc. Στην υλοποίησή τους. Ασκήσεις 1) Δημιουργήστε ένα συντακτικό αναλυτή που αναγνωρίζει την εντολή int x = 54 όπου x μπορεί να είναι οποιαδήποτε μεταβλητή που αρχίζει με χαρακτήρα πεζό ή κεφαλαίο και ακολουθεί χαρακτήρας ή ψηφίο σε οποιοδήποτε πλήθος Μετά το = μπορεί να ακολουθεί οποιοσδήποτε ακέραιος αριθμός χωρίς πρόσημο. Αρχείο περιγραφής Lex: Αρχείο περιγραφής Yacc: Αποτελέσματα - Σχόλια: 2) Τροποποιήστε το προηγούμενο πρόγραμμα ώστε να αναγνωρίζει και τις εντολές float y = 32.004 όπου μεταβλητές είναι οι ίδιες αλλά πλέον στη δήλωση float δεχόμαστε δεκαδικούς αριθμούς μετά το =

Αρχείο περιγραφής Lex: Αρχείο περιγραφής Yacc: Αποτέλεσμα - Σχόλια: 3) Δίνονται τα παρακάτω αρχεία περιγραφής λεκτικού και συντακτικού αναλυτή. Το αποτέλεσμα είναι ένα πλήθος εντολών που ένα Ρομπότ κατανοεί. Lex: % #include <stdio.h> #include "y_tab.h" % bring return TOKBRING do slippers water shoes walk talk run return TOKDO return OBJECT return TASK Yacc: % #include <stdio.h> #include <string.h> % %token TOKBRING TOKDO OBJECT TASK

robot: bring Do bring: TOKBRING OBJECT printf("\tobject brought! ") do: TOKDO TASK printf("\t Done! \n") void yyerror(const char *str) fprintf(stderr,"error: %s\n",str) int yywrap() main() return 1 yyparse() α) Δώστε δύο εντολές που αναγνωρίζει ο συντακτικός αναλυτής και τι θα εμφανιστεί στην οθόνη σε κάθε περίπτωση. β)υλοποιήστε νέα εντολή με όνομα make που να αναγνωρίζει τα εξής: make coffee

make breakfast make dinner γ)τροποποιήστε το πρόγραμμα και συγκεκριμένα το μη τερματικό σύμβολο do έτσι ώστε να αναγνωρίζει τις εντολές do not walk/talk/run ή don t walk/talk/run (το don t μία λέξη). 4) Δίνονται τα παρακάτω αρχεία περιγραφής λεκτικού και συντακτικού αναλυτή. Το αποτέλεσμα είναι ένα πλήθος τυποποιημένων εντολών που o κεντρικός υπολογιστής του Χρηματιστηρίου Αθηνών (Χ.Α.) μπορεί να αναγνωρίσει. LEX: % #include <stdio.h> #include "y_tab.h" % buy sell return ACTION stocks ethniki emporiki plaisio exchange dollars euros pounds return TOKSTOCK return COMPANY return TOKEX return CURRENCY [0-9]+ return NUM into return TOKINTO YACC: %token ACTION TOKSTOCK COMPANY TOKEX CURRENCY NUM TOKTO stockmarket: act change act: ACTION NUM COMPANY TOKSTOCK printf("\t Stocks bought-sold \n") change: TOKEX NUM CURRENCY TOKINTO CURRENCY printf("\t Currency exchanged\n")

α) Δώστε δύο παραδείγματα διαφορετικών εντολών που αναγνωρίζει ο compiler και τι θα εκτυπωθεί στην οθόνη σε κάθε περίπτωση. β) Μετά την πρόσφατη οικονομική κρίση το Χ.Α. έβαλε ανώτατο όριο στις 10.000 μετοχές ανά συναλλαγή. Τροποποιήστε το πρόγραμμα ώστε να ανταποκρίνεται στη νέα αυτή οδηγία. Προσοχή! Στην εντολή change εξακολουθεί να μην υπάρχει αριθμητικός περιορισμός. γ) Για να αποφευχθεί νέο κραχ, τοποθετείστε νέα εντολή ασφαλείας, την freeze all transactions όπου το Χ.Α. θα σταματάει προσωρινά την λειτουργία του. 5) Δίνονται τα παρακάτω αρχεία περιγραφής λεκτικού και συντακτικού αναλυτή. Το αποτέλεσμα είναι ένα πλήθος τυποποιημένων εντολών που ένας compiler αναγνωρίζει. LEX: % #include <stdio.h> #include "y_tab.h" % int return TOKINT float x y z return TOKFLOAT return VARIABLE = return TOKISON [0-9]+ return TOKNUM1 [0-9]+. [0-9]+ return TOKNUM2 return END YACC: compiler: integers floats integers: TOKINT VARIABLE TOKISON TOKNUM1 END printf("\t Integer created \n") floats: TOKFLOAT VARIABLE TOKISON TOKNUM2 END printf("\t Float created \n") α) Δώστε δύο παραδείγματα εντολών που αναγνωρίζει ο compiler και τι θα εκτυπωθεί στην οθόνη σε κάθε περίπτωση.

β) Τροποποιείστε και ξαναγράψτε τα αρχεία έτσι ώστε o compiler να αναγνωρίζει και τις εξής εντολές (Προσοχή! Αυτά είναι παραδείγματα, θέλουμε γενικούς κανόνες): i) int x, y ii) float x,y=5.24 iii) char x= whatever (στο iii) μόνο γράμματα του λατινικού αλφαβήτου, μικρά ή κεφαλαία μέσα σε εισαγωγικά )