Μεταγλωττιστές 2018 Θέμα εργασίας

Σχετικά έγγραφα
Μεταγλωττιστές 2017 Θέμα εργασίας

Μεταγλωττιστές 2019 Θέμα εργασίας

Η γλώσσα Edsger. Μεταγλωττιστές 2016 Θέμα εργασίας

Μεταγλωττιστές 2015 Θέμα εργασίας. Η γλώσσα Tony. Sir Charles Antony (Tony) Richard Hoare (1934 ) Prof. Emeritus, Oxford University.

Η γλώσσα Pazcal Μεταγλωττιστές

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

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

Η γλώσσα Llama Μεταγλωττιστές

ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ Τμήμα Ηλεκτρονικών Μηχανικών & Μηχανικών Υπολογιστών Τομέας Πληροφορικής

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

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

Προχωρημένες έννοιες προγραμματισμού σε C

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

Η γλώσσα C. Δείκτες (pointers)

make Προγραμματισμός II 1

Διαδικασίες ΙI. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 5

Μεταγλωττιστές Βελτιστοποίηση

Προέλευση της Pazcal ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Υλοποίηση ΛΑ με το flex

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

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

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Μεταγλωττιστές Βελτιστοποίηση

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

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

Η γλώσσα C. Δείκτες (pointers)

1 η ΑΣΚΗΣΗ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Ακ. έτος , 5ο Εξάμηνο, Σχολή ΗΜ&ΜΥ

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

Ενότητα 5: «Εισαγωγή στον Προγραμματισμό. Απλές ασκήσεις με γλώσσα C»

Συναρτήσεις και διαδικασίες

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

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

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

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

Πίνακες. Οι πίνακες αποτελούν ένα σηµαντικό δοµηµένο τύπο δεδοµένων (structured data type) ή πιο απλά µία δοµή δεδοµένων (data structure).

Επεξεργασία κειμένου και συμβολοσειρών σε C

Αλφαριθμητικά, πίνακες και δείκτες

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

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

Ενσωματωμένα Συστήματα

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

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

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

Διάλεξη 7: Συμβολοσειρές, Δείκτες και Παραδείγματα

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 19. Αλφαριθμητικά II. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

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

Σημειώσεις δεύτερης εβδομάδας

Περίληψη Φροντιστηρίου. Κατανεμημένα Συστήματα Ι. Το περιβάλλον DAP - Χαρακτηριστικά. Το περιβάλλον DAP Τι είναι.

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Συμβολοσειρές, Δείκτες και Παραδείγματα (Κεφάλαιο 13, KNK-2ED)

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

Ενδεικτική περιγραφή μαθήματος

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

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

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

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

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

Ç ãëþóóá Alan. ÌåôáãëùôôéóôÝò 2011 ÈÝìá åñãáóßáò

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

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

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

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

Διάλεξη 6: Δείκτες και Πίνακες

CE121 Προγραµµατισµός 2. Εισαγωγή σε Makefiles. CE121 -

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

Προγραμματισμός Συστημάτων

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

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

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

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

Συµβολοσειρές - Strings

ΕΠΛ131 Αρχές Προγραμματισμού

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

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 2

ΕΙΣΟ ΟΣ-ΕΞΟ ΟΣ Ε ΟΜΕΝΩΝ

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Κεφάλαιο : Επαναλήψεις (o βρόγχος While) (Διάλεξη 9) Δομές Έλεγχου Προγράμματος

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

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

Γεώργιος Δημητρίου Προσαρμογή Εισαγωγικού Μαθήματος από Prof. Stephen A. Edwards (Columbia University)

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

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

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

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

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

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

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

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

Προγραμματισμός Ι. Θεματική ενότητα 6: Πίνακες αλφαριθμητικά

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Στοιχεία εξεταζόµενου Αριθµός Απάντησης Βαθµολογία. Σύνολο (Θέµα 4 ο )

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

add $t0,$zero, $zero I_LOOP: beq $t0,$s3, END add $t1, $zero,$zero J_LOOP: sub $t2, $s3, $t0 add $t2, $t2, $s1 int i, j, tmp; int *arr, n;

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

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

Transcript:

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τομέας Τεχνολογίας Πληροφορικής & Υπολογιστών Εργαστήριο Τεχνολογίας Λογισμικού Μεταγλωττιστές 0 Θέμα εργασίας (1 ) https://courses.softlab.ntua.gr/compilers/ Αθήνα, Φεβρουάριος 0

Alan flexml-lexocamllexalex bisonml-yaccocamlyacchappy JavaCC

1 1 1 1 1 1 1 0 1 0 1 Alan Alan byte else false if int proc reference return while true 0 0000 \ \ a 1 \n \ \x1d abc Route Hello world!\n Name:\t\ Douglas Adams\ \nvalue:\t\n = + - * / %! & ==!= < > <= >=

\n \t \r \0 \\ \ \ \ \xnn nn 1 ( ) [ ] {, : ; Alan -- (* *) 1 1 1 1 1 1 0 Alan int byte 0 Alan t [] t if while 1 Alan

1 i : int; b : byte; s : byte [0]; 1 1 1 1 1 1 0 1 0 1 proc void Alan reference p1 () : proc p (n : int) : proc p (a : int, b : int, b : reference byte) : proc f1 (int x) : int f (s : reference byte []) : int Alan { 0 1 Alan Alan if while

1 1 1 1 1 1 a t [] i int a[i] t i a byte[n+ 1] n byte 0 1 0 1 Alan int byte Alan true false 0 1 Alan Alan + - int! + - * / % int byte ==!= < > <= >= int byte

Alan + -! * / % + - ==!= > < <= >= & 1 & Alan 1 1 1 1 1 1 f t t proc f(e 1,..., e n ) t n f t t t t 0 1 Alan ; l = e; e l l t e t { f(e 1,..., e n ); f proc

1 if (c) s 1 else s c s 1 s else while (c) s c s return e ; e proc e e 1 1 1 Alan 1 1 1 writeinteger (n : int) : proc writebyte (b : byte) : proc writechar (b : byte) : proc writestring (s : reference byte []) : proc 0 1 Alan writebyte writechar readinteger () : int readbyte () : byte readchar () : byte readstring (n : int, s : reference byte []) : proc 0 1 Alan readstring \0 extend (b : byte) : int shrink (i : int) : byte byte int byte

1 strlen (s : reference byte []) : int strcmp (s1 : reference byte [], s : reference byte []) : int strcpy (trg : reference byte [], src : reference byte []) : proc strcat (trg : reference byte [], src : reference byte []) : proc Alan 1 1 1 1 1 1 1 0 1 ::= ::= ( [ ] ) : ( ) ::= (, ) ::= : [ reference ] ::= int byte ::= [ [ ] ] ::= proc ::= ::= : [ [ ] ] ; ::= ; = ; ; if ( ) [ else ] while ( ) return [ ] ; ::= { ( ) ::= ( [ ] ) ::= (, ) ::= ( ) ( + - ) ( + - * / % ) ::= [ [ ] ] ::= true false ( )! ( ==!= < > <= >= ) ( & ) Alan

left middle right Alan 1 hello () : proc { writestring( Hello world!\n ); n Alan hanoi 1 solve () : proc hanoi (rings : int, source : reference byte [], target : reference byte [], auxiliary : reference byte []) : proc move (source : reference byte [], target : reference byte[]) : proc { writestring( Moving from ); writestring(source);

1 1 writestring( to ); writestring(target); writestring(.\n ); 1 1 1 1 0 1 { -- hanoi if (rings >= 1) { hanoi(rings-1, source, auxiliary, target); move(source, target); hanoi(rings-1, auxiliary, target, source); -- hanoi NumberOfRings : int; { -- solve writestring( Rings: ); NumberOfRings = readinteger(); hanoi(numberofrings, left, right, middle ); -- solve Alan n n k ± 1 k t := n t 1 t + 1 t t < 0 t t < t t = t t t i := t/ t i t t Alan 1 main () : proc prime (n : int) : int i : int; { if (n < 0) return prime(-n); else if (n < ) return 0; else if (n == ) return 1; else if (n % == 0) return 0;

1 1 1 1 1 1 else { i = ; while (i <= n / ) { if (n % i == 0) return 0; i = i + ; return 1; 0 1 0 1 0 1 0 1 limit : int; number : int; counter : int; { -- main writestring( Limit: ); limit = readinteger(); writestring( Primes:\n ); counter = 0; if (limit >= ) { counter = counter + 1; writeinteger(); writestring( \n ); if (limit >= ) { counter = counter + 1; writeinteger(); writestring( \n ); number = ; while (number <= limit) { if (prime(number - 1) == 1) { counter = counter + 1; writeinteger(number - 1); writestring( \n ); if (number!= limit & prime(number + 1) == 1) { counter = counter + 1; writeinteger(number + 1); writestring( \n ); number = number + ; writestring( \ntotal: ); writeinteger(counter); writestring( \n ); -- main Alan 1 main () : proc r : byte [];

1 1 1 1 1 1 0 1 reverse (s : reference byte []) : proc i : int; l : int; { l = strlen(s); i = 0; while (i < l) { r[i] = s[l-i-1]; i = i+1; r[i] = \0 ; { -- main reverse( \n!dlrow olleh ); writestring(r); -- main Alan x n Alan x[0], x[1],... x[n 1] i n x[i] > x[i + 1] x[i] x[i + 1] x Alan 1 1 1 1 1 1 1 0 main () : proc bsort (n : int, x : reference int []) : proc swap (x : reference int, y : reference int) : proc t : int; { t = x; x = y; y = t; changed : byte; i : int; { -- bsort changed = y ; while (changed == y ) { changed = n ; i = 0;

1 0 1 0 1 0 1 while (i < n-1) { if (x[i] > x[i+1]) { swap(x[i], x[i+1]); changed = y ; i = i+1; -- bsort writearray (msg : reference byte [], n : int, x : reference int []) : proc i : int; { writestring(msg); i = 0; while (i < n) { if (i > 0) writestring(, ); writeinteger(x[i]); i = i+1; writestring( \n ); seed : int; x : int [1]; i : int; { -- main seed = ; i = 0; while (i < 1) { seed = (seed * 1 + 0 + i) % 1; x[i] = seed; i = i+1; writearray( Initial array:, 1, x); bsort(1, x); writearray( Sorted array:, 1, x); -- main

-f -i *.alan *.imm *.asm /tmp/hello.alan /tmp/hello.imm /tmp/hello.asm -Ο -f -i Makefile make make clean bison flex make distclean Μakefile flex bison CC=gcc CFLAGS=-Wall compiler: compiler.lex.o compiler.tab.o symbol.o symbolc.o $(CC) $(CFLAGS) -o compiler compiler.lex.o compiler.tab.o \ symbol.o symbolc.o compiler.lex.c: compiler.l compiler.tab.h flex -it compiler.l > compiler.lex.c compiler.tab.c compiler.tab.h: compiler.y bison -dv compiler.y clean: $(RM) *.o compiler.tab.c compiler.tab.h compiler.lex.c \ compiler core printf( %d: %s, %s, %s, %s\n,...) ετικέττα: <tab> εντολή <tab> όρισμα-1, όρισμα- <tab> εντολή <tab> όρισμα-1, όρισμα-