我想列出使用ANTLR4在Java源代码中使用的所有变量。对于下面的源,结果应该是a,b,i
。
class Item {}
class First {
public static void main(String[] args) {
int a = 3;
int b;
b = a + 1;
Item i = new Item();
i = new Item();
System.out.println(b);
}
}
问题是,我不知道如何区分变量和System
,因为它们都被标记为expression -> primary
。
我想这是一个常见的问题,但我找不到合适的答案。有谁可以帮我?
发布于 2014-06-13 07:15:39
只需从enterVariableDeclarator(...)
中重写JavaBaseListener
方法,以获得文本variableDeclaratorId
匹配的信息:
public class Main {
public static void main(String[] args) throws Exception {
final String source = "class Item {}\n" +
"class First {\n" +
" public static void main(String[] args) {\n" +
" int a = 3;\n" +
" int b;\n" +
" b = a + 1;\n" +
" Item i = new Item();\n" +
" i = new Item();\n" +
" System.out.println(b);\n" +
" }\n" +
"}";
final JavaLexer lexer = new JavaLexer(new ANTLRInputStream(source));
final JavaParser parser = new JavaParser(new CommonTokenStream(lexer));
final List<String> variables = new ArrayList<>();
ParseTreeWalker.DEFAULT.walk(new JavaBaseListener() {
// variableDeclarator
// : variableDeclaratorId ('=' variableInitializer)?
// ;
@Override
public void enterVariableDeclarator(@NotNull JavaParser.VariableDeclaratorContext ctx) {
variables.add(ctx.variableDeclaratorId().getText());
}
}, parser.compilationUnit());
System.out.printf("variable=%s", variables);
}
}
将印刷:
variable=[a, b, i]
https://stackoverflow.com/questions/24208450
复制