【问题标题】:Syntax coloring my DSL in Xtext在 Xtext 中为我的 DSL 着色的语法
【发布时间】: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());
    }

}

但是,出现了下一个错误:

  1. “此位置不允许使用注释 @Override。”
  2. “外部输入 'keyword' 期望 ')'”
  3. “不匹配的输入 '{' 期待 '=>'” 分别在前 3 行中。

我的问题是:

  1. 我应该如何处理我的类实现 高亮配置?
  2. 什么是词汇和语义突出显示?
  3. 还有什么我需要知道的才能让我的语法着色起作用吗?

非常感谢!! :) 柴

【问题讨论】:

  • 听起来您在 NuSMVProposalProvider.java 文件中的错误位置添加了这些行。向我们展示文件的更多内容。
  • 感谢您的回复!我已在问题中添加了完整文件(已编辑)。
  • 您不能在 Xtend 文件中编写 Java 代码。正确的语法是 override getKeywordDisplayString(Keyword keyword) { .. }
  • 这解决了提到的错误,但颜色和以前一样。我在这里做错了什么?

标签: eclipse eclipse-plugin xtext xtend


【解决方案1】:

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

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

感谢大家的 cmets! 柴

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 2018-11-27
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2011-05-20
    相关资源
    最近更新 更多