更改 Java.g4 语法文件

Change Java.g4 grammar file

我需要获取 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(Loan loan)

输出:void addLoan(Loanloan);

我尝试更改 java.g4 语法文件,并在其中添加了空格

正式参数 : variableModifier* 类型 " " variableDeclaratorId ;

但现在我有很多错误,例如:

行1:6输入没有可行的选择'public ' 行 1:12 外来输入 ' ' 期待标识符 行 1:20 无关输入 ' ' 期待 {'extends', 'implements', '{', '<'} 第 2:5 行在输入 'List ' 处没有可行的替代方案 ...

我的问题的最佳解决方案是什么?我该如何处理? 感谢转发

java8语法中发现in this repositoryWS规则

WS  :  [ \t\r\n\u000C]+ -> skip

将白色 space 扔掉 (-> 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 个标记出现在标记列表中,而在第二种情况下,它们消失了。

清楚地表明 getText() 依赖于它:paydeltaco98pay delta co 98.