Синтаксис раскраски моего DSL в Xtext

Я делаю небольшое академическое задание, в котором я должен реализовать плагин eclipse для языка NuSMV (язык проверки модели) с использованием Xtext. Была предоставлена ​​грамматика xtext (с некоторыми незначительными ошибками). Я создал проект Xtext и назвал его "smv.project" с именем языка "NuSMV" и расширением "*.smv". Я скопировал предоставленную грамматику Xtext в smv.project/src/NuSMV.xtext, сгенерировал артефакты и создал затмение во время выполнения. Кажется, работает нормально, за исключением тех мелких ошибок (которые, по моему мнению, возникли в грамматике).

Теперь мой следующий шаг - изменить цвета по умолчанию в моем DSL. Очевидно, что каждый пользователь может сделать это для себя в меню eclipse при использовании моего плагина, но я изменю цвет DEFAULT. Я прочитал документацию Xtext для окраски синтаксиса. Это было коротко и было много терминов, которые я не понимал. Что я действительно понял, так это то, что в Xtext есть 2 вида окраски синтаксиса: 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. Конечно, я изменил строку "пакет" в начале файла. Я изменил все красные значения на 255, чтобы увидеть разницу. Я снова сгенерировал артефакты, создал затмение во время выполнения, создал файл *.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). Итак, я пошел в уже существующий 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. msgstr "несоответствующий ввод" {'ожидание'=>'"в первых 3 строках соответственно.

Мои вопросы:

  1. Что именно я должен делать с моим классом, который реализует IHighlightingConfiguration?
  2. Что такое лексическая и семантическая подсветка?
  3. Есть ли что-то еще, что мне нужно знать, чтобы моя синтаксическая раскраска работала?

Большое спасибо!!:) Чай

1 ответ

Решение

NuSMVProposalProvider не был подходящим способом. Мне не нужно было добавлять код там вообще. Я искал добавление следующих строк в NuSMVUiModule.java:

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

Спасибо всем за их комментарии! Chai

Другие вопросы по тегам