Løsningsforslag til ukeoppgaver 3. september 2009 Oppgave 1 --------- Hver int-deklarasjon kan bare nevne én variabel; se jernbanediagrammene. Oppgave 2 --------- «-1» tas som et numberToken, så Scanneren leverer 5: v = getint()-1; Scanner: nameToken v Scanner: assignToken Scanner: nameToken getint Scanner: leftParToken Scanner: rightParToken Scanner: numberToken -1 Scanner: semicolonToken Løsning: Legg en blank mellom '-' og '1'. Oppgave 3 --------- Det er selvfølgelig mange måter å gjøre dette på; dette er instruksjonssekvensen som kompilatoren lager: set R1,R0,3 # Verdien 3 set R3,R1,0 # gjemmes unna i R3. load R1,R0,v # Hent v, mul R1,R3,R1 # beregn 3*v og set R3,R1,0 # gjem mellomresultatet i R3. set R1,R0,7 # Hent verdien 7 add R1,R3,R1 # og legg den til mellomresultatet. store R1,R0,v # Svaret legges i v. Oppgave 4 --------- 1. Linje 5: leftParToken mangler i «putchar(LF);». 2. Linje 5: Det finnes ingen commentToken. (De skal bare ignoreres.) 3. Linje 5: Først nameToken på linjen skal være «LF», ikke «int». NB! Det er _ikke_ feil at eofToken kommer to ganger. Scanneren vil fortsette å gi dette når all teksten er lest. Oppgave 5 --------- if (CharGenerator.curC == '=' && CharGenerator.nextC == '=') { nextNextToken = Token.equalToken; CharGenerator.readNext(); CharGenerator.readNext(); } else if (CharGenerator.curC == '=') { nextNextToken = Token.assignToken; CharGenerator.readNext(); } Oppgave 6 --------- import java.util.*; enum Farge { Kløver, Ruter, Hjerter, Spar; } class Spillkort implements Comparable { Farge f; int v; Spillkort (Farge f, int v) { this.f = f; this.v = v; } public String toString () { String vim = ""+v; if (v == 1) vim = "A"; if (v == 11) vim = "J"; if (v == 12) vim = "Q"; if (v == 13) vim = "K"; return f.toString().substring(0,2)+"-"+vim; } public int compareTo (Spillkort x) { if (f == x.f) return (v==1 ? 14: v)-(x.v==1 ? 14 : x.v); return f.compareTo(x.f); } public boolean equals (Spillkort x) { return f.equals(x.f) && v==x.v; } } class DelUt { public static void main (String arg[]) { // Lag en full kortstokk: List kortstokk = new ArrayList(); for (Farge fx: Farge.values()) { for (int vx = 1; vx <= 13; ++vx) { kortstokk.add(new Spillkort(fx,vx)); } } // Stokk den: java.util.Collections.shuffle(kortstokk); // Del ut kortene: for (int spiller = 1; spiller <= 4; ++spiller) { List bunke = new ArrayList(); for (int i = 1; i <= 13; ++i) { bunke.add(kortstokk.remove(0)); } java.util.Collections.sort(bunke); System.out.print("Spiller " + spiller + ":"); for (Spillkort k: bunke) { System.out.print(" "+k); } System.out.println(); System.out.println(); } } }