【发布时间】:2014-04-19 13:14:30
【问题描述】:
我正在做一项小型学术任务,其中我应该使用 Xtext 为 NuSMV 语言(一种模型检查语言)实现一个 eclipse 插件。提供了 xtext 语法(有一些小错误)。 我创建了一个 Xtext 项目并将其命名为“smv.project”,语言名称为“NuSMV”,扩展名为“*.smv”。我已经将提供的 Xtext 语法复制到 smv.project/src/NuSMV.xtext 中,生成了工件,并创建了运行时 eclipse。除了那些小错误(我认为这些错误源于语法)之外,似乎工作正常。
现在,我的下一步是更改 DSL 中的默认颜色。显然,每个用户在使用我的插件时都可以在 eclipse 菜单中为自己执行此操作,但我希望更改默认颜色。我已经阅读了有关语法着色的 Xtext 文档。它很短,有很多我不明白的术语。我所理解的是,Xtext 中有两种语法着色,词汇和语义。我不明白每个的含义,但在我看来词汇着色更简单,所以我去了。 文档说我应该实现接口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 行中的 987654322@) - 我们正在覆盖 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。”
- “外部输入 'keyword' 期望 ')'”
- “不匹配的输入 '{' 期待 '=>'” 分别在前 3 行中。
我的问题是:
- 我应该如何处理我的类实现 高亮配置?
- 什么是词汇和语义突出显示?
- 还有什么我需要知道的才能让我的语法着色起作用吗?
非常感谢!! :) 柴
【问题讨论】:
-
听起来您在 NuSMVProposalProvider.java 文件中的错误位置添加了这些行。向我们展示文件的更多内容。
-
感谢您的回复!我已在问题中添加了完整文件(已编辑)。
-
您不能在 Xtend 文件中编写 Java 代码。正确的语法是 override getKeywordDisplayString(Keyword keyword) { .. }
-
这解决了提到的错误,但颜色和以前一样。我在这里做错了什么?
标签: eclipse eclipse-plugin xtext xtend