Я занимаюсь небольшим академическим заданием, в котором я должен реализовать плагин eclipse для языка NuSMV (язык проверки модели) с использованием Xtext. Была предоставлена xtext-грамматика (с некоторыми незначительными ошибками). Я создал проект Xtext и назвал его «smv.project» с именем языка «NuSMV» и расширением «* .smv». Я скопировал предоставленную грамматику Xtext в smv.project/src/NuSMV.xtext, сгенерировал артефакты и создал затмение времени выполнения. Кажется, что он отлично работает, кроме тех мелких ошибок (которые, по моему мнению, возникли из грамматики).Синтаксис, окрашивающий мою DSL в Xtext
Теперь мой следующий шаг - изменить цвета по умолчанию в моей DSL. Очевидно, что каждый пользователь может сделать это для себя в меню затмения при использовании моего плагина, но я изменю цвет 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. Конечно, я изменил строку «package» в начале файла. Я изменил все красные значения на 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) в строке 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?
- Что такое Лексическое и Семантическое высокопоставленное?
- Есть ли что-то еще, что мне нужно знать, чтобы моя синтаксическая раскраска работала?
Большое спасибо! :) Chai
Похоже, вы добавили строки не в том месте в файле NuSMVProposalProvider.java. Покажите нам больше файла. –
Спасибо за ваш ответ! Я добавил полный файл в вопрос (отредактировал его). – chainet
Вы не можете написать Java-код в файле Xtend. Правильный синтаксис будет override getKeywordDisplayString (ключевое слово ключевого слова) {..} –