Inhalt | Einführung | Theorie | JavaCC | JavaCC in der Praxis

Einführung


Motivation

Eine immer wiederkehrende Aufgabe in der Informatik ist es, Eingaben entgegenzunehmen, diese in irgendeiner Form zu verarbeiten und anschliessend das Ergebnis auszugeben. Ist der Aufbau des Eingabeformates dabei einfach strukturiert, so bereitet dies keine größeren Schwierigkeiten. In der Regel kann man diese Eingaben einfach in Variablen einlesen und sie anschließend zur Weiterverarbeitung nutzen. Was aber, wenn die Eingabe komplex zusammengebaut ist und wir die Informationen nicht direkt entnehmen können? In diesem Fall stehen wir vor einem Problem, dass sich nicht ohne weitere Hilfsmittel bewältigen lässt. Zum Glück hat die theoretische Informatik einige Lösungen parat. Denn auch wenn wir nicht genau wissen, was in der Eingabe für Informationen enthalten sind, so können wir zumindestens eine Aussage bezüglich ihres strukturellen Aufbaus treffen und diese in Form einer Grammatik ausdrücken. Jene Grammatik kann dann als Grundlage für einen Parser dienen, der in der Lage ist, die jeweilige Eingabe zu analysieren und die entsprechenden Informationen zu extrahieren.

Um zu solch einem Parser zu gelangen, bieten sich grundsätzlich zwei Vorgehensweisen an. Zum einen besteht die Möglichkeit, einen entsprechenden Parser eigenständig zu implementieren, oder aber man bedient sich der Hilfe eines der vielen, am Markt frei erhältlichen, Parsergeneratoren. Diese übernehmen die Erstellung eines entsprechenden Parsers, indem der Programmierer lediglich die Grammatik spezifiziert. Einer der bekanntesten Parsergeneratoren im Java-Umfeld ist der "Java Compiler Compiler", kurz JavaCC. Die vorliegende Seminararbeit wird sich mit dem JavaCC beschäftigen. Sie wird zunächst einmal zeigen, welche Konzepte dahinter stehen, bevor dann Anhand einiger praktischer Beispiele die Funktionsweise näher erläutert wird.

Was ist JavaCC?

JavaCC steht für "Java Compiler Compiler" und bezeichnet einen Scanner- und Parsergenerator in und für Java.

Als Scanner- bzw. Parsergeneratoren bezeichnet man jene Programme, die einen eben solchen Parser generieren. Es handelt sich hierbei also um ein Werkzeug und stellt somit keinen eigenständigen Scanner bzw. Parser dar. JavaCC ist laut Sun der am meisten verwendete Parsergenerator im Java Umfeld und zeichnet sich durch seine einfache Handhabung aus. Bereits nach kurzer Einarbeitungszeit ist der Anwender in der Lage, kleinere Parser zu entwerfen. Erreicht wird dies unter anderem dadurch, dass JavaCC mit einer zentralen Definitionsdatei auskommt, in der alle nötigen Konfigurationen vorgenommen werden. JavaCC erstellt sogenannte LL(k) - Parser und geht dabei nach dem Top - Down Ansatz vor. LL(k) - Grammatiken sind zwar nicht die ausdrucksstärksten, dafür jedoch leicht umsetzbar. Des Weiteren lassen sich Grammatiken, die in erweiterter Backus-Naur-Form vorliegen, mit relativ geringem Aufwand in JavaCC abbilden. JavaCC unterstützt standardmäßig Unicode und erlaubt einfaches Debuggen, was den Entwicklungsprozess zusätzlich erleichtert. Da JavaCC im JavaUmfeld angesiedelt ist, steht die gesamte Ausdruckstärke der Java Fehlerbehandlung zur Verfügung. JavaCC unterstützt die einfache Erstellung von Syntaxbäumen mittels des Präprozessors JJTree, der standardmäßig mitgeliefert wird. Die folgende Auflistung fasst die eben genannten Eigenschaften nocheinmal stichwortartig zusammen.