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)
据我所知,您可以通过以下方式将评论保留在自己的“频道”中:
将其添加到语法中:
@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包含具有无法识别的常量值的词法分析器命令;词法分析器解释器可能会产生不正确的输出