使用CDT

时间:2019-07-19 12:02:41

标签: eclipse-plugin eclipse-cdt

在我的eclipse插件中,我想支持我的工具的语言,该语言用一些关键字和概念扩展了C ++。我的语言类,编辑器类和源解析器类都继承了C ++的CDT类。我可以解析关键字并将其节点添加到AST。但是我的一些关键字/命令编辑器将始终标记为“无法解析符号”。

示例: 有一个命令“ @result”可将最后一次计算的结果作为枚举值返回,该值在工具核心的某些头文件中定义。

typedef enum {
    OK = 0;
    WARNING = 1;
    ERROR = 2;
} errCode_t;

因此,命令@result返回0、1或2。但是在编辑器中,该命令被标记为Symbol '@result' could not be resolved。不,我要告诉索引器不要尝试解决此令牌。

在Preprocessor类中,我可以将令牌类型从IToken.tIDENTIFIER更改为50000。我试图达到的目标是类似

if (token.getType() == 50000) {
    // don't try to resolve symbol
    return null;
} else {
    return super.resolveSymbol();
}

有没有办法做到这一点?我认为我的第一个问题是我不了解由谁或什么负责语法错误标记(可能是索引器)。

1 个答案:

答案 0 :(得分:1)

形式为Symbol ... could not be resolved的错误是CDT的代码分析组件(特别是ProblemBindingChecker)产生的,它遍历AST并报告解决的任何IASTName的错误(通过{{1} })到IASTName.resolveBinding()

只有ProblemBinding个节点可以解析为绑定,因此如果您遇到IASTName令牌的错误,则表明解析器正在为其构建一个@result节点。如果您更改了令牌类型,我不确定会如何发生,我想这取决于您如何在扩展解析器中处理新令牌类型。