我正在做一个小的学术任务,其中我应该使用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());
}
}
然而,接下来的错误出现:
- “注释@Override不允许用于此位置。” 在第一3行分别
- “外来输入‘关键字’期待‘)’”
- “失配输入‘{’期待‘=>’” 。
我的问题是:
- 正是我应该怎么做我的类,它实现 IHighlightingConfiguration?
- 什么是词汇和语义highlighing?
- 有什么我需要知道我的语法着色工作?
非常感谢! :) Chai
听起来好像您在NuSMVProposalProvider.java文件的错误位置添加了行。向我们展示更多的文件。 –
感谢您的回复!我在问题中添加了完整的文件(对其进行了编辑)。 – chainet
您不能在Xtend文件中编写Java代码。正确的语法将是 重写getKeywordDisplayString(关键字关键字){..} –