更改Java.g4语法文件

时间:2017-11-29 11:47:08

标签: java antlr grammar

我需要获取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行输入'列表' ...

我的问题的最佳解决方案是什么?我该如何处理? 谢谢你前进

1 个答案:

答案 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()取决于它:paydeltaco98pay delta co 98