语法在Xtext中着色我的DSL

时间:2014-04-19 13:14:31

标签: eclipse eclipse-plugin xtext xtend

我正在做一个小型的学术任务,我应该使用Xtext为NuSMV语言(一种模型检查语言)实现一个eclipse插件。提供了xtext语法(带有一些小错误)。 我创建了一个Xtext项目,并将其命名为“smv.project”,语言名称为“NuSMV”,扩展名为“* .smv”。我已经将提供的Xtext语法转换为smv.project / src / NuSMV.xtext,生成了工件,并创建了运行时eclipse。似乎工作正常,除了那些小错误(在我看来源于语法)。

现在,我的下一步是更改DSL中的默认颜色。显然,每个用户在使用我的插件时都可以在eclipse菜单中为自己做这件事,但是我想要改变DEFAULT颜色。我已经阅读了Xtext文档的语法着色。它很短,有许多我不理解的术语。我所理解的是在Xtext,Lexical和Semantic中有两种语法着色。我不明白每个人的意思,但在我看来,词汇着色更简单,所以我去了。 文档说我应该实现IHighlightingConfiguration接口。它显示了一个名为DefaultHighlightingConfiguration的实现示例(完整源代码可以在这里看到https://github.com/eclipse/xtext/blob/master/plugins/org.eclipse.xtext.ui/src/org/eclipse/xtext/ui/editor/syntaxcoloring/DefaultHighlightingConfiguration.java)。我已经将这个实现应用到我的项目中,smv.project.ui / src / smv.project.ui.editor.syntaxcoloring。当然,我在文件的开头更改了“package”行。 我已将所有红色值更改为255以查看差异。 我再次生成了工件,创建了运行时eclipse,创建了一个* .smv文件,但颜色是相同的。

我的猜测是我需要在一些变量或配置类中设置我的新类...我试图在示例的存储库中搜索“DefaultHighlightingConfiguration”,并发现它在文件XtextProposalProvider.java中使用(完整源代码{第235行中的{3}}) - 我们正在重写getKeywordDisplayString()。所以我去了我的存储库中已经存在的NuSMVProposalProvider.java并尝试添加相同的行:

@Override
 protected StyledString getKeywordDisplayString(Keyword keyword) {
    return stylerFactory.createFromXtextStyle(keyword.getValue(),
            defaultLexicalHighlightingConfiguration.keywordTextStyle());
}

这是我完整的NuSMVProposalProvider.xtend:

/*
 * generated by Xtext
 */
package smv.project.ui.contentassist

import smv.project.ui.contentassist.AbstractNuSMVProposalProvider
import javax.inject.Inject
import org.eclipse.xtext.ui.editor.syntaxcoloring.DefaultHighlightingConfiguration
import org.eclipse.jface.viewers.StyledString
import org.eclipse.xtext.Keyword

/**
 * see http://www.eclipse.org/Xtext/documentation.html#contentAssist on how to customize content assistant
 */
class NuSMVProposalProvider extends AbstractNuSMVProposalProvider {

    @Inject
    private DefaultHighlightingConfiguration defaultLexicalHighlightingConfiguration;

    @Override
     protected StyledString getKeywordDisplayString(Keyword keyword) {
        return stylerFactory.createFromXtextStyle(keyword.getValue(),
                defaultLexicalHighlightingConfiguration.keywordTextStyle());
    }

}

然而,出现了下一个错误:

  1. “此位置不允许使用注释@Override。”
  2. “无关的输入'关键字'期待'''”
  3. “输入不匹配'{'期待'=>'” 分别在前3行中。
  4. 我的问题是:

    1. 我应该怎样处理实施的课程 IHighlightingConfiguration?
    2. 什么是词汇和语义高亮?
    3. 我的语法着色还有什么我需要知道的吗?
    4. 非常感谢!! :) 柴

1 个答案:

答案 0 :(得分:1)

NuSMVProposalProvider还没有结束。 我没有必要在那里添加任何代码。 我正在寻找的是在NuSMVUiModule.java中添加下一行:

public Class<? extends IHighlightingConfiguration> bindIHighlightingConfiguration () {
     return DefaultHighlightingConfiguration.class;
}

感谢大家的评论! 柴