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

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

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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 1. Πράξεις Τελεστές Έλεγχος Ροής

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

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

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

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

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

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

Κεφάλαιο : Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα

Κεφάλαιο : Επαναλήψεις (for, do-while)

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΛΟΠΟΝΝΗΣΟΥ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΥΠΟΛΟΓΙΣΤΩΝ. Α.Μ

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

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

Γλώσσες Προγραμματισμού Εφαρμογών - ΜΕΠΒ20

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

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

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

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 8 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

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

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

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

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

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

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

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

ΕΠΛ 012. JavaScripts

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

Εργαστήριο 4_1 Λεκτική Ανάλυση - Flex Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

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

Προγραμματισμός Η/Υ. Ενότητα 5: Εντολές Επανάληψης

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

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

Παράλληλη Επεξεργασία Κεφάλαιο 10 ο Αντίγραφα Εργαζομένων

Εισαγωγή στους Η/Υ και τις Εφαρμογές Ενότητα 5: Επεξεργασία δεδομένων με τη γλώσσα προγραμματισμού python Υπο-ενότητα 5.2: Συμβολοσειρές-Έλεγχος Ροής

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

Νικόλαος Μιχαλοδημητράκης Σημειώσεις C (Εργαστήριο) 5 ο Μέρος 5 ο Μέρος Εντολές Επανάληψης: FOR - WHILE. Περιγραφή

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

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

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

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

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

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

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

10. Εντολές επανάληψηςκαι οι εντολές

Αποτελέσματα προόδου

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

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

C: Από τη Θεωρία στην Εφαρμογή

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

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

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

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

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

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

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

Μεταφραστής (Compiler)

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

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

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

Παίρνοντας Αποφάσεις 1

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

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

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

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

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

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

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

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

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

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

HY340, 2009 Α. Σαββίδης Slide 2 / 143. HY340, 2009 Α. Σαββίδης Slide 3 / 143. HY340, 2009 Α. Σαββίδης Slide 4 / 143

Προγραμματισμός σε C. Πράξεις με bits (bitwise operators)

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

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

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

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

Transcript:

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

Dana flex ML-Lex ocamllexalex bison ML-Yacc ocamlyacchappy JavaCC!

Dana Dana and as begin break byte continue decl def elif else end exit false if is int loop not or ref return skip true var 0 42 1284 00200 \ \ a 1 \n \ \x1d abc Route66 Helloworld!\n Name:\t\ DouglasAdams\ \nvalue:\t42\n + * / %! & = <> < > <= >=

\n \t \r \0 \\ \ \ \ \xnn nn ( ) [ ], : := Dana # (* *) Dana int 32768 32767 byte 0 255 Dana t [n] n t if byte Dana

var is var var i is int var x y z is int var s is byte [80] def is : as is Dana ref ref def p1 def p2: n as int def p3: a b as int, c as ref byte def f1 is int: x as int def f2 is int: s as byte [] def matrix_mult: a b c as int [10][10] Dana decl def Dana

Dana if byte [n] n \0 Dana l t [m] e int l[e] t e n n l n n < m Dana int byte true false \x01 \0 Dana and or

Dana +! * / % & + = <> > < <= >= not and or Dana + int! not! byte not + * / % int byte = <> < > <= >= int byte & byte & false false true false false true and or Dana f t f(e 1,..., e n ) t n f

t t t t Dana skip l := e e l l t e t : if c 1 : b 1 elif c 2 : b 2 else : b 2 elif else c 1 c 2 b 1 b 2 b 3 loop i : b i b loop b break exit return break : i i i : i continue : i i i : i exit return : e e t e t

Dana if loop begin end def fact is int: n as int begin if n <= 1: begin return: 0 end else: begin return: n * fact(n-1) end end begin end begin end Dana Dana def if elif else loop def if else begin def fact is int: n as int if n <= 1: return: 0 else: return: n * fact(n-1) def if else else def

Dana decl writeinteger: n as int decl writebyte: b as byte decl writechar: b as byte decl writestring: s as byte [] Dana writebyte writechar decl readinteger is int decl readbyte is byte decl readchar is byte decl readstring: n as int, s as byte [] Dana readstring \0 decl extend is int: b as byte decl shrink is byte: i as int byte int byte decl strlen is int: s as byte [] decl strcmp is int: s1 s2 as byte [] decl strcpy: trg src as byte [] decl strcat: trg src as byte [] Dana

::= ::= def ( ) ::= [ is ] [ : (, ) ] ::= ( ) + as ::= int byte ::= ( [ ] ) ::= ref [ ] ( [ ] ) ::= ::= decl ::= var ( ) + is ::= skip := exit return : if : ( elif : ) [ else : ] loop [ ] : break [ : ] continue [ : ] ::= begin ( ) + end ( ) + ::= [ : (, ) ] ::= ( [ (, ) ] ) ::= [ ] ::= ( ) ( + - ) ( + - * / % ) true false! ( & ) ::= ( ) not ( and or ) ( = <> < > <= >= ) Dana Dana def hello writestring: Hello world!\n

left middle right n Dana hanoi def solve def hanoi: rings as int, source target auxiliary as byte [] def move: source target as byte [] writestring: Moving from writestring: source writestring: to writestring: target writestring:.\n if rings >= 1: hanoi: rings-1, source, auxiliary, target move: source, target hanoi: rings-1, auxiliary, target, source var numberofrings is int writestring: Rings: numberofrings := readinteger() hanoi: numberofrings, left, right, middle

Dana n n 6k ± 1 k t := 6 n 6 t 1 t + 1 t t < 0 t t < 2 t t = 2 t t t i := 3 t/2 2 t i t t Dana def main def prime is byte: n as int var i is int if n < 0: return: prime(-n) elif n < 2: return: false elif n = 2: return: true elif n % 2 = 0: return: false else: i := 3 loop: if i > n / 2: break elif n % i = 0: return: false i := i + 2 return: true var limit number counter is int writestring: Limit: limit := readinteger() writestring: Primes:\n counter := 0 if limit >= 2: counter := counter + 1 writeinteger: 2 writestring: \n if limit >= 3: counter := counter + 1 writeinteger: 3

writestring: \n number := 5 loop: if number > limit: break elif prime(number): counter := counter + 1 writeinteger: number writestring: \n number := number + 2 if number > limit: break elif prime(number): counter := counter + 1 writeinteger: number writestring: \n number := number + 4 writestring: \ntotal: writeinteger: counter writestring: \n Dana def main var r is byte [32] def reverse: s as byte [] var i l is int l := strlen(s) i := 0 loop: if i < l: r[i] := s[l-i-1] i := i+1 else: break r[i] := \0 reverse: \n!dlrow olleh writestring: r Dana x n Dana x[0], x[1],... x[n 1] i n 2 x[i] > x[i + 1]

x[i] x[i + 1] x Dana def main def bsort: n as int, x as int [] def swap: x y as ref int var t is int t := x x := y y := t var changed is byte var i is int loop: changed := false i := 0 loop: if i < n-1: if x[i] > x[i+1]: swap: x[i], x[i+1] changed := true i := i+1 else: break if not changed: break def writearray: msg as byte [], n as int, x as int [] var i is int writestring: msg i := 0 loop: if i < n: if i > 0: writestring:, writeinteger: x[i] i := i+1 else: break writestring: \n var seed i is int var x is int [16] seed := 65 i := 0 loop: if i < 16: seed := (seed * 137 + 220 + i) % 101 x[i] := seed i := i+1 else: break writearray: Initial array:, 16, x bsort: 16 x writearray: Sorted array:, 16, x

f i *.eds *.imm *.asm /tmp/hello.eds /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, όρισμα-2 <tab> εντολή <tab> όρισμα-1, όρισμα-2