Я пытаюсь найти все переопределенные методы в java файлах, используя antlr4 с python временем выполнения. Я взял грамматику из https://github.com/antlr/grammars-v4/tree/master/java. Я могу успешно найти методы, используя приведенный ниже код.
istream = FileStream(repo_path, encoding='utf-8')
lexer = JavaLexer(istream)
stream = CommonTokenStream(lexer)
parser = JavaParser(stream)
tree = parser.compilationUnit()
walker = ParseTreeWalker()
walker.walk(PatternListener(), tree)
Inside Listener,
def enterMethodDeclaration(self, ctx):
method_name = ctx.IDENTIFIER().getText()
method_defition = ctx.methodBody().getText()
Теперь я хочу отслеживать только переопределенные методы, а не все методы. поэтому я внес следующие изменения:
В JavaLexer.g4,
OVERRIDEN '@Override';
В JavaParser.g4
methodDeclaration
: OVERRIDEN typeTypeOrVoid IDENTIFIER formalParameters ('[' ']')*
(THROWS qualifiedNameList)?
methodBody
;
, чтобы ограничить methodDeclaration только переопределенным методом, и Я заново сгенерировал все лексеры и парсеры снова. Но в этот раз у меня возникает много проблем с несовпадением при разборе, как показано ниже.
line 71:15 extraneous input 'void' expecting {<EOF>, 'abstract', 'boolean', 'byte', 'char', 'class', 'double', 'enum', 'final', 'float', 'int', 'interface', 'long', 'native', 'private', 'protected', 'public', 'short', 'static', 'strictfp', 'synchronized', 'transient', 'volatile', '@Override', '{', '}', ';', '<', '@', IDENTIFIER}
line 74:23 mismatched input '(' expecting ';'
Может кто-нибудь подсказать ошибку, которую я здесь делаю, есть ли другой способ реализовать это ?. Любые предложения или обсуждения приветствуются. Заранее спасибо:).