gpt4 book ai didi

java - Eclipse CDT 扩展以构建附加语言

转载 作者:行者123 更新时间:2023-11-29 04:57:00 25 4
gpt4 key购买 nike

我想扩展 gnu c 的 CDT 语言插件,以此为基础创建某种新语言。

新语言在编辑器中应该有不同的视觉外观。如果前面有一个特殊的预处理器指令(如注释),我想将方法​​体涂成灰色。

有人知道在哪里可以扩展 GCC 语言来进行这样的修改吗?



编辑1:

例如,我希望 specialFunction 的方法体颜色为灰色,作为示例注释的原因 -> #annotation

#annotation
int specialFunction(){
return 1;
}


编辑2:

到目前为止,我尝试的是构建一种“扩展语言”。计划是突出显示预处理器位置并保存该位置,以便为下面的方法着色。我设法让预处理器关键字上色,但不知道如何处理方法体颜色。

public class OwnKeyWords extends GCCLanguage implements ICLanguageKeywords

@Override
public String[] getPreprocessorKeywords() {
//System.out.println("Called keywords" + timesPre++);
return new String[]{
"hide",
"show"
};
}

着色示例:

#hide
int specialFunction(){
return 1;
}

在上面的示例中,“隐藏”将突出显示。



编辑3:

我尝试实现 ISemanticHighlighter 并尝试了几种方法来突出显示我的代码:

CVariable
CFunction
ObjectStyleMacro
...

但它们都不适合用预处理器指令或顶部的任何其他内容突出显示方法体。

还有 ISemanticHighlighter 中的注释:

 * NOTE: Implementors are not allowed to keep a reference on the token or on any object retrieved from the
* token.

不是我想要实现的,因为我想保留对高亮对象的引用,以便以后操作。

也许 org.eclipse.cdt.ui.text.folding.DefaultCFoldingStructureProvider 也是一个选项,在那里我无法为仪器着色,我可以隐藏它。

最佳答案

这听起来不像是语义突出显示的新语言。

CDT 有一个很棒的扩展点,称为 org.eclipse.cdt.ui.semanticHighlighting,它允许您定义自定义语义突出显示规则。

这是 plugin.xml 条目的示例:

   <extension
point="org.eclipse.cdt.ui.semanticHighlighting">
<semanticHighlighting
class="com.example.SemanticHighlighter"
defaultBold="true"
defaultEnabled="true"
defaultTextColor="35,0,35"
displayName="Example Semantic Highlighter"
id="com.example.SemanticHighlighter"
preferenceKey="com.example.SemanticHighlighter.pref"
priority="5">
</semanticHighlighting>
</extension>

然后在您的 com.example.SemanticHighlighter 中实现 org.eclipse.cdt.ui.text.ISemanticHighlighter 接口(interface)。只有一种方法 consumes 需要一个 ISemanticToken。分析标记以查看它是否与您的荧光笔相关并返回 true 以使其突出显示。

下面是该方法的简单实现:

@Override
public boolean consumes(ISemanticToken token) {
IBinding binding = token.getBinding();
if (binding instanceof IFunction) {
IASTNode node = token.getNode();
if (binding != null && node instanceof IASTName && ((IASTName) node).isReference()) {
String n = binding.getName();
if ("MySpecialFunction".equals(n)) {
return true;
}
}
}
return false;
}

实现后,用户可以通过偏好页面C/C++ - Editor - Syntax Coloring修改颜色和适用性:

highlighting preference page

关于java - Eclipse CDT 扩展以构建附加语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33424094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com