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



Σχετικά έγγραφα
Εργαστηριακή Άσκηση Αρχές Γλωσσών Προγραμματισμού Εαρινό εξάμηνο 2011

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

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές»

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

ΘΠ06 Μεταγλωττιστές. Εργασία Εξαμήνου: Υλοποίηση ενός Μεταγλωττιστή για τη Γλώσσα Floop2009

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

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

2.1. Εντολές Σχόλια Τύποι Δεδομένων

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές

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

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

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

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

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

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

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

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

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

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

Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ )

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ ΓΛΩΣΣΟΜΑΘΕΙΑ

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

Φυσικές και τεχνητές γλώσσες. Το αλφάβητο της ΓΛΩΣΣΑΣ, Τύποι Δεδομένων. Σταθερές, Μεταβλητές, Τελεστές, Συναρτήσεις, Δομή Προγράμματος

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

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

επιµέλεια Θοδωρής Πιερράτος

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

ΘΕΜΑ Α. 1. Η δυαδική αναζήτηση χρησιμοποιείται μόνο σε ταξινομημένες συλλογές δεδομένων.

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 3 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

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

3 Αλληλεπίδραση Αντικειμένων

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ. Ακέραιοι αριθμοί (int) Πράξεις μεταξύ ακεραίων αριθμών

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ / ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ

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

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ

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

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ

Βασικές έννοιες προγραμματισμού

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

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Τύποι δεδομένων, μεταβλητές, πράξεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος Ανοδικές Μέθοδοι Συντακτικής Ανάλυσης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

ΕΡΩΤΗΣΕΙΣ ΔΙΑΦΟΡΩΝ ΤΥΠΩΝ ΣΤΟ ΚΕΦΑΛΑΙΟ 2.2

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

Ερωτήσεις Σωστού-Λάθους

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

Προγραμματισμός I (Θ)

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΩΝ & Δ ΤΑΞΗΣ ΕΣΠΕΡΙΝΩΝ ΥΠΟΛΕΙΠΟΜΕΝΕΣ ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ HMEΡΗΣΙΩΝ ΚΑΙ ΕΣΠΕΡΙΝΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ

Απάντηση: (func endfunc)-([a-za-z])+

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ

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

ΠΕΡΙΕΧΟΜΕΝΑ Αλφάβητο και τύποι δεδομένων Σταθερές και μεταβλητές Τελεστές, συναρτήσεις και εκφράσεις Εντολή εκχώρησης Εντολές εισόδου - εξόδου Δομή

Μεταγλωττιστής. Μεταφραστές. Γλώσσες. Είδη Μεταγλωττιστών. Μεταγλωττιστής Τελικό πρόγραµµα (object program) Εισαγωγή Αρχικό πρόγραµµα (source program)

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

Πίνακας Περιεχοµένων Πρόλογος Κεφάλαιο Βασικές εισαγωγικές έννοιες

Αλγόριθμοι Αναπαράσταση αλγορίθμων Η αναπαράσταση των αλγορίθμων μπορεί να πραγματοποιηθεί με:

Να γράψετε τους αριθμούς 1, 2, 3 από τη Στήλη Α και δίπλα το γράμμα α, β, γ, δ, ε από τη Στήλη Β που δίνει τη σωστή αντιστοιχία.

7. Βασικά στοιχεία προγραµµατισµού.

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

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

ΗΥ-150. Προγραμματισμός

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

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ

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

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ ΤΡΙΤΗ 11 ΙΟΥΝΙΟΥ 2019 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ

Λογική Σχεδίαση Ι - Εξεταστική Φεβρουαρίου 2013 Διάρκεια εξέτασης : 160 Ονοματεπώνυμο : Α. Μ. Έτος σπουδών:

ΗΥ-150. Προγραμματισμός

ΘΠ06 Μεταγλωττιστές. Εργασία Εξαµήνου: Υλοποίηση ενός Μεταγλωττιστή για τη γλώσσα προγραµµατισµού Robin

Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον

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

Άσκηση 1. Ποια από τα κάτω αλφαριθμητικά είναι αποδεκτά ως ονόματα μεταβλητών σε έναν αλγόριθμο i. Τιμή

Εισαγωγή στην Αριθμητική Ανάλυση

Ρητή μετατροπή αριθμητικής τιμής σε άλλο τύπο. Τι θα τυπωθεί στον παρακάτω κώδικα;

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΤΑΞΗ / ΤΜΗΜΑ : Γ ΛΥΚΕΙΟΥ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΣ 2018 ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ : 7 (ΕΠΤΑ)

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

ΘΕΜΑΤΑ ΤΕΛΙΚΗΣ ΦΑΣΗΣ


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

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

1. Τι ονομάζουμε αλγόριθμο; Δώστε παράδειγμα.

Αντικειμενοστρεφής Προγραμματισμός -Python. Κ.Π. Γιαλούρης

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

Transcript:

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013 27 Μαρτίου 2013 Περίληψη Σκοπός της παρούσας εργασίας είναι η εξοικείωσή σας με τις θεμελιώδεις θεωρητικές και πρακτικές πτυχές της λεκτικής και συντακτικής ανάλυσης. Η εργασία αποτελείται από ένα θεωρητικό μέρος που αφορά τα βασικά θεωρητικά εργαλεία που πρέπει κανείς να γνωρίζει πριν καταπιαστεί με την υλοποίηση ενός λεκτικού/συντακτικού αναλυτή και έπειτα σας ζητά να φτιάξετε με την βοήθεια των μεταεργαλείων flex και bison έναν parser για μία απλή γλώσσα προγραμματισμού. 1 Θεωρητικό Τμήμα 1. Δίνεται η παρακάτω γραμματική: <S> ::= a <A> b <B> <A> ::= <C> a <D> b <B> ::= <C> b <D> a <C> ::= <E> <D> ::= <E> <E> ::= ϵ Να υπολογίσετε τα σύνολα FIRST, FOLLOW και PREDICT για την παραπάνω γραμματική και να φτιάξετε τον πίνακα συντακτικής ανάλυσης για την παραπάνω γλώσσα (όπως στην εικόνα 2.19 του βιβλίου του Scott). Είναι η γλώσσα LL(1)? Δικαιολογήστε την απάντησή σας. 2. Θεωρείστε την παρακάτω LL(1) γραμματική: <A> ::= y <B> x <B> <C> <B> ::= z <B> u <C> ::= s Τί είναι η σύγκρουση ολίσθησης-ελάττωσης (shift-reduce conflict); Πώς επιλύεται στα διάφορα είδη συντακτικών αναλυτών της οικογένειας LR; Να κατασκευάσετε τη χαρακτηριστική μηχανή πεπερασμένης κατάστασης (όπως στην εικόνα 2.25 του Scott) καθώς και τον πίνακα συντακτικής ανάλυσης SLR(1) (όπως στην εικόνα 2.27 του Scott). Είναι η παραπάνω γραμματική LR(0)? Είναι SLR(1)? 3. (bonus) Να κατασκευάσετε ένα παράδειγμα μιας γλώσσας που είναι LL(1), αλλά όχι SLR(1), ούτε LALR(1). Να κατασκευάσετε ένα παράδειγμα μίας γλώσσας που είναι SLR(1) αλλά όχι LL(1). Εξηγήστε το σκεπτικό σας.

Εργαστηριακή Άσκηση 2011-2012 2 2 Υλοποίηση: Parser της γλώσσας Simon Η γλώσσα που θα της οποίας τον parser θα υλοποιήσετε είναι μια απλή φανταστική αντικειμενοστρεφής γλώσσα προγραμματισμού με το όνομα Simon η οποία περιγράφεται αμέσως μετά. 2.1 Δομή προγραμμάτων Simon Κάθε πρόγραμμα Simon αποτελείται από ΜΙΑ ή περισσότερες classes. Κάθε class έχει την πιο κάτω μορφή: class classname { /* C-like Sxolia se opoiodhpote shmeio... */ <variable-declaration> <constructor> <method-declaration> } 2.1.1 Αναγνωριστικά Τα αναγνωριστικά (identifiers) της γλώσσας Simon απαρτίζονται από γράμματα (A..Z, a..z), ψηφία (0..9) και τον ειδικό χαρακτήρα _ (underscore). Ένα αναγνωριστικό δεν μπορεί να αρχίζει από ψηφίο. Τα πεζά γράμματα διαφέρουν από τα αντίστοιχα κεφαλαία. Τα παρακάτω αναγνωριστικά είναι δεσμευμένα και δεν επιτρέπεται να χρησιμοποιούνται ως κοινά αναγνωριστικά. Η σημασία τους εξηγείται σε επόμενες παραγράφους. char, else, if, integer, class, new, return, void, while 2.1.2 Βασικοί Τύποι Δεδομένων Οι βασικοί τύποι δεδομένων που υποστηρίζει η γλώσσα Simon είναι οι εξής: integer, char. Οι ακέραιες σταθερές αποτελούνται από ένα προαιρετικό πρόσημο ακολουθούμενο από ένα ή περισσότερα δεκαδικά ψηφία. Οι σταθερές τύπου χαρακτήρα αποτελούνται από έναν απλό ή ειδικό χαρακτήρα που περικλείεται από απλά εισαγωγικά. Ως απλοί χαρακτήρες θεωρούνται όλοι οι εκτυπώσιμοι χαρακτήρες πλην των εισαγωγικών (απλών και διπλών) και της ανάστροφης καθέτου \(backslash). Οι ειδικοί χαρακτήρες χρησιμοποιούνται όπως στη γλώσσα C. Παριστάνονται ως ζεύγη χαρακτήρων, με πρώτο την ανάστροφη κάθετο. Οι επιτρεπόμενοι ειδικοί χαρακτήρες είναι οι εξής: Χαρακτήρας Περιγραφή \n χαρακτήρας νέας γραμμής (new line) \ χαρακτήρας (διπλό εισαγωγικό) \ χαρακτήρας (απλό εισαγωγικό) \0 χαρακτήρας με ASCII κωδικό 0 \t χαρακτήρας αλλαγής στήλης (TAB) \\ χαρακτήρας (backslash) 2.1.3 Δήλωση Μεταβλητών Η δήλωση των Μεταβλητών, ακολουθεί τον τρόπο που δηλώνονται οι μεταβλητές στην Java ενώ οι επιτρεπόμενοι τύποι για τις απλές μεταβλητές είναι αυτοί που αναφέραμε στην προηγούμενη παράγραφο. Εκτός από τους βασικούς τύπους δεδομένων, η γλώσσα Simon υποστηρίζει πίνακες (arrays) αποτελούμενους από στοιχεία των βασικών τύπων. Κατά τον ορισμό μιας μεταβλητής τύπου

Εργαστηριακή Άσκηση 2011-2012 3 πίνακα, πρέπει να ορίζεται το μήκος του, δηλαδή το πλήθος των στοιχείων που τον αποτελούν. Ένας πίνακας π.χ. 20 ακεραίων με όνομα anarray θα ορίζεται ως εξής: anarray = new integer[20]; /* create an array of integers */ 2.2 Μέθοδοι και Constructor Ο constructor, όπως και οι επιπλέον μέθοδοι, ακολουθούν τον τρόπο ορισμού που ισχύει στην java. Να τον τεκμηριώσετε και να φαίνεται ξεκάθαρα στον ορισμό του BNF που θα δώσετε. Στο σώμα οποιασδήποτε μεθόδου υπάρχει αρχικά η δήλωση Μεταβλητών (όμοια με παραπάνω) και στη συνέχεια οι εντολές. Η εντολή return χρησιμοποιείται για την επιστροφή από τη μέθοδο. Όταν πρόκειται για μέθοδο που επιστρέφει κάποιο τύπο, το return ακολουθείται από έκφραση. 2.2.1 Εντολές Οι εντολές της γλώσσας Simon έχουν ακριβώς την ίδια μορφή με τις αντίστοιχες εντολές της γλώσσας C. Η εντολή εκχώρησης έχει την ίδια σύνταξη με την αντίστοιχη εντολή της C. Επιτρέπεται μόνο η εκχώρηση απλών τύπων: απαγορεύεται η εκχώρηση ολόκληρων πινάκων, αλλά επιτρέπεται η εκχώρηση σε στοιχεία πίνακα. Οι εντολές ελέγχου που επιτρέπει η γλώσσα είναι οι εξής : if ( condition ) statement [ else statement ] while ( condition ) statement Οι τελεστές της γλώσσας Simon δίνονται παρακάτω. Η προτεραιότητα και η προσεταιριστικότητα των τελεστών αυτών είναι η ίδια με αυτή των τελεστών της γλώσσας C. Αριθμητικοί Τελεστές οι εξής: Οι αριθμητικοί τελεστές με ένα τελούμενο της γλώσσας Simon είναι μοναδιαίοι + Θετικό πρόσημο (ταυτότητα) - Αρνητικό πρόσημο (αντίθετος) Δυαδικοί + Πρόσθεση ακεραίων - Αφαίρεση ακεραίων * Πολλαπλασιασμός ακεραίων / Πηλίκο ακέραιας διαίρεσης % Υπόλοιπο ακέραιας διαίρεσης Τα τελούμενα των αριθμητικών τελεστών πρέπει να είναι έγκυρες ακέραιες εκφράσεις. Σχεσιακοί Τελεστές Οι σχεσιακοί τελεστές της γλώσσας Simon φαίνονται στον παρακάτω πίνακα. Τα τελούμενά τους πρέπει να είναι έγκυρες ακέραιες εκφράσεις ή χαρακτήρες. == ίσο!= διάφορο > μεγαλύτερο < μικρότερο >= μεγαλύτερο ή ίσο <= μικρότερο ή ίσο

Εργαστηριακή Άσκηση 2011-2012 4 Τα αποτελέσματα των σχεσιακών τελεστών είναι λογικές εκφράσεις. Οι εκφράσεις αυτές μπορούν να χρησιμοποιηθούν μόνο σε εντολές if και while. Δεν μπορούν να εκχωρηθούν σε μεταβλητές, να περάσουν ως παράμετροι ούτε να επιστραφούν ως αποτελέσματα συναρτήσεων. Λογικοί Τελεστές Οι λογικοί τελεστές της γλώσσας Simon είναι τρεις: Λογική διάζευξη (ή) && Λογική σύζευξη (και)! Λογική άρνηση (όχι) Οι τελεστές και && είναι δυαδικοί, ενώ ο τελεστής! δέχεται ένα τελούμενο. Τα τελούμενα πρέπει να είναι έγκυρες λογικές εκφράσεις. Το αποτέλεσμα είναι επίσης λογική έκφραση. Ερωτήματα 1. (80%) Δώστε σε BNF τον συντακτικό ορισμό της γλώσσας, και χρησιμοποιώντας τα μεταεργαλεία Flex και Bison, υλοποιήστε έναν λεκτικό και συντακτικό αναλυτή, ο οποίος θα παίρνει ως είσοδο ένα αρχείο γραμμένο στη γλώσσα Simon που περιγράφηκε πιο πάνω και θα ελέγχει αν το πρόγραμμα είναι συντακτικά ορθό. Το πρόγραμμά σας θα καλείται από τη γραμμή εντολών ως εξής: prompt> myparser.exe file.txt και θα επιστρέφει διαγνωστικό μήνυμα για το αν ήταν ορθώς γραμμένο, ή κατάλληλο μήνυμα σφάλματος (πρέπει να φαίνεται η γραμμή όπου υπάρχει το σφάλμα). 2. (10%) Τροποποιήστε τον κώδικά σας ώστε ο μεταγλωττιστής της γλώσσας Simon να επιτρέπει οδηγία #include. Η οδηγία αυτή θα επιτρέπει την ανάγνωση ενός εξωτερικού αρχείου σαν αυτό να ήταν τμήμα του προγράμματος, ενώ πρέπει να βρίσκεται υποχρεωτικά στην αρχή του προγράμματος εισόδου (να μην προηγούνται κενά διαστήματα). Η σύνταξή της είναι η εξής: #include "filename" Η οδηγία αυτή απευθύνεται ουσιαστικά στο λεκτικό αναλυτή. Σε περίπτωση που συναντήσει #include, θα πρέπει να σταματήσει την ανάγνωση του αρχείου προγράμματος, και να συνεχίσει με την επεξεργασία του αρχείου που ζητείται να συμπεριληφθεί. Μετά το τέλος αυτού του αρχείου, ο λεκτικός αναλυτής πρέπει να συνεχίσει από το σημείο του αρχείου προγράμματος, στο οποίο είχε σταματήσει. Φυσικά μεμονωμένες λεκτικές μονάδες καθώς και σχόλια πρέπει να περιέχονται πλήρως σε ένα αρχείο προγράμματος (δεν επιτρέπεται να αρχίζουν σε ένα αρχείο προγράμματος και να τελειώνουν σε κάποιο άλλο). 3. (10%) Τροποποιήστε τον κώδικα του συντακτικού αναλυτή σας ώστε να μπορεί να κάνει μία εκτίμηση του πλήθους των λαθών που υπάρχουν στο πρόγραμμα. Παρατηρήσεις - Διαδικαστικά Για τη χρήση των εργαλείων Flex και Bison μπορείτε να βρείτε πληροφορίες στη σελίδα του μαθήματος. Για την άσκηση μπορείτε να δουλέψετε σε ομάδες έως 4 ατόμων. Η βαθμολογία της άσκησης προκύπτει μετά από ατομική προφορική εξέταση που αφορά τόσο τις λεπτομέρειες της υλοποίησης όσο και την ύλη που καλύπτεται από το θεωρητικό τμήμα της άσκησης. Ως ημερομηνία παράδοσης της άσκησης ορίζεται η ημερομηνία γραπτής εξέτασης περιόδου Ιουνίου και Σεπτεμβρίου αντίστοιχα.

Εργαστηριακή Άσκηση 2011-2012 5 Παραδοτέα Γραπτή Αναφορά σε pdf που περιλαμβάνει: Τις αναλυτικές λύσεις του θεωρητικού τμήματος μαζί με τις απαραίτητες επεξηγήσεις και τεκμηριώσεις όπου αυτό είναι απαραίτητο. Τα αρχεία περιγραϕής της γλώσσας, τα οποία δίνονται ως είσοδος στα μεταεργαλεία Flex και Bison. Screenshots παραδειγμάτων εϕαρμογής του parser. Ένα αρχείο zip, rar, tar.gz που περιλαμβάνει: Την αναφορά σε ηλεκτρονική μορφή Όλα τα αρχεία που αφορούν την υλοποίηση (συμπεριλαμβανομένων των αρχείων που δόθηκαν σαν είσοδο στον parser για να ελεγχθεί η σωστή λειτουργία του). Το αρχείο zip (ή tar.gz) πρέπει να έχει όνομα τους αριθμούς μητρώου των ατόμων της ομάδας διαχωρισμένους με το χαρακτήρα _, και διατεταγμένους από τον μικρότερο στο μεγαλύτερο (π.χ. 3500_3543_4788_4972.zip), και να σταλεί (ΥΠΟΧΡΕΩΤΙΚΑ) με email στο nikolako@... με θέμα ASKISI ARXES GLWSSWN 2013. Στο σώμα του email θα πρέπει να αναφέρονται τα ονοματεπώνυμα, το έτος και οι αντίστοιχοι αριθμοί μητρώου των μελών της ομάδας. Για τυχόν απορίες σχετικά με την άσκηση μπορείτε να χρησιμοποιείτε το forum του μαθήματος ή να έρχεστε στο γραφείο του Θάνου Νικολακόπουλου στα ΠΡΟΚΑΤ (δίπλα στο γραφείο του κ.τσακαλίδη) κατά τις ώρες γραφείου (Δευτέρες 10:00-12:00).