从 java 中的 ANTLR 生成的解析树创建代码和令牌的映射
Create a Map of code & token from ANTLR generated parse tree in java
我正在使用 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 节点并使用 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()
);
我正在使用 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 节点并使用 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()
);