我需要获取java文件的方法声明参数。 我正在使用JavaBaseListener接口和那些方法:
@Override
public Object visitMethodDeclaration(JavaParser.MethodDeclarationContext ctx) {
TokenStream tokens = parser.getTokenStream();
String type = "void";
if(ctx.type() != null) {
type = tokens.getText(ctx.type().getSourceInterval());
}
String args = tokens.getText(ctx.formalParameters());
System.out.println("\t" + type + " " + ctx.Identifier() + args + ";");
return super.visitMethodDeclaration(ctx);
}

问题是,方法名和方法类名之间没有空格。 输入:private void addLoan(贷款贷款)
输出:void addLoan(Loanloan);
我尝试更改java.g4语法文件,并在那里添加了空格
formalParameter :variableModifier * type" " variableDeclaratorId ;
但现在我有很多错误,例如:
第1:6行没有可行的选择在输入'公共' 第1:12行无关输入' '期待标识符 第1:20行无关输入' '期待{'延伸','实施',' {','<&#;; 第2:5行输入'列表' ...
我的问题的最佳解决方案是什么?我该如何处理? 谢谢你前进
答案 0 :(得分:0)
在java8
找到的语法in this repository中,WS
规则
WS : [ \t\r\n\u000C]+ -> skip
抛弃空白区域(-> skip
)。
使用小语法in this answer,您可以看到-> skip
和-> channel(HIDDEN)
之间的区别。
使用WS : [ \t] -> channel(HIDDEN) ;
输出
Expression found : 3 + 4
使用WS : [ \t] -> skip ;
输出
Expression found : 3+4
使用命令
$ grun Question question -tokens -diagnostics input.txt
你可以看到,在第一种情况下,WS
令牌出现在令牌列表中,而在第二种情况下它们会消失。
This other example清楚地表明getText()
取决于它:paydeltaco98
与pay delta co 98
。