gpt4 book ai didi

parsing - 使用 ANTLR 捕获(并保留)所有评论

转载 作者:行者123 更新时间:2023-12-01 07:00:47 28 4
gpt4 key购买 nike

我正在 ANTLR 中编写一个语法,将 Java 源文件解析为 AST 以供以后分析。与其他解析器(如 JavaDoc)不同,我试图保留所有注释。这是很难的注释,可以在代码中的任何地方使用。如果源代码中某处的注释与语法不匹配,则 ANTLR 无法完成文件的解析。

有没有办法让 ANTLR 自动将它找到的任何注释添加到 AST 中?我知道词法分析器可以使用 {skip();} 简单地忽略所有注释。或通过将文本发送到隐藏 channel 。设置了这两个选项中的任何一个后,ANTLR 就可以毫无问题地解析文件。

欢迎任何想法。

最佳答案

“权威 Antlr 4 引用”中的第 12.1 节展示了如何访问注释而不必在整个语法中散布注释规则。简而言之,您将其添加到语法文件中:

grammar Java;

@lexer::members {
public static final int WHITESPACE = 1;
public static final int COMMENTS = 2;
}

然后对于您的评论规则,请执行以下操作:
COMMENT
: '/*' .*? '*/' -> channel(COMMENTS)
;

LINE_COMMENT
: '//' ~[\r\n]* -> channel(COMMENTS)
;

然后在您的代码中通过 getHiddenTokensToLeft/getHiddenTokensToRight 请求 token 并查看本书中的 12.1 部分,您将了解如何执行此操作。

关于parsing - 使用 ANTLR 捕获(并保留)所有评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12485132/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com