使用 CDT 为 Eclipse 插件中的某些符号禁用语法错误 "Symbol <id> could not be resolved"
Disable Syntax Error "Symbol <id> could not be resolved" for some symbols in Eclipse Plugin using CDT
在我的 eclipse 插件中,我想支持我的工具语言,它使用一些关键字和概念扩展了 C++。我的语言 class、编辑器 class 和源代码解析器 class 都继承了 C++ 的 CDT classes。我可以解析关键字并将它们的节点添加到 AST。但是我的一些keywords/commands编辑器总是标记为"Symbol could not be resolved".
示例:
有一个命令“@result” returns 最后一次计算的结果作为枚举值,该值在工具核心的某个头文件中定义。
typedef enum {
OK = 0;
WARNING = 1;
ERROR = 2;
} errCode_t;
所以命令 @result
returns 0、1 或 2。但是在编辑器中命令被标记为 Symbol '@result' could not be resolved
。不,我想告诉索引器不要尝试解析这个标记。
在预处理器中 class 我可以将令牌类型从 IToken.tIDENTIFIER
更改为 50000。我试图通过它实现的是
if (token.getType() == 50000) {
// don't try to resolve symbol
return null;
} else {
return super.resolveSymbol();
}
有办法吗?我认为我的第一个问题是我不明白谁或什么负责语法错误标记(也许是索引器?)。
Symbol ... could not be resolved
形式的错误是由 CDT 的代码分析组件产生的,特别是 ProblemBindingChecker
,它遍历 AST 并报告任何 IASTName
的错误解析(通过 IASTName.resolveBinding()
)为 ProblemBinding
.
只有 IASTName
节点解析为绑定,因此如果您的 @result
令牌收到此错误,则表明解析器正在为其构建 IASTName
节点.如果您更改了令牌类型,我不确定这是怎么发生的,我想这取决于您在扩展解析器中处理新令牌类型的方式。
在我的 eclipse 插件中,我想支持我的工具语言,它使用一些关键字和概念扩展了 C++。我的语言 class、编辑器 class 和源代码解析器 class 都继承了 C++ 的 CDT classes。我可以解析关键字并将它们的节点添加到 AST。但是我的一些keywords/commands编辑器总是标记为"Symbol could not be resolved".
示例: 有一个命令“@result” returns 最后一次计算的结果作为枚举值,该值在工具核心的某个头文件中定义。
typedef enum {
OK = 0;
WARNING = 1;
ERROR = 2;
} errCode_t;
所以命令 @result
returns 0、1 或 2。但是在编辑器中命令被标记为 Symbol '@result' could not be resolved
。不,我想告诉索引器不要尝试解析这个标记。
在预处理器中 class 我可以将令牌类型从 IToken.tIDENTIFIER
更改为 50000。我试图通过它实现的是
if (token.getType() == 50000) {
// don't try to resolve symbol
return null;
} else {
return super.resolveSymbol();
}
有办法吗?我认为我的第一个问题是我不明白谁或什么负责语法错误标记(也许是索引器?)。
Symbol ... could not be resolved
形式的错误是由 CDT 的代码分析组件产生的,特别是 ProblemBindingChecker
,它遍历 AST 并报告任何 IASTName
的错误解析(通过 IASTName.resolveBinding()
)为 ProblemBinding
.
只有 IASTName
节点解析为绑定,因此如果您的 @result
令牌收到此错误,则表明解析器正在为其构建 IASTName
节点.如果您更改了令牌类型,我不确定这是怎么发生的,我想这取决于您在扩展解析器中处理新令牌类型的方式。