在我的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();
}
有没有办法做到这一点?我认为我的第一个问题是我不了解由谁或什么负责语法错误标记(可能是索引器)。
答案 0 :(得分:1)
形式为Symbol ... could not be resolved
的错误是CDT的代码分析组件(特别是ProblemBindingChecker
)产生的,它遍历AST并报告解决的任何IASTName
的错误(通过{{1} })到IASTName.resolveBinding()
。
只有ProblemBinding
个节点可以解析为绑定,因此如果您遇到IASTName
令牌的错误,则表明解析器正在为其构建一个@result
节点。如果您更改了令牌类型,我不确定会如何发生,我想这取决于您如何在扩展解析器中处理新令牌类型。