pdf (1820 Kb) - Fachgebiet Datenbanken und Informationssysteme ...
pdf (1820 Kb) - Fachgebiet Datenbanken und Informationssysteme ...
pdf (1820 Kb) - Fachgebiet Datenbanken und Informationssysteme ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
nerierten Klassen gelten soll, so wie Import-Anweisungen für die Parser <strong>und</strong> TokenManger-<br />
Klassen. Ein Beispiel für eine compilation_unit:<br />
PARSER_BEGIN(TestParser)<br />
package foo;<br />
public class TestParser {<br />
public static void main(String args[]) throws ParseException {<br />
eg1 parser = new eg1(System.in);<br />
try {<br />
TestParser.StartSymbol();<br />
System.out.println("Thank␣you.");<br />
} catch (Exception e) {<br />
System.out.println(e.getMessage());<br />
TestParser.ReInit(System.in);<br />
}<br />
}<br />
}<br />
PARSER_END(TestParser)<br />
Anschließend müssen die Produktionen für den Scanner <strong>und</strong> den Parser definiert werden.<br />
Der gesamte Aufbau der Grammatikdatei ist auf der javacc-Homepage in EBNF dokumentiert.<br />
Da die Produktionen sehr unterschiedlich aufgebaut sein können, ist die Definition<br />
in EBNF hier auch sehr sinnvoll, weswegen ich diese übernehme.<br />
Eine regular_expression_production wird durch eins der vier Schlüsselwörter TOKEN,<br />
SKIP, SPECIAL_TOKEN oder MORE eingeleitet, die den Umgang mit Wörtern dieses<br />
Ausdrucks festlegen. Gegebenenfalls wird dem Schlüsselwort eine Liste der Zustände, in<br />
denen der reguläre Ausdruck erkannt werden soll, vorangestellt.<br />
regular_expression_production ::=<br />
["" | ""]<br />
( TOKEN | SKIP | SPECIAL_TOKEN | MORE ) [IGNORE_CASE]":"<br />
"{" regexpr_spec ( | regexpr_spec )∗ "}"<br />
regexpr_spec ::=<br />
regular_expression [java_block_for_lexical_action][":" identifier_for_lexical_state ]<br />
regular_expression ::=<br />
java_string_literal<br />
| ""<br />
| ""<br />
| ""<br />
complex_regular_expression_choices ::=<br />
complex_regular_expression ( "|" complex_regular_expression )∗<br />
complex_regular_expression ::=<br />
( complex_regular_expression_unit )∗<br />
complex_regular_expression_unit ::=<br />
java_string_literal<br />
| ""<br />
| character_list<br />
| "(" complex_regular_expression_choices ")" [ "+" | "∗" | "" ]<br />
Beispiel:<br />
10