HS-Flensburg-PLTP / jlint

Other
0 stars 0 forks source link

BNF Converter #4

Closed jan-christiansen closed 2 years ago

jan-christiansen commented 2 years ago

Hier soll das Tool BNF Converter einmal ausprobiert werden. Bei diesem Tool kann man eine Grammatik für eine Sprache in Form einer BNF angeben. Das Tool erzeugt aus der Grammatik dann einen Parser und einen AST für die Sprache. Das Tool kann Code in verschiedenen Sprachen erzeugen, unter anderem in Haskell.

Phillemove commented 2 years ago

Branch bnfctest ist erstellt, darin ein Haskell Projekt für den Test erstellt. Das Tool hab ich soweit installiert.

Phillemove commented 2 years ago

Beim ersten Test des BNFConverters hab ich festgestellt, das ALEX und HAPPY fehlt. Dies kann über stack install --resolver nightly alex und cabal install happy installiert werden

Phillemove commented 2 years ago

Link zu Java BNF

https://cs.au.dk/~amoeller/RegAut/JavaBNF.html

Link zu LBNF Java 1.1

http://people.cs.uchicago.edu/~mrainey/java.cf

Phillemove commented 2 years ago

Java 1.1 bnf als java.cf Datei im Ordner bnfc hinzugefügt. Mittels bnfc -m --haskell java.cf make wurde der Parser durch den bnfconverter erzeugt. Alle Dateien wurden im Branch bnfctest hochgeladen

Phillemove commented 2 years ago

Erste Konsolen Tests des Parsers ergeben, das in der BNF zu Java 1.1 definitiv Generics fehlen

Phillemove commented 2 years ago

Parsing Ergebnis in PDF Datei hochgeladen

Phillemove commented 2 years ago

Unnötige Dateien aus dem BNFConverter sind gelöscht. Main modul wurde angepasst. Dazu wurde eine Java.txt Datei erstellt, in der Java-Code angepasst aus einer Algorithmen Abgabe eingefügt wurde. In der Main Funktion wird einmal diese Datei eingelesen und auf der Konsole ausgegeben. Dann wird diese Datei ebenfalls in weitere Funktionen gegeben. Dieser Schritt und die zugehörigen Funktionen wurden aus der TestJava.hs kopiert. Die dient in dem Boilerplate Code als Main Modul. In ghci wurde nun Testweise die Main.main ausgeführt und es kam zu dem Ergebnis, wie zuvor mit den Konsolen Tests

Phillemove commented 2 years ago

Zur Erweiterung der LBNF, nach genauem durchschauen der LBNF sind die Labels sowie Terminal und Non-Terminale recht einfach verständlich. Es lässt sich meiner Meinung nach sehr gut ergänzen. Da die Labels prinzipiell selbst gewählt sind von der Bezeichnung her, die in dieser LBNF sich aus dem Bezeichner und dem Keyword zusammensetzen, kann man das so gut erweitern. Zu prüfen wäre nun welche weiteren Spezifikationen von Java sinnvoll sind dort hinzuzufügen und den daraus resultierenden Aufwand, auch im Vergleich zu anderen Möglichkeiten wie die von Lukas getestete Bibliothek.

Phillemove commented 2 years ago

Ich habe im Main modul die main funktion noch soweit angepasst, das zuerst der FilePath zur Java-Code Datei, die geparst werden soll, als String eingelesen wird über den stdin und dann die Datei eingelesen und in den Parser gegeben wird

Phillemove commented 2 years ago

Ich habe das ganze nun nochmal mit einem Pfad auf meiner Festplatte zu einer .Java Datei in meinem eclipse-workspace getestet und der konnte den Code erfolgreich parsen

jan-christiansen commented 2 years ago

Wir werden erst mal die Bibliothek language-java verwenden. Für den Fall, dass wir noch wechseln müssen, bleibt der branch erst mal erhalten.