我使用ANTLR使用Java为python代码创建解析树:
对于以下python代码:
def sum(a, b):
return a + b
print("Hello World")
ANTLR输出以下AST:
file_input
funcdef
parameters
typedargslist
tfpdef
tfpdef
suite
simple_stmt
return_stmt
arith_expr
atom
atom
atom_expr
atom
trailer
atom
在Java中是否有一种方法可以将类型映射到代码中作为示例:
funcdef : "def sum(a,b)"
parameters : "a,b"
simple_stmt : "return a + b"
答案 0 :(得分:0)
是。 您只需导航到所需的ParseTree节点,然后使用PaseTree.getText()
提取文本它不会直接在节点上,并且子节点包含在树中的父节点中,因此您需要特定的终端节点。 以下代码只是主题,你必须玩它以获得你想要的东西。
也就是说,您最好使用实现ParseTreeListener并在发生时进行响应,而不是尝试明确导航到解析树。
Python3.FuncdefContext ctx = ...;
System.out.printf( "funcdef: def %s ( %s )\n",
ctx.getChild(1).getText()
ctx.getChild(2).getChild(0).getText()
);
System.out.printf( "parameters: %s \n",
ctx.getChild(2).getChild(0).getText()
);
System.out.printf( "simple_stmt: %s \n",
ctx.getChild(2).getChild(1).getText()
);