创建一个代码和地图来自ANTLR的令牌生成java

时间:2018-03-21 01:17:31

标签: 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
          arith_expr
            atom
            atom
  atom_expr
    atom
    trailer
      atom

在Java中是否有一种方法可以将类型映射到代码中作为示例:

funcdef : "def sum(a,b)"
parameters : "a,b"
simple_stmt : "return a + b"

1 个答案:

答案 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()
     );