У меня проблемы с запуском цели Python в ANTLR4. Кажется, что доступно очень мало примеров, и переход к соответствующему коду Java не кажется уместным.
Я использую стандартную грамматику 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
Пример (построен из стандартного примера 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)()
Я также написал слушателя. Чтобы подтвердить/проверить, что это правильно, я повторю это здесь:
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")
Итак, во-первых, я не могу гарантировать, что строка, которую я ей даю, действительна, потому что я не получаю никакого вывода на экран. Как узнать по объекту tree, совпало ли что-нибудь? Как извлечь соответствующие правила/токены?
Пример Python был бы отличным, если это возможно.