Ich habe Probleme mit einem Python-Ziel in ANTLR4. Es scheint nur sehr wenige Beispiele zu geben, und der entsprechende Java-Code scheint nicht relevant zu sein.ANTLR4 und das Python-Ziel
Ich bin mit dem Standard Hello.g4 Grammatik:
// Define a grammar called Hello
grammar Hello;
r : 'hello' ID ; // match keyword hello followed by an identifier
ID : [a-z]+ ; // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines
Das Beispiel (aus dem Standard-Hello.g4 Beispiel gebaut):
input_ = antlr4.FileStream(_FILENAME)
lexer = HelloLexer.HelloLexer(input_)
stream = antlr4.CommonTokenStream(lexer)
parser = HelloParser.HelloParser(stream)
rule_name = 'r'
tree = getattr(parser, rule_name)()
Ich schrieb auch einen Zuhörer. Zu behaupten/überprüfen, ob dies richtig ist, ich wiederhole es hier:
class HelloListener(antlr4.ParseTreeListener):
def enterR(self, ctx):
print("enterR")
def exitR(self, ctx):
print("exitR")
def enterId(self, ctx):
print("enterId")
def exitId(self, ctx):
print("exitId")
Also, zuerst, ich kann nicht garantieren, dass die Zeichenfolge ich geben werde es gültig ist, weil ich keinen Bildschirm bekommen Ausgabe. Wie kann ich von dem Baum Objekt erzählen, wenn etwas zusammenpasst? Wie extrahiere ich die passenden Regeln/Token?
Ein Python-Beispiel wäre, wenn möglich, großartig.