可以尝试使用 ANTLR4 而非 ANTLR3,或者使用更高效的 Python 解析器。
使用 ANTLR4 的代码示例:
from antlr4 import *
from Java8Lexer import Java8Lexer
from Java8Parser import Java8Parser
class MyListener(ParseTreeListener):
def enterMethodDeclaration(self, ctx: Java8Parser.MethodDeclarationContext):
print("Found method: " + ctx.Identifier().getText())
def parse_java_file(file_path):
input_stream = FileStream(file_path)
lexer = Java8Lexer(input_stream)
stream = CommonTokenStream(lexer)
parser = Java8Parser(stream)
tree = parser.compilationUnit()
listener = MyListener()
walker = ParseTreeWalker()
walker.walk(listener, tree)
换用更高效的 Python 解析器的代码示例:
from javalang import parse
def parse_java_file(file_path):
with open(file_path, 'r') as f:
java_code = f.read()
tree = parse.parse(java_code)
for path, node in tree.filter(javalang.tree.MethodDeclaration):
print("Found method: " + node.name)