当使用Java8语法进行antlr时,我希望将‘注释’记录到AST中(不是对它们做任何事情,而是存储以便以后的复制)。https://github.com/antlr/grammars-v4/blob/master/java8/Java8.g4
IE:我想将java源代码文件读入AST中,然后最终再次输出它,但是要包括
我想知道是否有一个简单的调整语法允许这.(或者,如果我天真的想法,必须把‘评论’纳入每一个表达是可悲的事实,这件事.)如果是这样..。那是什么?
COMMENT
: '/*' .*? '*/' -> skip
;
LINE_COMMENT
: '//' ~[\r\n]* -> skip
;发布于 2016-05-29 00:45:52
据我所见,你可以通过以下方式将评论保留在自己的“频道”上:
将其添加到语法中:
@lexer::members {
public static final int WHITESPACE = 1;
public static final int COMMENTS = 2;
}并转变为:
COMMENT
: '/*' .*? '*/' -> channel(COMMENTS)
;
LINE_COMMENT
: '//' ~[\r\n]* -> channel(COMMENTS)
;来自: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包含一个不被识别的常量的lexer命令;lexer解释器可能产生错误的输出 警告(155):java8comments.g4:1729:33: DOC_COMMENT规则包含一个不被识别的常量的lexer命令;lexer解释器可能产生不正确的输出 警告(155):java8comments.g4:1733:31:规则注释包含一个不被识别的常量的lexer命令;lexer解释器可能产生不正确的输出 警告(155):java8comments.g4:1737:31: LINE_COMMENT规则包含一个不被识别的常量的lexer命令;lexer解释器可能产生不正确的输出
https://stackoverflow.com/questions/37504826
复制相似问题