Technische Universität München Fakultät für Informatik Prof. Dr. Helmut Seidl Michael Petter Raphael Geissler SS 2005 Programmierpraktikum Java Entdecken Arbeitsblatt 3 SyntaxHighlighter Teil 1 Reguläre Ausdrücke 1 Einleitung In einer zweiteiligen Aufgabe soll ein Syntax-Highlighter1 für Java-Quellcode erstellt werden. Folgende Aufgabenteile sollen diese Woche implementiert werden. • Einlesen und Ausgeben eines Textfiles in der Main-Funktion • Regeln 2 erzeugen, die regulären Java-Code vollständig matchen • Erstellen einer Funktion nextToken(), die die gematchten Tokens als Strings zurückgibt. 2 Teilaufgaben 2.1 Aufgabe 1 Einlesen und Ausgabe von Dateien Versuchen Sie in der Main-Funktion eine Textdatei als String einzulesen und wieder in eine Datei abzuspeichern. Betrachten Sie dazu die API’s folgender Klassen • java.io.FileReader • java.io.BufferedReader • java.io.FileWriter • java.io.PrintWriter 1 http://de.wikipedia.org/wiki/Syntaxhighlighting 2 http://www2.in.tum.de/repos/progprakt/studenten/templates/syntaxHighlighting/JavaRulesIF.java 1 2.2 Aufgabe 2 Symbolklassen festlegen Unser Ziel ist es den Eingabestring in einfache Grundbestandteile - Symbole (engl. Token) - zu zerlegen. Um auszudrücken, welche Teilstrings die selbe Symbolklasse formen, verwenden wir Reguläre Ausdrücke3 . Eine Spezifikation aller in Java möglichen Symbol-Klassen können sie bei Sun in der offiziellen Sprachspezifikation 4 nachlesen. Erstellen Sie nun ein Interface das sämtliche Regeln als Strings in Form von regulären Ausdrücken enthält. Erweitern Sie dazu die vorgefertigte Datei JavaRulesIF.java5 , die in der Codeverwaltung zum Download bereit steht. Wie reguläre Ausdrücke in Java verwendet werden, steht detailliert in der API-Dokumentation von java.util.regex. Ebenso sei auf die Anleitung6 von Sun verwiesen. 2.3 Aufgabe 3 Zerlegen des Eingabestrings in Symbole Erstellen Sie eine Klasse Lexer, die eine Funktion String nextToken() bereit stellt. Diese soll bei jedem Aufruf das nächste gefundene Symbol zurückgeben. Um das zu realisieren muss die in Aufgabe 2 erzeugte Regelliste in jedem Aufruf von nextToken() der Reihe nach abgearbeitet werden bis der Anfang der aktuell betrachteten Eingabe zu einer Regel passt. Dieser Teil soll dann aus der Eingabe entfernt und zurückgeliefert werden. 3 http://de.wikipedia.org/wiki/Regex 4 http://java.sun.com/docs/books/jls/second edition/html/jTOC.doc.html 5 http://www2.in.tum.de/repos/progprakt/studenten/templates/syntaxHighlighting/JavaRulesIF.java 6 http://java.sun.com/developer/technicalArticles/releases/1.4regex/ 2