向Antlr Java 8语法添加注释

maw*_*ker 5 java grammar antlr abstract-syntax-tree

我希望将Java8语法用于antlr时,将“注释”记录到AST中(不做任何事情,而将其存储以备以后复制)。https://github.com/antlr/grammars-v4/blob/master/java8/Java8.g4

IE:我想将Java源代码文件读入AST,然后最终再次输出,但要包括

我想知道是否对语法进行了一个简单的调整以允许它...(或者我是否天真的必须将“注释”集成到每个表达式中的想法是这件事的可悲的事实……)以及是否那是什么

COMMENT
    :   '/*' .*? '*/' -> skip
    ;

LINE_COMMENT
    :   '//' ~[\r\n]* -> skip
    ;
Run Code Online (Sandbox Code Playgroud)

maw*_*ker 4

据我所知,您可以通过以下方式将评论保留在自己的“频道”中:

将其添加到语法中:

@lexer::members {
    public static final int WHITESPACE = 1;
    public static final int COMMENTS = 2;
}
Run Code Online (Sandbox Code Playgroud)

并更改为:

COMMENT
    : '/*' .*? '*/' -> channel(COMMENTS)
    ;

LINE_COMMENT
    : '//' ~[\r\n]* -> channel(COMMENTS)
    ;
Run Code Online (Sandbox Code Playgroud)

来自: https: //stackoverflow.com/a/17960734/2801237

官方“文档”(实际上看起来他的书确实是“真正的”文档)简要提到了这一点:

https://github.com/antlr/antlr4/blob/master/doc/grammars.md

(该书的一个版本)说

您可以通过不同的通道将不同的标记发送到解析器。例如,在解析 Java 时,您可能需要在一个通道上使用空格和常规注释,而在另一个通道上使用 Javadoc 注释


这是我收到的来自 antlr 一代的警告:(我读到你可以忽略这些,但是......可能有更好的方法来做到这一点)

警告(155):java8comments.g4:1725:35:规则 WS 包含具有无法识别的常量值的词法分析器命令;词法分析器解释器可能会产生不正确的输出

警告(155):java8comments.g4:1729:33:规则DOC_COMMENT包含具有无法识别的常量值的词法分析器命令;词法分析器解释器可能会产生不正确的输出

警告(155):java8comments.g4:1733:31:规则COMMENT包含具有无法识别的常量值的词法分析器命令;词法分析器解释器可能会产生不正确的输出

警告(155):java8comments.g4:1737:31:规则LINE_COMMENT包含具有无法识别的常量值的词法分析器命令;词法分析器解释器可能会产生不正确的输出