Skip to content

Latest commit

 

History

History
37 lines (30 loc) · 2.06 KB

parser.md

File metadata and controls

37 lines (30 loc) · 2.06 KB
title Scanner-Parser-Lexer
author Ruben Kraft

Scanner-Parser-Lexer

Einstiegspunkt: de.flyndre.flompiler.scannerparserlexer.ScannerParserLexer

Grammatik

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

Ordnerstruktur

Vorgehensweise

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.

Besonderheiten

  • 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.