FINAL EXAM [Eksamen] TDT 4205 Compiler Technology [Kompilatorteknikk] Thursday, December 13, 2007 Time: 09:00-13:00

Like dokumenter
FINAL EXAM [Eksamen] TDT 4205 Compiler Technology [Kompilatorteknikk] Wednesday, December 10, 2008 Time: 09:00-13:00

Unit Relational Algebra 1 1. Relational Algebra 1. Unit 3.3

UNIVERSITETET I OSLO

Slope-Intercept Formula

Oppgave 1a Definer følgende begreper: Nøkkel, supernøkkel og funksjonell avhengighet.

MID-TERM EXAM TDT4258 MICROCONTROLLER SYSTEM DESIGN. Wednesday 3 th Mars Time:

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

Dynamic Programming Longest Common Subsequence. Class 27

SAS FANS NYTT & NYTTIG FRA VERKTØYKASSA TIL SAS 4. MARS 2014, MIKKEL SØRHEIM

Andrew Gendreau, Olga Rosenbaum, Anthony Taylor, Kenneth Wong, Karl Dusen

Databases 1. Extended Relational Algebra

UNIVERSITY OF OSLO. Faculty of Mathematics and Natural Sciences

Syntax/semantics - I INF 3110/ /29/2005 1

Call function of two parameters

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

UNIVERSITETET I OSLO

Exercise 1: Phase Splitter DC Operation

EN Skriving for kommunikasjon og tenkning

Neural Network. Sensors Sorter

UNIVERSITETET I OSLO

Dagens tema: Maskinkode. Litt datamaskinhistorie Hva er maskin- og assemblerkode? x86-prosessoren Programkode og variabler

UNIVERSITY OF OSLO DEPARTMENT OF ECONOMICS

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Du må håndtere disse hendelsene ved å implementere funksjonene init(), changeh(), changev() og escape(), som beskrevet nedenfor.

5 E Lesson: Solving Monohybrid Punnett Squares with Coding

Mathematics 114Q Integration Practice Problems SOLUTIONS. = 1 8 (x2 +5x) 8 + C. [u = x 2 +5x] = 1 11 (3 x)11 + C. [u =3 x] = 2 (7x + 9)3/2

Generalization of age-structured models in theory and practice

Information search for the research protocol in IIC/IID

Statisk semantisk analyse - Kap. 6 Foiler ved Birger Møller-Pedersen (Forelest 10/3 og 12/ av Stein Krogdahl)

Hvor mye teoretisk kunnskap har du tilegnet deg på dette emnet? (1 = ingen, 5 = mye)

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

Han Ola of Han Per: A Norwegian-American Comic Strip/En Norsk-amerikansk tegneserie (Skrifter. Serie B, LXIX)

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

Endelig ikke-røyker for Kvinner! (Norwegian Edition)

UNIVERSITETET I OSLO

Maple Basics. K. Cooper

UNIVERSITY OF OSLO DEPARTMENT OF ECONOMICS

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

Oppbygningen av en datamaskin Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen

Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

Besvar tre 3 av følgende fire 4 oppgaver.

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

EXAM TTM4128 SERVICE AND RESOURCE MANAGEMENT EKSAM I TTM4128 TJENESTE- OG RESSURSADMINISTRASJON

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

Programmering. Carsten Wulff

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

Anatomien til en kompilator - I

UNIVERSITETET I OSLO

Kartleggingsskjema / Survey

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

0:7 0:2 0:1 0:3 0:5 0:2 0:1 0:4 0:5 P = 0:56 0:28 0:16 0:38 0:39 0:23

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

Hvor mye praktisk kunnskap har du tilegnet deg på dette emnet? (1 = ingen, 5 = mye)

Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

UNIVERSITY OF OSLO DEPARTMENT OF ECONOMICS

Trigonometric Substitution

Dagens tema INF1070. Makroer. Sanntidsprogrammering. Avbrudd. Bruker- og supermodus. Blanding av C og assemblerkode. Selvmodifiserende kode

Hjemmeeksamen 2 i INF3110/4110

UNIVERSITY OF OSLO DEPARTMENT OF ECONOMICS

KROPPEN LEDER STRØM. Sett en finger på hvert av kontaktpunktene på modellen. Da får du et lydsignal.

Moving Objects. We need to move our objects in 3D space.

INF2820 Datalingvistikk V2011. Jan Tore Lønning & Stephan Oepen

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Den som gjør godt, er av Gud (Multilingual Edition)

TDT4117 Information Retrieval - Autumn 2014

Anatomien til en kompilator - I

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

TMA4329 Intro til vitensk. beregn. V2017

Dagens tema. Makroer Ofte gjentar man kodelinjer når man skriver assemblerkode. Da kan det lønne seg å definere en makro:

Trådløsnett med. Wireless network. MacOSX 10.5 Leopard. with MacOSX 10.5 Leopard

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

TEKSTER PH.D.-VEILEDERE FREMDRIFTSRAPPORTERING DISTRIBUSJONS-E-POST TIL ALLE AKTUELLE VEILEDERE:

3/1/2011. I dag. Recursive descent parser. Problem for RD-parser: Top Down Space. Jan Tore Lønning & Stephan Oepen

Assignment. Consequences. assignment 2. Consequences fabulous fantasy. Kunnskapsløftets Mål Eleven skal kunne

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

Start Here USB *CC * *CC * USB USB

Trådløsnett med Windows XP. Wireless network with Windows XP

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

Eksamen ENG1002/1003 Engelsk fellesfag Elevar og privatistar/elever og privatister. Nynorsk/Bokmål

Fakultet for informasjonsteknologi, Institutt for datateknikk og informasjonsvitenskap AVSLUTTENDE EKSAMEN I. TDT42378 Programvaresikkerhet

Examination paper for BI2034 Community Ecology and Ecosystems

Programmeringsspråket C Del 2. Hans Petter Taugbøl Kragset

Fagevalueringsrapport FYS Diffraksjonsmetoder og elektronmikroskopi

GEO231 Teorier om migrasjon og utvikling

EKSAMENSOPPGAVE I FAG TKP 4105

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

FYSMEK1110 Eksamensverksted 23. Mai :15-18:00 Oppgave 1 (maks. 45 minutt)

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

Gir vi de resterende 2 oppgavene til én prosess vil alle sitte å vente på de to potensielt tidskrevende prosessene.

IN2010: Algoritmer og Datastrukturer Series 2

Transkript:

Norwegian University of Science and Technology NTNU Department of Computer and Information Science FINAL EXAM [Eksamen] TDT 4205 Compiler Technology [Kompilatorteknikk] Thursday, December 13, 2007 Time: 09:00-13:00 Instructional contacts [faglige kontakter] during the exam: Anne C. Elster (918 97 062) Jan Christian Meyer (411 93 264) Aids [hjelpemidler]: C No aids except information on assembler syntax, this year integrated in with this exam for you. [Ingen hjelpemidler bortsett fra assembler-syntaks, i år skrevet inn på disse eksamensarkene for dere] [Ikkje nokon hjelpemidlar tilet, da i år har eg skreve assemblersyntaksen inn i disse eksamensarka for dere] Grades will be assigned within three working weeks. [Karakterer vil bli satt innen tre arbeidsuker] [Karekterar vert sette før tre airbeidsveker er omme] ALL ANSWERS NEED TO BE WRITTEN ON THIS EXAM WHERE INDICATED. USE EXTRA SHEETS, IF NECESSARY, FOR CODING PROBLEMS. [Alle svarene skal føres inn på oppgavearket der det er angitt plass, eventuelt på ekstra ark under kode oppgavene, hvis nødvendig.] [Alle svara skal førast inn på oppgåvearket der det er gjeve plass, eventuelt på ekstra ark under kode oppgåva, om det trengs.] It is NOT necessary to justify your answer on true/false questions. [Det er ikke nødvendig å begrunne TRUE/FALSE spørsmål.] [Ein treng ikkje grunngje TRUE/FALSE spørsmål.] STUDENT NUMBER:

1. Warm-ups [oppvarming] TRUE/ FALSE [Sant/u sant] (10/50) Circle your answers -- Note: You will get a negative score for wrong answers and 0 for not answering or circling both TRUE and FALSE. [Sett sirkel rundt svara -- NB: Dere får negative poeng om dere svarer feil, 0 poeng for å ikke/ikkje svare eller sirkle både TRUE (sant) og FALSE (usant). ] a) Lexers produce tokens [ lexere lager tokens ] TRUE/FALSE b) Yacc produces tokens [ lexere lager tokens ] TRUE/FALSE c) Syntax analysis is also known as parsing TRUE/FALSE [syntaksanalyse er det samme som parsing] d) Semantic analyzers use the symbol table and do type checking TRUE/FALSE [semantiske analysatorer bruker symboltabeller og utfører typesjekk] e) Syntax trees contain records for each variable name, with fields for the attributes of the name [syntakstrær inneholder records for hvert variabelnavn og felt for atributtene til navnet] TRUE/FALSE f) Precedence and associativity declarations make grammars ambigous. TRUE/FALSE [ Precedence og associativity declarations gjør gramatikker tvetydige] g) Top-down parsers do not need to figure out as much of the parse tree for a given amount of input compared to bottom-up parsers TRUE/FALSE h) Heap variables don t explicitly occur in low-level code TRUE/FALSE i) C allows type aliases (C godtar type aliases ) TRUE/FALSE j) Java allows type aliases TRUE/FALSE Page 2 of 11

1. CONTINUED (Fortsettelse av Oppg. 1): k) new(java) or malloc (C/C++) allocate variable space directly on stack TRUE/FALSE [new(java) og malloc(c/c++) alllokerer variabelplass direkte på stakken] l) A frame (activation record) includes local variables TRUE/FALSE [En activation record inkluderer locale variabler] m) Dataflow analysis is not part of code optimization TRUE/FALSE [dataflytanalyse er ikke en del av kodeoptimisering] n) Derived induction variables are only incremented in loop body TRUE/FALSE [utledete induksjonvariable er kun inkrementert innen løkkene] o) Tiling w.r.t. instruction selection involves matching tree pattern to corresponding machine instruction [ Tiling m.h.t. valg av instruksjoner handler om å matche tremøstre til tilsvarende maskinkode] p) It is reasonable to assume a roughly uniform tile cost when selecting instructions on a CISC machine [Er det rimelig å anta at en tilnærmet uniform tiling kostnad ved instruksjonsselektering på en CISC maskin?] TRUE/FALSE TRUE/FALSE q) Dominators in CFGs are use to identify loops TRUE/FALSE [ Dominators I kontrollflytgrafer er nyttet til å identifisere løkker] r) Tree representation may be appropriate for instruction selection TRUE/FALSE [Tree representasjoner kan være rett for instruksjonsutvalg.] s) The Maximal Munch algorithm finds the least expensive tiling of a DAG TRUE/FALSE [ Maksimal Munch algoritmer finner den minst dyre tiling av DAG] t) The Pentium is a tree-address CISC architecture TRUE/FALSE [Pentium er en tre-adresse CISC arkitektur] Page 3 of 11

2. COMPILER BASICS. (10/50) In c)-j), fill in the blanks (fyll inn svarene) a) Which of the following makes a compiler MORE complicated given Lex and Yacc? [Hvilke av de følgende gjør en kompilator MER komplisert gitt Lex & Yacc?] i) type checking iv) NFA ii) objects v) REs (Regular Expressions) iii) ASTs vi) ambiguous grammars [tvetydige grammatikker] b) Which of the following can be recognized by a regular expression? Circle the right answer(s) [Hvilke av de følgende kan gjenkjennes av et regulært uttrykk? Sirkle svar(ene)] i) input containing a string constant ii) input containing nested function declarations iii) input containing a floating point numeric constant iv) order of identifier declarations [rekkefølge av identifikatordeklarasjoner] c) What is the difference between Lex and Yacc? [Skilnaden på Lex og Yacc?] d) List two run-time checks done by a typical compiler: [To kjøretidssjekker gjort av en typisk kompilator?] i) ii) e) How does Yacc handle a grammar that is ambiguous? [Hvordan håndterer Yacc tvetydige gramatikker?] f) When do we need two pointers for the run-time stack (both stack and frame pointer)?[når trengs to pekere for kjøretidsstakken (både stakk og rammepeker?)] g) What is strength reduction? [Hva er strength reduction?] h) How does a compiler type-check a method s calling sequence (unlike a function)? [Hvordan typesjekkes en metodes kallsekvens (i motsetning til funsjon)?] i) Why do compilers NOT use the MOP (Meet Over Paths) solution rather than the MFP (Maximal Fixed Point) solution given that MOP is more precise? j) What is the problem with straightforward translation of low-ir code to assembly instructions on the target machine?[hva er roblemet med en direkte oversettelser av low-ir kode til assembler på målmaskinen?] Page 4 of 11

3. Practical problems (15/50 points) a) Related to PS1: Write an unambigious grammar for Palindromes over the alphabet a, b. (A palindrome is a word which spells the same both forwards and backwards, like Otto ). [Skriv en utvetydig gramatikk for palindromer over alfabetet a, b] b) Consider the following fragment from the Java grammar: [Se på følgende fragment fra Javas gramatikk] primary f ield call field id primary. id call field parm parm ( ) ( primary ) Explain why this grammar is not suitable for a top-down parser. [Forklar hvorfor denne gramatikken ikke er egnet for en Top-down parser.] c) From PS 2: Calculate FIRST and FOLLOW for the nonterminals in the grammar below, and determine which nonterminals can derive ε [Regn ut FIRST og FOLLOW for nonterminals i følgende grammatikk samt si hvilke kan derivere ε] S B D E F S ubdz B Bv w D EF E y ε F x ε nullable? FIRST FOLLOW d) In PS3 you could have done some of the simplifications of the syntax trees directly in the parser (for slightly greater efficiency). Why did we not do that? e) From PS4: Does a VSL program require any heap memory at runtime? Explain. [fra PS4: Trenger et VSL program mine fra heap under kjøring? Forklar ] Page 5 of 11

3 f) Describe one advantage and one disadvantage with inheritance: [Beskriv en fordel og en ulempe med arving ( inheritence )] Advantage [fordel]: Disadvantage [ulempe]: g) Which variable(s) in the following C program may be eliminated by an optimizing compiler? i n t f ( i n t a, i n t b ) i n t c [ 3 ], d, e ; d = a + 1 ; e = g ( c, &b ) ; r e t u r n e + c [ 1 ] + b ; Circle the variable(s) that may be eliminated: [Slå sirkel rundt eliminerbare variabler: ] a b c d e h) Describe an example where loop unrolling would decrease performance: [Beskriv et eksempel hvor utrulling av løkken vil svekke ytelsen] i) Given the following program fragment [Gitt følgende programfragment:] f o r ( i =0 ; i <=100; i ++ ) a [ 2 i ] = b [ 2 i ] ; a [ 2 i +1 ] = b [ 2 i + 1 ] ; name the optimizations which produce : [Navngi optimaliseringene som produserer:] f o r ( i =0 ; i <=100; i ++ ) t = i + i ; a [ t ] = b [ t ] ; a [ t +1 ] = b [ t + 1 ] ; Optimizations: j) Is the precise cost of an instruction sequence easy to predict on a modern processor? [Er den eksakte instruksjonskostnaden lett å beregne på moderne prosessorer?] Why?/Why not? [Hvorfor?/Hvorfor ikke?] Page 6 of 11

4. PROGRAMMING Small instruction set reminder for IA-32: [Liten påminnelse om noen IA-32 instruksjoner:] Instruction Effect mov %eax,(%esp) - Move %eax into (%esp) [Flytt %eax til (%esp)] push <src> pop <dst> - Push value in src onto run-time stack [Skyv <src> på stakk] - Pop value from run-time stack into dst add <src>,<dst> - Add <src> to <dst> [Legg <src> til <dst>] sub <src>,<dst> neg <dst> imul <src> idiv <src> - Subtract src from dst - Negate dst arithmetically - Multiply 64-bit values in registers EDA, EAX by source (EDX contains higher order digits) [Gang 64-bit verdier I register EDA, EDX med <src> (EDX mest sigfikant)] - Divide 64-bit values in registers EDA, EAX by source (EDX contains higher order digits) [Del 64-bit verdiar I register EDA, EDX med <src> (EDX mest sigfikant)] 4a) Warm-up assember programming [3/50] Re-write the following code fragment in IA-32 assembler (using GNU as syntax, just like we did on the Problem Sets).The result should be left in the EAX register. Hint: read the next question [omskriv følgende programsnutt til IA-32 assembler (med GNU as syntaks liksom programeringsoppgavene gitt tidligere i kurset). La resultatet være igjen in EAX registeret] Hint: Les neste oppgave a = (a+b)/2 YOUR CODE[ DIN CODE]: Page 7 of 11

4b) More programming [12/50] [Mer programmering] Consider the scanner/parser program code below. This code forms a skeleton for parsing a simple language consisting of integer arithmetic expressions. It features a set of single-letter run-time variables, which are set as parameters to the resulting program. This allows the specification of programs which compute simple functions like the one in 4a) e.g. compiling (and assembling) the text (a+b)/2 into an executable program myfunc that should result in an executable that gives the following output: %./myfunc 30 10 20 %./myfunc 30 70 50 [se på scanner/parser programmet nedenfor. Denne koden gir et skjelett for parsing av et enkelt språk bestående av heltalls aritmetiske utrykk. Den tar i mot enkle bokstaver som kjørtidsvariabler. Disse er satt i hovedprogrammet. Dette tillater at spesfiksjoner av program som regner ut enkle funksjoner slik som den i 4a), f.eks. kompilasjon (og assembling ) av teksten (a+b)/2 til et eksekverbart program myfunc som gir resultatene ovenfor.] Note that:. All arithmetic is 32-bit integer [alle utregningene er 32-bit heltall]. Variables are single lowercase letters a refers to argument 1, b to argument 2, etc [variablene er enkle små bokstaver a refererer til 1. argument, b til 2. argument osv]. The provided macro ASM_HEAD gives assembly code to convert the program arguments into integers, and places them at offsets -4, -8, -12, from the EBP register. [ Gitt macro ASM_HEAD gir assemblerkode som oversetter programargumenter til heltall og putter dem ved offsettene -4, -8, -12 fra EBP register.]. The result of the evaluated expression must be left in the EAX register [Resultatet av det evaluerte uttrykket skal bli liggende I EAX registeret] Your task is to fill in the missing part of the code in order to complete such an expression compiler, which targets IA-32 assembly language (using GNU as syntax). You should complete the ASM_TAIL macro such that the program outputs the result value using printf before terminating. [Din oppgave er å fylle in de manglende kodesnuttene for en slik uttrykkskompilator som er rettet mot IA-32 assembler (med GNU as syntaks). Du bør fullføre ASM_TAIL makroen slik at programmet gir ut reultatverdiene ved bruk av printf før det terminerer.] Page 8 of 11

/* * calculator_primitive.l * Scanner for a simple expression compiler in Lex / Yacc */ % #include "calculator_primitive.tab.h" % %option noyywrap %% [\ \t]+ \n return NEWLINE; [a-z] yylval = yytext[0]; return IDENTIFIER; [0-9]+ yylval = strtol( yytext, NULL, 10 ); return INTEGER;. return yytext[0]; %% /* * calculator_primitive.y * Parser for a simple expression compiler in Lex / Yacc */ % #include <stdio.h> #include <stdlib.h> #include <string.h> #define ASM_HEAD \ ".data\n"\ "FORMAT_STRING:\n"\ ".string \"%%d\\n\"\n"\ ".globl main\n"\ "main:\n"\ " pushl %%ebp\n"\ " movl %%esp,%%ebp\n"\ " movl 8(%%esp),%%esi /* Store the first parameter (argc) in ESI */\n"\ " decl %%esi /* argc--; argv[0] is not interesting to us */\n"\ " jz noargs /* Skip argument setup if there are none */\n"\ "\n"\ " movl 12(%%ebp),%%ebx /* Store the base addr. of argv in EBX */\n"\ "pusharg: /* Loop over the arguments */\n"\ " addl $4,%%ebx /* Look at the next argument (disregarding argv[0]) */\n"\ " pushl $10 /* strtol arg 3: our number base is 10 */\n"\ " pushl $0 /* strtol arg 2: there is no error pointer */\n"\ " pushl (%%ebx) /* strtol arg 1: Addr. of string containing integer */\n"\ " call strtol /* Call strtol, to convert the string to a 32-bit int */\n"\ " addl $12,%%esp /* Restore the stack pointer to before strtol-params */\n"\ " pushl %%eax /* Push return value from strtol (our new argument) */\n"\ " decl %%esi /* Decrement the number of arguments to go */\n"\ " jnz pusharg /* Loop if there are any arguments left */\n"\ "noargs:\n" Page 9 of 11

#define ASM_TAIL \ " "\ " "\ " "\ " "\ " "\ " leave\n"\ " ret\n" % %token INTEGER IDENTIFIER NEWLINE /* Define operator precedence and associativity. */ %left '+' '-' %left '*' '/' %right UMINUS %% function: expr NEWLINE printf ( " popl %%eax\n" );; expr: expr '+' expr expr '-' expr expr '*' expr expr '/' expr Page 10 of 11

'(' expr ')' '-' expr %prec UMINUS IDENTIFIER INTEGER %% ; /* This definition is required by bison */ int yyerror ( void ) fprintf ( stderr, "Syntax error\n" ); return 1; /* Our main function - translate an expression and quit */ int main ( int argc, char **argv ) printf ( ASM_HEAD ); yyparse(); printf ( ASM_TAIL ); exit ( EXIT_SUCCESS ); Page 11 of 11