gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 07:35:33 29 4
gpt4 key购买 nike

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

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

欢迎提出任何想法。

最佳答案

“The Definitive Antlr 4 Reference”中的第 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/49508588/

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