• Keine Ergebnisse gefunden

JUnit‐Tests 

N/A
N/A
Protected

Academic year: 2022

Aktie "JUnit‐Tests "

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Institut für Systemsoftware  Übungen zu Übersetzerbau WS 2007/2008 

Prof. Dr. H. Mössenböck  Übung 2 

Zuname      Vorname      Matr.‐Nr.    

Übungsgruppe    Punkte      korr.    

‰  1  (Löberbauer)  Do 1015‐1145  

‰  2  (Löberbauer)  Do 1345‐1515   Letzter Abgabetermin 

‰  3  (Wimmer)  Do 1015‐1145  Mittwoch, 24.10.2007, 2015 Uhr   

Lexikalischer Analysator (Scanner)  (24 Punkte) 

Beginnen Sie die Arbeit an Ihrem MicroJava‐Compiler, indem Sie einen lexikalischen Analysator  (Scanner) für die Sprache MicroJava schreiben. Lesen Sie dazu die Sprachdefinition (VO‐Skriptum,  Kapitel 4, Seiten 6ff) genau durch. Welche Terminalsymbole und Terminalklassen werden in der  Grammatik gebraucht? Wie sehen die Kommentare aus, wie die Zeichenkonstanten? Welche  Schlüsselwörter und vordeklarierten Namen gibt es? 

Auf der Homepage finden Sie vorgegebene Klassen für die Implementierung. Viele Klassen sind  für  diese  Übung  noch  nicht  nötig,  sondern  werden  erst  im  Laufe  der  nächsten  Übungen  implementiert. Für diese Übung benötigen Sie die Klassen Scanner, Token und Errors im Package  ssw.mj. Die Klassen Token und Errors sind bereits fertig implementiert, bei der Klasse Scanner sind  einige Definitionen vorgegeben. Diese Klasse muss vervollständigt werden. 

Bei  jedem  Aufruf  von  Scanner.next()  muss  das  nächste  erkannte  Terminalsymbol  (=  Token)  zurückgegeben werden. Wenn das Ende des Eingabestroms erreicht ist, wird das Terminalsymbol  eof zurückgegeben. 

Schlüsselwörter,  Bezeichner,  (positive  ganze)  Zahlen,  Zeichenkonstanten  sowie  Operatoren  müssen erkannt werden. Leerzeichen, Tabulatoren, Zeilenumbrüche und Kommentare (von  ʺ/*ʺ  bis ʺ*/ʺ, auch geschachtelt) müssen überlesen werden. 

Folgende lexikalische Fehler müssen erkannt werden: 

• Das Auftreten ungültiger Zeichen (INVALID_CHAR). 

• Fehlende schließende Anführungszeichen bei Zeichenkonstanten (MISSING_QUOTE). 

• Leere Zeichenkonstanten (EMPTY_CHARCONST) 

• Ungültige Escapesequenzen (UNDEFINED_ESCAPE). 

• Zeilenumbrüche in Zeichenkonstanten (ILLEGAL_LINE_END) 

• Nicht geschlossene Kommentare (EOF_IN_COMMENT) 

• Zu große Zahlenkonstanten (BIG_NUM) 

Der Wertebereich von int ist wie in Java von ‐2147483648 bis 2147483647 definiert. Der lexikalische  Analysator  liefert  jedoch  nur  positive  ganze  Zahlen  (also  von  bis  2147483647).  Bei einer  negativen Zahl werden ein Minuszeichen und eine positive ganze Zahl als zwei separate Tokens  geliefert. Die Zahl ‐2147483648 kann daher nicht als Konstante im Programm direkt angegeben  werden. 

(2)

 

Im Vorlesungs‐Skriptum sind alle Methoden der Klasse Scanner als static deklariert. Im Gegensatz  dazu  verwenden  wir  in  der  Übung  keine  statischen  Methoden,  um  die  JUnit‐Testfälle  zu  vereinfachen.  Daher  müssen  Objekte  der  Klasse  Scanner  und  Errors  angelegt  werden.  Die  Initialisierung findet in den jeweiligen Konstruktoren statt. 

JUnit‐Tests 

Implementieren Ihren Compiler so, dass er alle vorgegebenen JUnit‐Testfälle besteht. Auch die  Tutoren verwenden diese Testfälle. Die Übungen werden nur beurteilt, wenn alle Testfälle ohne  JUnit‐Errors durchlaufen. 

Sie können die gegebenen JUnit‐Testfälle auch als Vorlage für Ihre eigenen Tests verwenden, um  so Ihren Compiler noch ausführlicher zu testen. 

Abgabe 

Die Abgabe der Übungen 2 – 6 muss auf Papier und elektronisch erfolgen. Geben Sie folgende  Dateien ab: 

• Ausgedruckt  auf Papier: Scanner.java  (andere Dateien  müssen für  diese Übung  nicht  verändert werden). 

• Elektronisch als ZIP‐Datei: Alle Quellcode‐Dateien, die zum Ausführen des Compilers  benötigt werden (Packages ssw.mj, ssw.mj.codegen und ssw.mj.symtab), also auch alle Klassen  der Angabe. Die Verzeichnis‐Struktur muss in der ZIP‐Datei erhalten bleiben. 

Nicht abzugeben: JUnit‐Testfälle, .class‐Dateien, Projekt‐Dateien von IDEs. 

Referenzen

ÄHNLICHE DOKUMENTE

- Geschachtelte Klassen können als privat deklariert werden, so dass sie außerhalb der umfassenden Klasse nicht verwendet werden können. - Geschachtelte Klassen können auf

- Methoden der Klasse Window können Klassennamen weglassen (border = ...; setBorder( 3);) - Klassenkonstruktor wird nie explizit aufgerufen. Zugriff auf nonstatic- Elemente über

Das Strassennetz auf der Insel besteht aus einer Ringstrasse, welche ganz ohne Steigung die Insel in der Höhe z = 1.5 umrundet, und aus einer weiteren Strasse, die den

Dieses  Aufgabenblatt  muss  zusammen  mit  der  Arbeit  abgegeben  werden... Dieses  Aufgabenblatt  muss  zusammen  mit  der  Arbeit  abgegeben

Schreiben Sie ein Programm ausgehend von , dass 3 Konstruktoren zur Verfügung stellt; den Konstruktor ohne Argumente, mit einer Variablen soll nur die Energie übergeben

Schreiben Sie ein Programm ausgehend von , dass 3 Konstruktoren zur Verfügung stellt; den Konstruktor ohne Argumente, mit einer Variablen soll nur die Energie übergeben

• Eine Klassendeklaration kann auch direkt diverse abgeleitete Operationen implementieren, wie z.B. eine Gleichheit, falls es nur ein ≤ gibt... Insofern könnte man damit generisch

 innere Klasse: Die Klasse wird innerhalb einer anderen Klasse definiert..!. (Beachte: der untere, leere Teil wird später