INF2100. Oppgaver 26. september til 1. oktober 2007

Like dokumenter
INF2100. Oppgaver 23. og 24. september 2010

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

INF2100. Oppgaver 9. oktober 2012 C 100 X 10

INF2100. Oppgaver uke 40 og

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. Oppgave 1. Oppgave 2 4. Løsningsforslag til oppgaver uke 40 og Se figur 1 på neste side.

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

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

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

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

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

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

INF1010 våren 2018 tirsdag 23. januar

Del 3: Evaluere uttrykk

Repetisjon. INF gruppe 13

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

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

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

OPPGAVE 5b og 8b Java Kode

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

TOD063 Datastrukturer og algoritmer

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:

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

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

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

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

Litt om pakker og mest om data inn og ut

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

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

TDT4100 Objektorientert programmering

Dagens tema: Resten av det dere trenger til del 1

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

IN Notat om I/O i Java

INF Notat om I/O i Java

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; }

UNIVERSITETET I OSLO

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

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

INF1010 våren januar. Objektorientering i Java

INF Løsning på seminaropppgaver til uke 8

INF100 Institutt for informatikk Universitetet i Bergen Øving 5

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

Avdeling for ingeniørutdanning Institutt for teknologi

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

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

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

Dagens tema: Resten av det dere trenger til del 1

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

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

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

Kapittel 9: Sortering og søking Kort versjon

UNIVERSITETET I OSLO

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

Løsningsforslag Test 2

Mer objektorientert programmering

INF Seminaroppgaver til uke 3

UNIVERSITETET I OSLO

Oppgave01.java class Bongo { 2 public static void main(string[] args){ 3 int[][][]bongo = new int[2][3][4]; 4 5 // SVAR: 24 6 } 7 } 8

UNIVERSITETET I OSLO

Videregående programmering 6

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

Forelesning inf Java 5

IN1010 våren januar. Objektorientering i Java

Forelesning inf Java 5

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

HØGSKOLEN I SØR-TRØNDELAG

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

Dagens tema: Mer av det dere trenger til del 1

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

Kapittel 8: Programutvikling

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

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

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Sortering med tråder - Quicksort

Løse reelle problemer

Eksempel: Body Mass Index (BMI)

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Læreboken på 45 minutter

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

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

INF Uke 10. Ukesoppgaver oktober 2012

Kapittel 8: Sortering og søking INF100

Å lese tall fra en fil, klassen Scanner

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

UNIVERSITETET I OSLO

INF 1000 høsten 2011 Uke september

Løsningsforslag INF desember 2007

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

Transkript:

INF2100 Oppgaver 26. september til 1. oktober 2007 1 Språket Denne uken skal vi implementere en utvidelse av språket fra forrige ukes oppgave. Syntaksen er vist i figur 1 på neste side og betydning er stadig ganske enkel: Interpreten vår skal lese uttrykk fra tastaturet (dvs standard inn); etter hvert heltall skal det stå et semikolon. Hvis uttrykket er et heltall, skal det skrives ut. Hvis uttrykket er «name = number», skal interpreten huske at dette navnet er tilordnet nummeret; ingenting skal skrives ut. Hvis uttrykket er et navn (uten noe «= number»), skal det tilordnede nummeret skrives ut. 1.1 Et eksempel Anta at vi har en «kildefil» med navn demo.num og som ser slik ut: pi100 = 314; r= 6 ; 1; 345; pi = +003; pi100; pi; 0; 0999; r; r = +; r; Her er et eksempel på en kjøring med denne filen: > java NumExpr <demo.num 1 345 314 3 0 999 6 Error in line 5: Illegal number: +! Og her er en testkjøring av skanneren: 1

expression program name number expression ; = number number name + digit 0-9 letter A-Za-z letter A-Za-z - digit 0-9 Figur 1: Programmeringsspråkets syntaks er definert av disse fire jernbanediagrammene. > java NumExpr testscanner <demo.num Scanner: nametoken pi100 Scanner: numbertoken 314 Scanner: numbertoken 6 Scanner: numbertoken 1 Scanner: numbertoken 345 Scanner: nametoken pi Scanner: numbertoken 3 Scanner: nametoken pi100 Scanner: nametoken pi Scanner: numbertoken 0 Scanner: numbertoken 999 Error in line 5: Illegal number: +! 2

2 Koden Her er en implementasjon av en interpret for språket; koden ligger også på filen ~inf2100/kode/numbers/numexpr.java og er tilgjengelig på nettet som http://www.ifi.uio.no/~inf2100/kode/numbers/numexpr.java. import java.io.*; import java.util.*; class NumExpr { public static void main(string arg[]) { Map<String,Long> nametab = new HashMap<String,Long>(); if (arg.length>0 && arg[0].equals(" testscanner")) { while (true) { System.out.print("Scanner: "+Scanner.curToken); if (Scanner.curToken == Token.nameToken) System.out.print(" "+Scanner.curName+" "); if (Scanner.curToken == Token.numberToken) System.out.print(" "+Scanner.curNumber); System.out.println(); if (Scanner.curToken == Token.eofToken) break; else { while (true) { if (Scanner.curToken == Token.eofToken) break; Scanner.check(Token.nameToken, Token.numberToken); if (Scanner.curToken == Token.nameToken) { String name = Scanner.curName; if (Scanner.curToken == Token.assignToken) { // Expression is: <name> = <number> Scanner.check(Token.numberToken); nametab.put(name, Scanner.curNumber); else { // Expression is: <name> if (! nametab.containskey(name)) Error.error("line "+Scanner.curLineNum, "Unknown name "+name+"!"); System.out.println(nameTab.get(name)); else { 3

// Expression is: <number> System.out.println(Scanner.curNumber); Scanner.check(Token.semicolonToken); enum Token { assigntoken, eoftoken, nametoken, notoken, numbertoken, semicolontoken; class Scanner { public static Token curtoken = Token.noToken; public static String curname = ""; public static long curnumber = 0; public static int curlinenum = 0; private static LineNumberReader stdin = new LineNumberReader(new InputStreamReader(System.in)); private static String curline = ""; private static int curpos = 0; public static void readnext() { curtoken = Token.noToken; while (curtoken == Token.noToken) { //** Her må det inn kode! ** private static boolean isletteraz(char c) { return ( a <=c && c<= z ) ( A <=c && c<= Z ); private static boolean isnamechar(char c) { return isletteraz(c) Character.isDigit(c); private static String readname() { int startpos = curpos 1; while (curpos<curline.length() && isnamechar(curline.charat(curpos))) { ++curpos; return curline.substring(startpos,curpos); private static long readnumber() { 4

String n = ""+curline.charat(curpos 1); while (Character.isDigit(curLine.charAt(curPos))) n += curline.charat(curpos++); try { return Long.parseLong(n.startsWith("+")? n.substring(1) : n); catch (NumberFormatException e) { Error.error("line "+Scanner.curLineNum, "Illegal number: "+n+"!"); return 0; // Will never be run! static void check(token t1) { if (curtoken!= t1) Error.error("line "+curlinenum, "Expected a "+t1+" but found a "+curtoken); static void check(token t1, Token t2) { if (curtoken!=t1 && curtoken!=t2) Error.error("line "+curlinenum, "Expected a "+t1+" or a "+t2+" but found a "+curtoken); class Error { static public void error(string where, String message) { System.out.println("Error" + (where.equals("")? "" : " in "+where) + ": " + message); System.exit(1); static public void error(string message) { error("", message); 3 Oppgaven Oppgaven er å skrive koden som mangler i Scanner klassen slik at den oppfører seg som vist i eksemplene. 5