| title | Scanner-Parser-Lexer |
|---|---|
| author | Ruben Kraft |
Einstiegspunkt: de.flyndre.flompiler.scannerparserlexer.ScannerParserLexer
Die verwendete Grammatik kann in der Datei MiniJava.g4 gefunden werden. Dabei unterstütz die Grammatik folgende Funktionen:
- Klassen
- Methoden
- Methodenaufrufe
- Lokale Variablen
- Feldvariablen (jedoch nur mit direkter Wertinizialisierung)
- While
- If
- If-Else
- Preincrement- und Predecrement
- Returnstatements
- Mathematische Operationen sowie String- und Charkonkatination
de/flyndre/flompiler/scannerparserlexer/parser: Standort der generierten ANTLR-Dateiende/flyndre/flompiler/scannerparserlexer/parser/adapter: Standort der Adapter
Durch ANTLR wird die Eingabe zuerst in Lexeme eingeteilt. ANTLR baut einen Parse-Baum, der dann abgelaufen werden kann.
Das Ablaufen des Baumes erfolgt durch eigens implementierte Adapter, welche in de/flyndre/flompiler/scannerparserlexer/parser/adapter zu finden sind. Diese arbeiten den von ANTLR angegebenen Parse-Baum rekursiv ab und wandelt diesen in den von uns festgelegten abstakten Syntaxbaum.
Die Adapter überprüfen auf die verschiedenen angewandten Grammatikkontexte.
- Da unser Syntaxbaum nicht direkt Variableninizialisierung und Deklarierung unterstützt, wird dies in einem Adapter aufgeteilt. Dabei wird die Variable erst deklariert und dann initialisiert.
- Falls kein Konstruktor definiert wird, erstellt der Parser einen Konstruktor, welcher im Bytecode-Generator verwendet wird.
- Durch die vielen einzelnen Klassen, welche für die Adapter verwendet werden, können Änderungen an der Grammatik leicht umgesetzt werden.