创建代码地图&;java中ANTLR生成的解析树中的令牌
我正在使用ANTLR为使用Java的python代码创建解析树: 对于以下python代码:创建代码地图&;java中ANTLR生成的解析树中的令牌,java,antlr,abstract-syntax-tree,Java,Antlr,Abstract Syntax Tree,我正在使用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
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"
对。
您只需导航到所需的ParseTree节点,并使用
它不会直接位于节点上,并且子节点包含在树中的父节点中,因此您需要特定的终端节点。
下面的代码只是主题代码,你必须玩弄它才能得到你想要的
也就是说,您最好使用一个实现并在发生时响应的解析树,而不是尝试显式地导航到解析树
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()
);
这几乎是这个问题的重复:。你们都在上同一堂课吗?我想你是第三个询问解析Python3代码并从中提取特定解析树的人。什么是ANTLR版本?你的例子的语法是什么样的?ANTLR v3的
CommonTree
具有startIndex
和endIndex
属性,如果语法正确填充,则指向第一个和最后一个标记。然后,您可以使用此信息从输入中获取原始文本。您使用过以下语法: