java - CDT 词法分析器 : Get Tokens for comments

标签 java java-8 eclipse-plugin eclipse-cdt lexer

我想在我的 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/

相关文章:

java - 断言,为 null 或者是特定类的实例

java - 迷宫解决算法卡在两个地方之间

java - 如何通过蓝牙向未指定的设备发送串行数据?

java - "String[]::new"是什么意思?

java - Annotation 处理 unknown Annotation

java - Eclipse 插件开发。我可以在我的插件中使用现有的 jar 文件吗?

java - 对 Oracle 11g 的 JDBC 请求虽然表面上成功但未能提交

java-8 - Java 8 : Elegant way to check that two or more variables are not null

java - Eclipse 插件 View - 如何动态添加和处置复合 Material

Eclipse 插件 : How to show a menu contribution only when a persective is active?