为了账号安全,请及时绑定邮箱和手机立即绑定

CDT Lexer:获取用于评论的令牌

CDT Lexer:获取用于评论的令牌

catspeake 2022-10-07 17:27:39
我想在我的 Eclipse 插件中编写一个可以处理我的工具语言的编辑器。该语言基于带有附加关键字和注释的 C/C++。我成功地编写了自己的语言类,该类扩展了 GPLanguage 并利用了相应的 CDT 扩展点。我的主要问题是我的语言有keywords inside comments.在这种语言中,经常使用这样的东西:/** @ctPrint *  * This is a real comment, describing this block. * * @author    Sadik     // This looks like a comment, but it's part of the syntax. The compiler will treat this in a special way. * @tag       CT-001    // The @tag is part of syntax, the real comment starts with // * @result    TRUE      // Again, @result is part of the syntax. *  * This is a final description. */因此,注释中的某些部分不会被我的编译器视为注释(扩展 g++)。这就是为什么我想在 eclipse 中突出显示这些部分。据我从这个答案中了解到,在处理原始源代码期间第一个变得活跃的是 Lexer。这是 CDT Lexer 文档的一部分:简而言之,这个类转换行尾(到'\n')和三元组(到它们对应的字符),删除 换行符以外的换行符、注释和空格。返回预处理器令牌。因此,Lexer 会丢弃我的部分源代码并且不会对其进行标记。由于 Lexer 被声明为 final,它的设计目的不是扩展它并重用它的功能。如果我有一个扩展 CDT's 的解析器GNUCPPParser,该解析器将无法“看到”我的评论,因为它们没有标记。我怎样才能获得该部分的令牌?
查看完整描述

1 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

虽然注释标记没有以通常的方式传递给解析器(例如,它们不会作为 的结果出现consume()),但它们并没有完全丢弃:它们由预处理器保留,并IASTComment通过IASTTranslationUnit.getComments(). 您可以使用它来查询评论作为解析后的步骤,解析其内容,然后突出显示与您的特殊标记对应的源范围。



查看完整回答
反对 回复 2022-10-07
  • 1 回答
  • 0 关注
  • 69 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信