2014-04-19 62 views
0

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

现在,我的下一步是更改我的DSL中的默认颜色。显然,每个用户在使用我的插件时都可以在eclipse菜单中为自己做到这一点,但是我可以修改DEFAULT颜色。我已阅读Xtext文档的语法着色。它很短,有很多我不明白的术语。我所理解的是在Xtext,Lexical和Semantic中有2种语法着色。我不明白每个词的意思,但在我看来,词汇着色更简单,所以我去了。 该文件说,我应该实现接口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。当然,我在文件的开始处更改了“包”行。 我已将所有红色值更改为255以查看差异。 我已经生成了工件,创建了运行时eclipse,创建了一个* .smv文件,但颜色是一样的。

我的猜测是我需要在一些变量或配置类中设置我的新类...我尝试搜索示例存储库中的“DefaultHighlightingConfiguration”,并发现它在文件XtextProposalProvider.java中使用(完整源代码https://github.com/eclipse/xtext/blob/87a6c7dc25074ca4ff28429c059e728ef420b926/plugins/org.eclipse.xtext.xtext.ui/src/org/eclipse/xtext/ui/contentassist/XtextProposalProvider.java)第235行 - 我们重载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. 什么是词汇和语义highlighing?
  3. 有什么我需要知道我的语法着色工作?

非常感谢! :) Chai

+0

听起来好像您在NuSMVProposalProvider.java文件的错误位置添加了行。向我们展示更多的文件。 –

+0

感谢您的回复!我在问题中添加了完整的文件(对其进行了编辑)。 – chainet

+0

您不能在Xtend文件中编写Java代码。正确的语法将是 重写getKeywordDisplayString(关键字关键字){..} –

回答

0

NuSMVProposalProvider是不是要走的路。 我根本不需要添加任何代码。 我正在寻找的是在NuSMVUiModule中添加下一行。java:

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

感谢大家的评论! Chai