我想在我的 Eclipse 插件中编写一个可以处理我的工具语言的编辑器。该语言基于 C/C++,带有附加关键字和注释。我成功地编写了自己的语言类,该类扩展了 GPPLanguage 并利用了相应的 CDT 扩展点。
我遇到的主要问题是我的语言注释中有关键字
。
在这种语言中经常使用这样的内容:
/** @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 中突出显示这些部分。
据我了解this answer是在原始源代码的处理过程中第一个变得活跃的是词法分析器。 这是 CDT Lexer 文档的一部分:
In short this class converts line endings (to '\n') and trigraphs
(to their corresponding character), removes line-splices, comments and whitespace other than newline. Returns preprocessor tokens.
因此词法分析器丢弃了我的部分源代码并且不对其进行标记。由于 Lexer 被声明为最终的,因此它的设计目的并不是扩展它并重用它的功能。
如果我有一个扩展 CDT 的 GNUCPPParser
的解析器,该解析器将无法“查看”我的注释,因为它们没有标记。我怎样才能获得该部分的代币?
最佳答案
虽然注释标记不会以通常的方式传递给解析器(例如,它们不会作为 consume()
的结果出现),但它们不会被完全丢弃:它们由预处理器保留,并通过 IASTTranslationUnit.getComments()
作为 IASTComment
节点提供。您可以使用它来查询注释作为解析后步骤,解析其内容,然后突出显示与您的特殊标记相对应的源范围。
关于java - CDT 词法分析器 : Get Tokens for comments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55708253/