2016-07-16 6 views
1

Ich möchte ein Lexer für Java in Python laufen mit AntlrPython Ziel für Java-Grammatik in antlr

Für Antlr4, ich bin die Java8 Grammatik von https://github.com/antlr/grammars-v4/tree/master/java8 verwenden.

Ich erzeuge den Parser

java -jar antlr-4.5.2-complete.jar -Dlanguage=Python2 ./Java8.g4

Jetzt verwenden, wenn ich an der erzeugten Java8Lexer.py aussehen, es enthält

return Character.isJavaIdentifierStart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1)))

Ich glaube nicht, dass die Art Guss ist gültig Python und es wirft einen Syntaxfehler dort, wenn ich es benutze.

Ich hatte ein ähnliches Problem mit antlr3 mit einer Antlr3 Java 1.6 Grammatik. Es erzeugt

boolean isSomething = something

die auch nicht gültig Python ist.

Fehle ich etwas? Gibt es eine Möglichkeit, einen Java-Lexer in Python mit Hilfe von antilr zu verwenden?

Antwort

0

Entfernen Sie einfach die Zeichenfolgen, die mit Character.isJavaIdentifierStart beginnen, aus Ihrer Java8-Grammatik.

+0

Entfernen Sie * und * ersetzen Sie sie durch ihre Python-Entsprechungen, da die Prädikate für den ordnungsgemäßen Betrieb dieser Lexer-Regeln von Bedeutung sind. – GRosenberg

+0

Ich verließ den ersten Teil der Regel, d. H. Zeichenklassen [a-z] etc .. aber entfernt die Character. * Sachen und es funktioniert jetzt. Vielen Dank! – greenberet123