Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建代码地图&;java中ANTLR生成的解析树中的令牌_Java_Antlr_Abstract Syntax Tree - Fatal编程技术网

创建代码地图&;java中ANTLR生成的解析树中的令牌

创建代码地图&;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

我正在使用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"
对。 您只需导航到所需的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
属性,如果语法正确填充,则指向第一个和最后一个标记。然后,您可以使用此信息从输入中获取原始文本。您使用过以下语法: