Ho problemi con la destinazione Python in ANTLR4. Sembra che ci siano pochissimi esempi disponibili e andare al corrispondente codice Java non sembra rilevante.ANTLR4 e il target Python
sto usando la grammatica standard di Hello.g4:
// 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
L'esempio (costruito da l'esempio standard Hello.g4):
input_ = antlr4.FileStream(_FILENAME)
lexer = HelloLexer.HelloLexer(input_)
stream = antlr4.CommonTokenStream(lexer)
parser = HelloParser.HelloParser(stream)
rule_name = 'r'
tree = getattr(parser, rule_name)()
Ho anche scritto un ascoltatore. Per affermare/verificare che questo è corretto, lo ripeto qui:
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")
Quindi, in primo luogo, non posso garantire che la stringa sto dando è valida perché non sto ricevendo qualsiasi schermo produzione. Come faccio a sapere dall'oggetto albero se qualcosa è stato abbinato? Come estrarre le regole/i token corrispondenti?
Un esempio Python sarebbe fantastico, se possibile.