我想在Eclipse插件中编写一个可以处理工具语言的编辑器。该语言基于带有附加关键字和注释的C / C ++。我成功编写了自己的语言类,该类扩展了GPPLanguage并利用了相应的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 ++)未将注释内的某些部分视为注释。这就是为什么我要在日食中高亮显示那些部分。
据this answer的了解,在处理原始源代码期间第一个激活的是Lexer。 这是CDT Lexer文档的一部分:
简而言之,此类将行尾(转换为“ \ n”)和三字母组合
(以其相应的字符表示),删除行拼接,注释 和换行符以外的空白。返回预处理器令牌。
因此Lexer会将我的部分源代码扔掉,并且不会对其进行标记化。由于Lexer被宣布为最终版本,因此它并非旨在对其进行扩展并重用其功能。
如果我有一个扩展CDT GNUCPPParser
的解析器,则该解析器将无法“看到”我的注释,因为它们没有标记。我也该怎么拥有令牌?
答案 0 :(得分:2)
虽然注释令牌没有以通常的方式传递给解析器(例如,它们不会由于consume()
而出现),但它们不会被完全丢弃:它们由预处理器保留,并可以作为通过IASTComment
的{{1}}个节点。您可以使用它来查询注释,作为后期解析步骤,解析注释的内容,然后突出显示与您的特殊标记相对应的源范围。