Tentamen Compilers (2M220) 19 maart 2002, 9.00u-12.00u

Vergelijkbare documenten
Tentamen Compilers (2IC25) 21 juni 2010, 9.00u-12.00u

Compilers (2IC25) docent: G. Zwaan, HG 5.41, tel. ( )4291, webpagina:

rij karakters scanner rij tokens parser ontleedboom (filteren separatoren) (niet expliciet geconstrueerd) (+ add. inform.) (contextvrije analyse)

Deeltentamen Grammatica s en ontleden 22 december 2005

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser

Ontwerp van Algoritmen: opgaven weken 3 en 4

7 Omzetten van Recursieve naar Iteratieve Algoritmen

compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

PYTHON REEKS 1: BASICS. Mathias Polfliet

Een korte samenvatting van enkele FORTRAN opdrachten

Zelftest Programmeren in COBOL - deel I

Digitale technieken Deeltoets II

Reguliere talen: overzicht

17 Operaties op bits Bitoperatoren en bitexpressies

Automaten & Complexiteit (X )

2 Propositie- en predikatenrekening

Lab Webdesign: Javascript 3 maart 2008

Opgaven bij Hoofdstuk 3 - Productiesystemen

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object.

Inhoud eindtoets. Eindtoets. Introductie 2. Opgaven 3. Terugkoppeling 6

Zelftest Inleiding Programmeren

Schriftelijke zitting Regeltechniek (WB2207) 3 november 2011 van 9:00 tot 12:00 uur

CLIPS en het Rete-algoritme. Productieregels in CLIPS. Feiten. Productiesysteem (voorbeeld)

Stapelgeheugen. Processoren 6 maart 2012

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Formeel Denken. Herfst 2004

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

Programmeren Blok B. Onderwerpen. wstomv/edu/2ip05/ College 8. Tom Verhoeff

Zelftest Programmeren in PL/I

Semantiek (2IT40) Bas Luttik. HG 7.14 tel.: Hoorcollege 8 (7 juni 2007)

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

Tentamen Programmeren in C (EE1400)

continue in een for, while of do lus herhaalt de lus vroegtijdig. De volgende herhaling wordt onmiddellijk begonnen.

10. Controleopdrachten

Uitbreiding van de Model Specification Language (MSL) compiler. Thierry Cornelis

Tentamen Kunstmatige Intelligentie (INFOB2KI)

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie

Tentamen Programmeren in C (EE1400)

Programmeren met Arduino-software

Het omzetten van reguliere expressies naar eindige automaten, zie de vakken Fundamentele Informatica 1 en 2.

Programmeermethoden NA

Reguliere Expressies

EE1400: Programmeren in C BSc. EE, 1e jaar, , 2e college

College I/O

Programmeren in Java les 3

ALGORITMIEK: antwoorden werkcollege 5

Implementatie van Programmeertalen (IPT) 4 mei 2001

Computervaardigheden. Universiteit Antwerpen. Computervaardigheden en Programmatie. Grafieken en Rapporten 1. Inhoud. Wat is scripting?

Vijfde college algoritmiek. 2/3 maart Exhaustive search

Tentamen Programmeren in C (EE1400)

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14

MMI. The Digital World 4. Peter van Kranenburg

import java.io.*; één klasse public class Hallo { public static void main (String[] a) ...met één functie System.out.println("Hallo!

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 )

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Toets 1 IEEE, Modules 1 en 2, Versie 1

Pascal uitgediept Data structuren

Modelleren en Programmeren

9 Meer over datatypen


Programmeermethoden NA. Week 6: Lijsten

Tentamen TI2310 Automaten en Talen. 19 april 2012, uur

Compilers.

Semantiek (2IT40) Jos Baeten. HG 7.19 tel.: Hoorcollege 3 (12 april 2007)

Variabelen en statements in ActionScript

Vaak wil je een code schrijven, waar je verschillende acties uitvoeren voor verschillende beslissingen. Je kan daarbij keuzestructuren gebruiken.

R e c h t e h a k e n

Programmeren & Correctheid

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Programmeermethoden. Functies vervolg. Walter Kosters. week 5: 1 5 oktober kosterswa/pm/

Wat is FP? The Haskell School of Expression. Functies. Types 1+1=2. Iedere expressie (en waarde) heeft een type.

TENTAMEN WISKUNDIGE BEELDVERWERKINGSTECHNIEKEN

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Hertentamen 8D040 - Basis beeldverwerking

OEFENINGEN PYTHON REEKS 1

Vijfde college algoritmiek. 9 maart Brute Force. Exhaustive search

Introductie tot de cursus

Instructies en blokken

Week 2 : Hoofdstukken 2 en 6; extra stof: inleiding pointers

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

Opdrachten herhalen. public void tekenscherm (object o, PEA pea) { int x; x = 1; zolang de voorwaarde geldig is

Schriftelijke zitting Systeem- en regeltechniek 2 (WB2207) 31 januari 2008 van 9:00 tot 12:00 uur

Deeltoets Digitale technieken

Kennisrepresentatie & Redeneren. Piter Dykstra Instituut voor Informatica en Cognitie

Automaten. Informatica, UvA. Yde Venema

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding:

Ontwerp van Algoritmen 1: OpgavenBundel. Rob R. Hoogerwoord

Algoritmisch Denken: Dodo s Bit Parity

ALGORITMIEK: antwoorden werkcollege 5

ALGORITMIEK: antwoorden werkcollege 5

Figuur 1: Blok-schema van een DC motor, a) Geef de overdrachtsfuntie G(s) = T(s)/V(s). Schrijf G(s) in de vorm K B(s) A( s

Antwoorden vragen en opgaven Basismodule

2IV10 Oefentoets 2010

Automaten & Complexiteit (X )

Computerarchitectuur en netwerken. Memory management Assembler programmering

Transcriptie:

12/k Tentamen Compilers (2M220) 19 maart 2002, 9.00u-12.00u 1. Beschouw de volgende deelverzameling van de ASCII-karakters V = { 0, 1,..., 9, A, B,..., Y, Z, a, b,..., y, z } De karakters in V staan vermeld in de volgorde zoals ze, van laag naar hoog, voorkomen in de ordening van de ASCII-karakters. Dit is ook de ordening binnen de verzameling V. De representatie van een deelverzameling van V bestaat uit achtereenvolgens het karakter [ eventueel het karakter ^ (al of niet complement) 0ofméér keren -óf 1 karakter uit V (los karakter) -óf 1 karakter uit V, gevolgd door het karakter - (koppelteken), gevolgd door 1 karakter uit V (karakterinterval, d.w.z. alle karakters in de ordening tussen het eerste en het tweede karakter) het karakter ] Aanwezigheid van het karakter ^ duidt aan dat het complement (t.o.v. V ) van de bedoelde deelverzameling wordt beschreven. De gerepresenteerde verzameling bestaat uit alle losse karakters en alle karakters in de karakterintervallen in de representatie (of juist het complement daarvan t.o.v. V als het karakter ^ aanwezig is). Enkele voorbeelden representatie deelverzameling [] [a-z] { a, b,..., y, z } [^a-z] { 0, 1,..., 9, A, B,..., Y, Z } [^] V [0-z] V [0A-C7-9Za] { 0, 7, 8, 9, A, B, C, Z, a } [^0-9A-Z] { a, b,..., y, z } (1) (a) Geef een reguliere expressie e die representaties van deelverzamelingen van V volgens bovenstaande regels beschrijft en voldoet aan det(e, { }). (1) (b) Construeer uit de als antwoord bij (a) gegeven reguliere expressie volgens het T- recept een acceptorprogramma in GCL. U mag daarbij de gebruikelijke vereenvoudigingen toepassen en hoeft alleen het eindresultaat te geven. 1

2. Beschouw de volgende contextvrije grammatica voor boolse expressies S EXPR EXPR EXPR or EXPR EXPR cor EXPR EXPR and EXPR EXPR cand EXPR ( EXPR ) ID not ID true false ID a b c d (1) (a) Geef Follow(EXPR), LA(EXPR EXPR or EXPR), LA(EXPR not ID) en LA(EXPR ID). (1) (b) Waarom voldoet bovenstaande grammatica niet aan de LL(1)-eisen? Beschrijf de taal voortgebracht door deze grammatica (als S als startsymbool wordt genomen) door een LL(1)-grammatica die tevens uitdrukt dat operatoren and en cand dezelfde prioriteit hebben, dat operatoren or en cor dezelfde prioriteit hebben en dat de prioriteit van and/cand hoger is dan die van or/cor. (1) (c) Geef de recursive descent parsing procedures in GCL behorend bij de LL(1)- grammatica uit uw antwoord op vraag (b). Ga daarbij uit van een lexical scanner geïmplementeerd middels een procedure NEXTSYM die aan een globale variabele sym het eerstvolgende token toekent volgens het volgende schema "or" orsym "cor" corsym "and" andsym "cand" candsym "not" notsym a b c d idsym "true" truesym "false" falsesym (1) (d) De operatoren or en and zijn de bekende boolse operatoren met vertalingen τ EXPR (e 1 or e 2 )α τ EXPR (e 1 and e 2 )α = = τ EXPR (e 1 )α τ EXPR (e 1 )α τ EXPR (e 2 )α τ EXPR (e 2 )α OR AND De operator cor is de conditionele or-operator en de operator cand is de conditionele and-operator. Deze operatoren zijn als volgt gedenieerd: (i) true cor e = true (iii) false cand e = false (ii) false cor e = e (iv) true cand e = e waarbij het in gevallen (i) en (iii) is toegelaten dat expressie e niet te berekenen is (berekening leidt tot abortie, denk bijv. aan delen door 0). Voor de berekening van 2

e 1 cor e 2 resp. e 1 cand e 2 wordt eerst e 1 berekend en, als dat nodig is (gevallen (ii) en (iv)), e 2. Geef denities van de vertalingen τ EXPR (e 1 cor e 2 )α en τ EXPR (e 1 cand e 2 )α die overeenstemmen met de gegeven semantiek van de operatoren cor en cand. De TL-interpretator is als bijlage toegevoegd. 3. Aan de voorbeeldtaal PL worden for-statements toegevoegd beschreven door de volgende productieregel STAT for ID := EXPR until EXPR do STATS od Nonterminal ID brengt op niet nader gespeciceerde wijze identiers voort. Het forstatement for x := e b until e e do ss od moet voldoen aan de volgende contextcondities variabele x is een verse variabele, d.w.z. x komt niet voor in de declaraties en x is niet geïntroduceerd door een omhullend for-statement (denk aan nesting van for-statements) x mag als variabele van het type int gebruikt worden in statements ss, maar niet in expressies e b en e e (het for-statement declareert als het ware een extra variabele x van het type int) expressies e b en e e zijn van het type int en heeft een semantiek die gelijk is aan die van binnenblok [ var x : int, eind : int x := e b ; eind := e e ; while x eind do ss; x := x +1od ] (1) (a) Geef een geattribueerde versie van bovenstaande productieregel met bijbehorende regelcondities die de gegeven contextcondities uitdrukt. Ga er vanuit dat de nonterminals als volgt geattribueerd zijn: STAT D, ID +Name, EXPR D, +Type en STATS D waarin D = bag of Name Type (hint: Beschouw het inherited attribuut van STATS en STAT als de bag van alle gedeclareeerde variabelen aangevuld met alle (integer)variabelen die door omhullende for-statements zijn geïntroduceerd). (1) (b) Geef een vertaling naar TL van dit for-statement, d.w.z. geef een correcte denitie van τ STAT (for x := e b until e e do ss od)α, ffa waarin de extra parameter ffa van de vertaalfunctie aangeeft vanaf welk adres cellen in het datageheugen beschikbaar zijn voor de opslag van tijdelijke extra variabelen. De TL-interpretator (uitgebreid met o.a. instructie INC) is als bijlage toegevoegd. 3

4. Aan voorbeeldtaal PL worden case-expressies toegevoegd beschreven door de volgende productieregel EXPR ( EXPR? EXPR {: EXPR} EXPR ) De case-expressie e =(e 0? e 1 : e 2 : : e k e k+1 ) moet voldoen aan de volgende contextcondities e 0 moet het type int hebben e 1, e 2,..., e k en e k+1 moeten hetzelfde type hebben en dit type is ook het type van de hele expressie en heeft als waarde val(e) = { val(ei ) als val(e 0 )=i en 1 i k val(e k+1 ) anders (1) (a) Geef een geattribueerde versie van bovenstaande productieregel met bijbehorende regelcondities die de gegeven contextcondities uitdrukt. Ga er daarbij vanuit dat de nonterminal EXPR als volgt geattribueerd is: EXPR D, +Type met D = bag of Name Type. (1) (b) Geef een vertaling naar TL van deze expressie, d.w.z. geef een correcte denitie van τ EXPR ((e 0? e 1 : e 2 : : e k e k+1 ))α beoordeling De punten per (deel)opgave staan in de marge vermeld. Het cijfer wordt als volgt bepaald: (som van behaalde punten + evt. behaald bonuspunt) min 10 waarin met bonuspunt wordt bedoeld het punt behaald met de opdrachten in het studiejaar 2001/2002. (Voltooiïng van opdrachten 1, 2 en 3 tezamen levert 1 bonuspunt, voltooiïng van opdracht 4 een 1 2 bonuspunt.) Het bonuspunt behaald in studiejaar 2001/2002 telt mee voor alle tentamens in dat zelfde studiejaar. 4

TL-interpretator var run : Bool ; in : Instr; v, v 1,v 2 : Value ; l : Plabel ; m : Memaddress es, ip, run, rs, ds, ffa :=, 0, true,,, 0 ; do run in := P [ ip]; ip := ip +1 ; case in of SUB ADD MUL DIV MOD : v 1,v 2,es := Top(es),Top Pop(es),Pop Pop(es) ; if v 1,v 2 :: iv(x 1 ),iv(x 2 ) es := iv(x 2 x 1 ) es [] v 1,v 2 :: rv(y 1 ),rv(y 2 ) es := rv(y 2 y 1 ) es : v 1,v 2,es := Top(es),Top Pop(es),Pop Pop(es) ; if v 1,v 2 :: iv(x 1 ),iv(x 2 ) es := iv(x 2 mod x 1 ) es INC : v, es := Top(es),Pop(es) ; if v :: iv(x) if x < MaxInt es := iv(x +1) es [] v :: rv(y) if x < MaxReal 1 es := rv(y +1) es [] v :: bv(z) if z es := bv( z) es [] v :: cv(c) if ord(c) < 255 es := cv(chr(ord(c) + 1)) es DEC EQL : v 1,v 2,es := Top(es),Top Pop(es),Pop Pop(es) ; es := bv(v 1 = v 2 ) es NEQ : v 1,v 2,es := Top(es),Top Pop(es),Pop Pop(es) ; es := bv(v 1 v 2 ) es LEQ : v 1,v 2,es := Top(es),Top Pop(es),Pop Pop(es) ; if v 1,v 2 :: iv(x 1 ),iv(x 2 ) es := bv(x 2 x 1 ) es [] v 1,v 2 :: rv(y 1 ),rv(y 2 ) es := bv(y 2 y 1 ) es [] v 1,v 2 :: bv(z 1 ),bv(z 2 ) es := bv(z 2 z 1 ) es [] v 1,v 2 :: cv(c 1 ),cv(c 2 ) es := bv(c 2 c 1 ) es LESS GEQ GTR AND : v 1,v 2,es := Top(es),Top Pop(es),Pop Pop(es) ; if v 1,v 2 :: bv(z 1 ),bv(z 2 ) es := bv(z 2 z 1 ) es OR 5

NEG : v, es := Top(es),Pop(es) ; if v :: iv(x) es := iv( x) es [] v :: rv(y) es := rv( y) es [] v :: bv(z) es := bv( z) es STO(m) : M[m],es := Top(es),Pop(es) LDV(m) : es := M[m] es LDI : v, es := Top(es),Pop(es) ; if v :: iv(x) es := M[x] es STI : v 1,v 2,es:= Top(es),Top Pop(es),Pop Pop(es) ; if v 2 :: iv(x) M[x] :=v 1 LDC(v) : es := v es DUP : es := Top(es) es POP : es := Pop(es) PUT : es, out := Pop(es), out Top(es) GET : es, inp := First(inp) es, Rest(inp) CHK(v 1,v 2 ) : v := Top(es) ; if v 1,v 2,v :: iv(x 1 ),iv(x 2 ),iv(x) es := bv(x 1 x x x 2 ) es TJP(l) : v, es := Top(es),Pop(es) ; if v :: bv(z) if z ip := Lmap(l) [] z skip FJP(l) UJP(l) XJP HLT : v, es := Top(es),Pop(es) ; if v :: bv(z) if z skip [] z ip := Lmap(l) : ip := Lmap(l) : v, es := Top(es),Pop(es) ; if v :: iv(x) ip := ip 1+x : run := false od esac 6