Kurskod SMD135 (SMD064) Datum Skrivtid 4 tim

Relevanta dokument
Kurskod SMD135 (SMD064) Datum Skrivtid 4 tim

2. Palindrom. Exempel: 1,2,3,2,1 är ett palindrom, och även 0, men inte 1,2,3,1,2,3.

c = s[2]; /* move chars around */ p = &s[2]; *p = *(p-1); --p; *p = *(p-1); s[0] = c; printf("%s\n",s); /* print the string */ English version

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 5

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

(n 1)(n) 2 för n 1, dvs att tidskomplexiteten är kvadratisk i värsta fall (n 1) =

Recitation 4. 2-D arrays. Exceptions

LULEÅ TEKNISKA UNIVERSITET

Föreläsning 3. Stack

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Övning vecka 5. Denna vecka ska vi titta pa samlingar, generics och designmönstren Decorator, Singleton och Iterator.

Att skriva till och läsa från terminalfönstret

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Länkade strukturer. (del 2)

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Tentamen Programmering fortsättningskurs DIT950

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Objektorienterad Programmering (TDDC77)

Support Manual HoistLocatel Electronic Locks

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 3. Stack

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

Objektsamlingar i Java

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Tentamen FYTA11 Javaprogrammering

Kurskod D0010E Datum Skrivtid 5tim

Föreläsning 2. Länkad lista och iterator

Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

Föreläsning 2. Länkad lista och iterator

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 5

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Föreläsning 4 Innehåll

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Styrteknik: Binära tal, talsystem och koder D3:1

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

DVG C01 TENTAMEN I PROGRAMSPRÅK PROGRAMMING LANGUAGES EXAMINATION :15-13: 15

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

1. Compute the following matrix: (2 p) 2. Compute the determinant of the following matrix: (2 p)

Stackar, köer, iteratorer och paket

List.java. List.java. Printed by Tom Smedsaas

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

BST implementering, huvudstruktur

Objektorienterad Programmering (TDDC77)

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Övning 1 - Abstrakta datatyper

Tentamen i Grundläggande Programvaruutveckling, TDA548

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

a) Vad menas helt kort med (a) (beräknings-) problem?

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine


Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

Länkade strukturer, parametriserade typer och undantag

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Lösningsförslag till exempeltenta 2

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

Föreläsning 12. Länkade listor

Generisk klass med typparameter Inre klass - ListIterator

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Grammatik. BNF-grammatik


Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

DAT043 Objektorienterad Programmering

Lösningsförslag till tentamen FYTA11 Javaprogrammering

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

TENTAMEN OOP

Beijer Electronics AB 2000, MA00336A,

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Tentamen Programmeringsteknik II Inledning. Anmälningskod:


Isolda Purchase - EDI

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Föreläsning 2 Datastrukturer (DAT037)

Lösenordsportalen Hosted by UNIT4 For instructions in English, see further down in this document

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

Information technology Open Document Format for Office Applications (OpenDocument) v1.0 (ISO/IEC 26300:2006, IDT) SWEDISH STANDARDS INSTITUTE

Språkkonventioner och redigering av tal.

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Workplan Food. Spring term 2016 Year 7. Name:

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

tentaplugg.nu av studenter för studenter

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Transkript:

LULEÅ TEKNISKA UNIVERSITET Tentamen i Program och datastrukturer Totala antalet uppgifter: 5 Lärare: Håkan Jonsson, Johan Karlsson, Tomas Johansson, (1700, 2016, 1465) Resultatet anslås senast 2004-05-20 i A-huset. Kurskod SMD135 (SMD064) Datum 2004-05-07 Skrivtid 4 tim Tillåtna hjälpmedel: Inga. Bilagor: Kodexempel och dokumentation. Varje uppgift ges först på svenska och sen på engelska. Eventuella exempel återfinns alltid sist i uppgiften och då endast på engelska. Tänk noga efter vad som ska döljas respektive vara synligt utanför klassen. Var noga med att objekts inre tillstånd inte exponeras så att de kan förändras utifrån där det inte är lämpligt. 1. Teori a) Omtypning (3p) I Appendix A finns Java kod som innehåller fem typfel. Din uppgift är att identifiera tre rader som innehåller fel och beskriva varför de är felaktiga. En korrekt utpekad (använd radnumret till vänster) och motiverad rad ger 1p. b) Synlighet (1p) Varför behövs nyckelordet this i koden nedan (som är en del av en klass)? Vad måste mer vara uppfyllt för att koden skall vara meningsfull? void setx(int x) { this.x = x; c) Komplexitet (1p) Vilken höjd har ett balanserat binärt träd med N noder? English version a) Type casting (3p) In Appendix A Java code which contains five type errors is provided. Your task is to identify three of these lines which contain an error and describe why the line is incorrect. A correctly identified (use the line numbers to the left) and motivated line gives 1p. b) Visibility (1p) Why is the keyword this needed in the code below (which is part of a class)? What must be fulfilled in order for the code to be meaningful? void setx(int x) { this.x = x; c) Complexity (1p) What is the height of a balanced binary tree with N nodes?

2. Signaler En trafiksignal kan lysa grönt, gult eller rött. Skriv en klass för att representera trafiksignaler. En trafiksignal ska vara röd när den skapas. Tillför metoderna public boolean isgreen(), public boolean isyellow() och public boolean isred() som kontrollerar om signalen lyser med en viss färg och public void setgreen(), public void setyellow() och public void setred() som ändrar färg. Lägg också till metoderna public int changes() som ger tillbaka antalet gånger som signalen ändrat färg (en nyskapad trafiksignal har aldrig ändrat färg) och metoden public static int numsignals() som returnerar det totala antalet signaler som skapats. English version A traffic light can show green, yellow, and red light. Write a class to represent traffic lights. Each traffic light shows red light when created. Implement the methods public boolean isgreen(), public boolean isyellow() and public boolean isred() that checks if the traffic light shows a certain colour, and public void setgreen(), public void setyellow() and public void setred() that change the colour of the light. Also, add the methods public int changes(), that returns the number of times the traffic light has changed the colour of its light (which is zero for a newly created traffic light), and public static int numsignals() that returns the total number of traffic lights created. 3. Inheritance and exceptions (5p) LiteraryCharacter +LiteraryCharacter(lifeLength:int) +ages(years:int): void +currentage(): int +isalive(): boolean DeadException throws (5p) FrankensteinsMonster +FrankensteinsMonster(lifeLength:int) +resurrect(): void SleepingBeauty +SleepingBeauty(lifeLength:int) +sleep(): void RobinsonCrusoe +RobinsonCrusoe(lifeLength:int) +ages(years:int): void Figure 1: UML diagram for Problem 3.

En man som kallar sig agent Smith vill att du ska skriva några klasser till honom för att representera romanfigurer. Tydligen ska de användas till någon slags simulering, men Smith vill inte säga mer än så. Implementera de klasser som beskrivs i UMLdiagrammet ovan enligt följande. Superklassen LiteraryCharacter: En konstruerare som tar figurens livslängd som ett heltalsargument och skapar en levande figur med åldern 0. currentage() som returnerar figurens nuvarande ålder. ages(int years) som ökar på figurens ålder med years år. Om det innebär att livslängden överskrids ska figuren avlida, och åldern sättas till livslängden. Om figuren avlider, eller om figuren redan är avliden, ska ett DeadException kastas. isalive() som returnerar en boolean som indikerar om figuren lever eller inte. Underklassen FrankensteinsMonster: En konstruerare som fungerar på samma sätt som superklassens konstruerare. resurrect() som återuppväcker monstret och sätter dess ålder till 0. Om monstret redan lever ska ingenting hända. Underklassen SleepingBeauty (det vill säga Törnrosa): En konstruerare som fungerar på samma sätt som superklassens konstruerare. sleep() eftersom Törnrosa sover länge ska denna metod resultera i att hon åldras 10 år. Underklassen RobinsonCrusoe: En konstruerare som fungerar på samma sätt som superklassens konstruerare. ages(int years) som ska fungera precis som metoden i superklassen, med tillägget att texten Kommer jag någonsin att lämna den här ön? ska skrivas ut på skärmen (om han lever förstås). Återanvänd kod när det är lämpligt. Du får anta att klassen som representerar undantaget redan är skriven. English version A man that goes by the name agent Smith wants you to write a number of classes for him to represent characters from novels. It seems that they are to be used in some sort of simulation, but Smith does not want to talk any more about it. Implement the classes that are described in the UML diagram above: The superclass LiteraryCharacter: A constructor that takes the life length of the character as an integer argument and creates a living character with an age of 0. CurrentAge() that returns the character s current age. ages(int years) that increases the character s age with the specified number of years. If the new age exceeds the life length of the character, the character will decease and the age will be set to the same as the life length. If the character deceases, or if the character already is dead, a DeadException will be thrown.

isalive() that returns a boolean indicating whether the character is alive or not. The class should also contain inner variables to keep track of the character s life length, status, and whether it is alive or not. The subclass FrankensteinsMonster: a constructor that works in the same way as the constructor of the superclass. resurrect() that resurrects the monster and sets its age to 0. If the monster already is alive, nothing will happen. The subclass SleepingBeauty: a constructor that works in the same way as the constructor of the superclass. sleep(). Since Sleeping Beauty sleeps for quite some time, using this method will result in her aging 10 years. The subclass RobinsonCrusoe: a constructor that works in the same way as the constructor of the superclass. ages(int years) that will work just as the method in the superclass, with the addition that the text Will I ever leave this island? will be printed to the screen (only if Crusoe lives of course). Reuse code whenever it is appropriate. You can assume that the class that represent the exception is already written. 4. StackIterator Klassen Stack som finns i Appendix B behöver utökas med en iterator för att man skall kunna inspektera samtliga element i stacken utan att modifiera den. Din uppgift består av att implementera denna iterator. Iteratorn ska realisera interfacet Iterator från Javas API (se Appendix C). remove() skall kasta undantaget UnsupportedOperationsException. Lägg till en metod i klassen Stack som returnerar en ny iterator varje gång den anropas. Metoden skall ha följande signatur: public Iterator iterator(). Den returnerade itratorn skall vara placerad på det översta elementet. Du får lägga till ny kod i Stack klassen men inte ändra på någon existerande kod. (Svara bara med dina tillägg.) English version The class Stack which can be found in Appendix B needs to be extended with an iterator in order for one to be able to inspect all elements of the stack without modifying it. Your task is to implement this iterator. The iterator should realize the Iterator interface from the Java API in Appendix C. remove() should throw the exception UnsupportedOperationsException. Add a method in the Stack class which returns a new iterator every time it is called. The Method should have the following signature: public Iterator iterator(). The retrurned iterator should be placed at the top element. You are allowed to add new code to the Stack class but you may not modify any existing code. (Only answer with your additions.) (5p)

5. Grammar Ett komponentnummer består av antingen ett enda tal eller en sekvens med flera tal åtskiljda av bindestreck (minustecken). Ex: 567, 79-1234-4 och 12-677-08. Skriv mha tokenizern i appendix D en parser som undersöker huruvida en sträng är ett komponentnummer dvs om den beskrivs av grammatiken <cn> ::= <num> cn <cn > ::= "-" <num> <cn > empty Parserklassen är redan delvis skriven (se nedan). Din uppgift är att skriva koden för metoden private static boolean cn(), så att den returnerar true om strängen följer grammatikreglerna och false annars. I grammatiken står <num> för tal tokenizern kan parsa. English version A component number consists of either one number or a sequence of several numbers separated by a dash (minus sign). Ex: 567, 79-1234-4 and 12-677-08. Your task is to, using the Tokenizer in appendix D, write a parser that checks whether a string is a component number, i.e. if it is described by the grammar <cn> ::= <num> cn <cn > ::= "-" <num> <cn > empty The parser class is already partially written (see below). Your task is to write the code for the method private static boolean cn(), so that it returns true if the string conforms to the grammar and false otherwise. <num> represents numbers that can be parsed by the tokenizer. public abstract class CompNum { private static Tokenizer token ; public static boolean accept ( Reader input ) { boolean ok ; token = new Tokenizer ( input ) ; token. get ( ) ; ok = cn ( ) ; return ok ; (5p) private static boolean cn () { // Add your code here. Listing 1: CompNum.java

A Classes for Problem 1a 1 public class Cast { 2 public static void main( String [ ] argv ) { 3 A a1, a2 ; 4 B b1, b2 ; 5 6 a1 = new A( ) ; 7 a2 = new B( ) ; 8 b1 = new A( ) ; 9 b2 = new B( ) ; 10 11 a1. p ( ) ; 12 a2. p ( ) ; 13 b2. p ( ) ; 14 15 ((A)a1 ). p ( ) ; 16 ((A)b2 ). p ( ) ; 17 18 a1. q ( ) ; 19 a2. q ( ) ; 20 b2. q ( ) ; 21 22 ((A)b2 ). q ( ) ; 23 24 ((B)a1 ). q ( ) ; 25 ((B)a2 ). q ( ) ; 26 ((B)b2 ). q ( ) ; 27 28 29 30 class A { 31 void p () { 32 System. out. println ( p() ) ; 33 34 35 36 class B extends A { 37 void q () { 38 System. out. println ( q () ) ; 39 40 Listing 2: Classes for Problem 1a.

B Stack.java import java. u t i l. ; / The Stack class. @ version 2004 03 15 @author Johan Karlsson public class Stack { private Node sentinel ; Creates an empty Stack. public Stack () { sentinel = new Node(null, null, null ) ; sentinel. setnext ( sentinel ) ; sentinel. setprev ( sentinel ) ; Puch an item to the top of this stack. @param item the item to insert in this stack. public void push( Object item ) { Node n = new Node( sentinel. next (), sentinel, item ) ; sentinel. setnext (n ) ; n. next ( ). setprev (n ) ; Inspects the item at the top of this stack. @return the item at the top of this satck. @exception NoSuchElementException i f this stack is empty. public Object top () { if ( isempty ()) throw new NoSuchElementException( top : empty stack ) ; return sentinel. next ( ). item ( ) ; Pop the item at the top of this stack. @exception NoSuchElementException i f this stack is empty. public void pop () { if ( isempty ()) throw new NoSuchElementException( pop : empty stack ) ; sentinel. setnext ( sentinel. next ( ). next ( ) ) ; sentinel. next ( ). setprev ( sentinel ) ; Tests i f this stack is empty. @return true i f this stack is empty, otherwise false. public boolean isempty () { return sentinel == sentinel. next ( ) ;

The node class represent a node in a doubly linked l i s t. @ version 2004 03 15 @author Johan Karlsson private class Node { private Node next ; private Node pr ev ; private O bject item ; Creates a node with next, prev and item set. @param n the next node. @param p the previous node. @param i the item in this node. private Node(Node n, Node p, Object i ) { next = n ; prev = p ; item = i ; Set the next node of this node. @param n the next node. private void setnext (Node n ) { next = n ; Set the prev node of this node. @param p the prev node. private void setprev (Node p ) { prev = p ; Inspect the next node. @return the next node. private Node next () { return next ; Inspect the prev node. @return the prev node. private Node prev () { return prev ; Inspect the item of this node. @return the item of this node. private Object item () { return item ; Listing 3: Stack.java

C Java API: Iterator Iterator (Java 2 Platform SE v1.4.2) http://www.cdt.luth.se/java/doc/jdk1.4.2/api/java/util/iterator.htm... Overview Package Class Use Tree Deprecated Index Help PREV CLASS NEXT CLASS FRAMES NO FRAMES All Classes SUMMARY: NESTED FIELD CONSTR METHOD DETAIL: FIELD CONSTR METHOD Java TM 2 Platform Std. Ed. v1.4.2 java.util Interface Iterator All Known Subinterfaces: ListIterator All Known Implementing Classes: BeanContextSupport.BCSIterator public interface Iterator An iterator over a collection. Iterator takes the place of Enumeration in the Java collections framework. Iterators differ from enumerations in two ways: Iterators allow the caller to remove elements from the underlying collection during the iteration with well-defined semantics. Method names have been improved. This interface is a member of the Java Collections Framework. Since: 1.2 See Also: Collection, ListIterator, Enumeration Method Summary boolean hasnext() Returns true if the iteration has more elements. Object next() Returns the next element in the iteration. void remove() Removes from the underlying collection the last element returned by the iterator (optional operation). Method Detail hasnext public boolean hasnext() Returns true if the iteration has more elements. (In other words, returns true if next would return an element rather than throwing an exception.) 1 of 2 03/15/04 17:08

Iterator (Java 2 Platform SE v1.4.2) http://www.cdt.luth.se/java/doc/jdk1.4.2/api/java/util/iterator.htm... Returns: true if the iterator has more elements. next public Object next() Returns the next element in the iteration. Returns: the next element in the iteration. Throws: NoSuchElementException - iteration has no more elements. remove public void remove() Removes from the underlying collection the last element returned by the iterator (optional operation). This method can be called only once per call to next. The behavior of an iterator is unspecified if the underlying collection is modified while the iteration is in progress in any way other than by calling this method. Throws: UnsupportedOperationException - if the remove operation is not supported by this Iterator. IllegalStateException - if the next method has not yet been called, or the remove method has already been called after the last call to the next method. Overview Package Class Use Tree Deprecated Index Help PREV CLASS NEXT CLASS FRAMES NO FRAMES All Classes SUMMARY: NESTED FIELD CONSTR METHOD DETAIL: FIELD CONSTR METHOD Java TM 2 Platform Std. Ed. v1.4.2 Submit a bug or feature For further API reference and developer documentation, see Java 2 SDK SE Developer Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples. Copyright 2003 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy. 2 of 2 03/15/04 17:08

D Tokenizer.java import java. io. ; public class Tokenizer { private StreamTokenizer tokens ; protected i nt type ; public static final int ID = 1, NUMBER = 2, RIGHTPAREN = 3, LEFTPAREN = 4, ENDOFFILE = 5, PLUS = 6, MINUS = 7, ASTR = 8, SLASH = 9, LEFTBRACE = 10, RIGHTBRACE = 11, ILLEGAL = 1; public Tokenizer ( Reader input ) { tokens = new StreamTokenizer ( input ) ; tokens. ordinarychar ( ) ; tokens. ordinarychar ( / ) ; public void get () { try { type = tokens. nexttoken ( ); catch ( IOException e ) {throw new RuntimeException ( e. tostring ( ) ) ; public int kind () { switch ( type ) { case Str ea mto kenizer.tt WORD : return ID ; case Str ea mto kenizer.tt NUMBER : return NUMBER; case Str ea mto kenizer. TT EOF : return ENDOFFILE; default : switch ( ( char ) type ) { case ( : return LEFTPAREN; case ) : return RIGHTPAREN; case + : return PLUS; case : return MINUS; case : return ASTR; case / : return SLASH; case { : return LEFTBRACE; case : return RIGHTBRACE; default : return ILLEGAL; public String ident () { return tokens. sval ; public double numbervalue () { return (double ) tokens. nval ; public String tostring () { return tokens. tostring ( ); Listing 4: Tokenizer.java