INF2100. Oppgaver 23. og 24. september 2010

Like dokumenter
INF2100. Oppgaver 6. og 11. oktober 2011 C 100 X 10

INF2100. Oppgaver 9. oktober 2012 C 100 X 10

INF2100. Oppgave 1, 2 og 3. Løsningsforslag til oppgaver 23. og 24. september Her er det mange mulige løsninger her er én: import java.io.

INF2100. Oppgaver uke 40 og

INF2100. Oppgave 1. Oppgave 2 4. Løsningsforslag til oppgaver uke 40 og Se figur 1 på neste side.

INF2100. Oppgaver 26. september til 1. oktober 2007

IN2030. Oppgave 1. Løsningsforslag. Uke (Disse filene finnes også i mappen ~inf2100/e/e2/.)

Dagens tema: Prosjektet. Hva er en god feilmelding? Melding med mening. Ubrukelig. Hvor på linjen? Noe bedre. Enda bedre

Prosjektet. Dagens tema: Moduler i prosjektet error log chargenerator scanner. Enum klasser i Java. Programmeringsverktøy Emacs Eclipse

Dagens tema: Kompilatorens struktur. De ulike modulene Prosjektet. Oppbyggingen Pakker i Java Avbrudd («exceptions») Enum-klasser i Java

Dagens tema: Kompilatorens struktur. De ulike modulene Prosjektet. Oppbyggingen Pakker i Java Avbrudd («exceptions») Enum-klasser i Java

Syntaksanalyse. Skanner (repetisjon) Parsering top-down bottom-up LL(1)-parsering Recursive descent Forutsetninger. IN 211 Programmeringsspråk

Del 3: Evaluere uttrykk

Dagens tema: Kompilatorens struktur. De ulike modulene Prosjektet. Oppbyggingen Pakker i Java Enum-klasser i Java

Dagens tema: Kompilatorens struktur. De ulike modulene Prosjektet. Oppbyggingen Pakker i Java Enum-klasser i Java

Dagens tema: Mer av det dere trenger til del 1

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

Dagens tema: 12 gode råd for en kompilatorskriver. Prosjektet. Modifikasjon av grammatikken. Utifra dette RusC programmet:

Dagens tema: 12 gode råd for en kompilatorskriver. Prosjektet. Koblingen mellom grammatikken og klasser. Utifra dette RusC-programmet:

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Dagens tema: Resten av det dere trenger til del 1

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

INF 1010, vår 2005 Løsningsforslag uke 11

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

Dagens tema: Kompilatorens struktur. De ulike modulene Prosjektet. Oppbyggingen Pakker i Java Enum-klasser i Java

Dagens tema: Resten av det dere trenger til del 1

Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen

Dagens tema: Nødvendig Java. De ulike modulene i prosjektet vårt Prosjektet

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet (kalt kildekoden): Hva er kompilering?

Hva skal gjøres? Dagens tema: Hva gjør en kompilator? Forenkling

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

INF5110, 15/ Dagens temaer: Avslutning kap. 4 Begynne på kap. 5 Se på oppgave. Stein Krogdahl, Ifi UiO

TOD063 Datastrukturer og algoritmer

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

OPPGAVE 5b og 8b Java Kode

Dagens tema: Nødvendig Java. De ulike modulene Prosjektet. Strukturen Pakker i Java Avbrudd («exceptions») Enum-klasser i Java Hvilket objekt er jeg?

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Dagens tema: Sjekking

INF Seminaroppgaver til uke 3

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

TDT4100 Objektorientert programmering

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Litt om pakker og mest om data inn og ut

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

Dagens tema: Hva skal gjøres? Hva gjør en kompilator? Hva gjør en kompilator?

UNIVERSITETET I OSLO

Eksempel 1 Eksempel 2 Dramatisering. INF1000 uke 3. Sundvollen 7. september 2015 Dag Langmyhr. INF1000 Sundvollen

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

Programmeringsspråket C

INF1010 våren 2018 tirsdag 23. januar

Forelesning inf Java 5

Sortering med tråder - Quicksort

Forelesning inf Java 5

INF Løsning på seminaropppgaver til uke 8

Avdeling for ingeniørutdanning Institutt for teknologi

UNIVERSITETET I OSLO

Språktyper og syntaksanalyseteknikker. Dagens temaer. Hvordan lage en deterministisk automat? Fra jernbanediagram til ID-automat

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

UNIVERSITETET I OSLO

Repetisjon. INF gruppe 13

Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF Høst 2011)

Løsningsforslag Test 2

INF 1000 høsten 2011 Uke september

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Løsningsforslag til eksamen i INF1000 våren 2006

UNIVERSITETET I OSLO

import java.io.*; import java.util.*; import javagently.text;

INF Notater. Veronika Heimsbakk 10. juni 2012

INF 1000 (uke 2) Variabler, tilordninger og uttrykk

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Videregående programmering 6

Stein Gjessing. Institutt for informatikk. Universitetet i Oslo. Institutt for informatikk

HØGSKOLEN I SØR-TRØNDELAG

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

Hjemmeeksamen 2 i INF3110/4110

Jentetreff INF1000 Debugging i Java

Forelesning inf Java 4

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Blokker og metoder INF1000 (Uke 6) Metoder

INF Våren Li' repe$sjon om Tråder og GUI. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

INF1010 våren Arv og subklasser - del 2

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

Dagens tema: 12 gode råd for en kompilatorskriver

Transkript:

INF2100 Oppgaver 23. og 24. september 2010 Oppgave 1 Vi skal se på et meget enkelt språk E som består av uttrykk med + og ; grammatikken ser du i figur 1 på neste side. Tallkonstanter består av bare ett siffer 1 og variabelnavn er på bare én bokstav. Tre variable er forhåndsdefinert: 2 M 1000 C 100 X 10 En implementasjon 3 av dette språket ser slik ut: 4 import java.io.*; class E { public static void main(string arg[]) { Scanner.init(); Log.doLogParser = Log.doLogTree = true; Program p = Program.parse(); if (Scanner.curToken!= Token.eofToken) Error.error("Syntax error: Illegal "+Scanner.curToken); System.out.println("The value is "+p.eval()); abstract class SyntaxUnit { public abstract void printtree(); class Program extends SyntaxUnit { Expression e; public static Program parse() { class Expression extends SyntaxUnit { ExprElem e; public static Expression parse() { 1 Selv om konstantene bare har ett siffer, kan godt resultatet bli større; se eksemplet. 2 Det er ikke mulig å definere flere variabler selv (i tilfelle du lurte på det). 3 Legg merke til at denne implementasjonen av E er en interpret i stedet for en kompilator; den genererer ikke kode men beregner svaret direkte etter å ha analysert programmet. 4 Denne koden finnes i ~inf2100/kode/e/e.java som du også finner som http://www.ifi.uio.no/ ~inf2100/kode/e/e.java på nettet. 1

program expression operator factor expression number digit0-9 number name operator name + - letteraz factor Figur 1: Grammatikken til språket E abstract class ExprElem extends SyntaxUnit { public ExprElem next = null; abstract class Factor extends ExprElem { public abstract int eval(); public static Factor parse() { class Name extends Factor { char id; public static Name parse() { if (id == X ) return 10; if (id == C ) return 100; if (id == M ) return 1000; Error.error("Unknown variable: "+id); return 0; class Number extends Factor { int val; public static Number parse() { return val; class Operator extends ExprElem { 2

Token op; public static Operator parse() { public int eval(int v1, int v2) { enum Token { nametoken, numbertoken, plustoken, minustoken, eoftoken, notoken class Scanner { public static Token curtoken; public static char curname; public static int curnumber; private static LineNumberReader f; public static void init() { f = new LineNumberReader(new InputStreamReader(System.in)); readnext(); public static void readnext() { curtoken = Token.noToken; while (curtoken == Token.noToken) { int c =? ; try { c = f.read(); // Read one character catch (IOException e) { Error.error("Read error!"); if (c < 0) { curtoken = Token.eofToken; else if (c == + ) { curtoken = Token.plusToken; else if (c == - ) { curtoken = Token.minusToken; else if ( A <=c && c<= Z a <=c && c<= z ) { curtoken = Token.nameToken; curname = (char)c; else if (Character.isDigit(c)) { curtoken = Token.numberToken; curnumber = c- 0 ; else if (Character.isWhitespace(c)) { // Ignore space else { Error.error("Illegal character: "+(char)c+"!"); // For testing: // System.out.println("Scanner: Read a "+curtoken); class Error { static void error(string message) { System.out.println("ERROR: "+message); System.exit(1); class Log { public static boolean dologparser = false, dologtree = false; private static int parselevel = 0; 3

public static void enterparser(string symbol) { if (! dologparser) return; for (int i = 1; i <= parselevel; ++i) System.out.print(" "); System.out.println("<"+symbol+">"); ++parselevel; public static void leaveparser(string symbol) { if (! dologparser) return; --parselevel; for (int i = 1; i <= parselevel; ++i) System.out.print(" "); System.out.println("</"+symbol+">"); public static void write(string s) { if (! dologtree) return; System.out.print(s+" "); public static void writeln() { if (! dologtree) return; System.out.println(); Fyll ut de tomme utgavene av parse og eval. Om vi sender inn programmet M+M +X -2 skal svaret av evalueringen bli > java E <demo.e The value is 2008 Tilleggsspørsmål 1 Trenger vi klassen SyntaxUnit? Hva skjer om vi fjerner den (og alle referanser til den)? Oppgave 2 Legg inn kall på enterparser og leaveparser i hver parse-metode slik at vi kan følge kallene. Om vi sender inn eksemplet fra forrige oppgave, bør resultatet bli slik: <program> <expression> 4

<number> </number> </expression> </program> Oppgave 3 Legg inn en metode printtree i hver klasse slik at den interne formen av uttrykket blir skrevet ut. Om vi sender inn eksemplet fra oppgave 1, skal resultatet bli M + M + X - 2 5