2014-04-19 3 views
0

Я занимаюсь небольшим академическим заданием, в котором я должен реализовать плагин 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()); 
    } 

} 

Однако следующие ошибки :

  1. «Аннотации @Override запрещены для этого местоположения».
  2. "посторонний вход 'ключевое слово' ожидает ')'"
  3. "несоответствующие вход '{' ожидая '=>'" в первые 3 строки, соответственно.

Мои вопросы:

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

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

+0

Похоже, вы добавили строки не в том месте в файле NuSMVProposalProvider.java. Покажите нам больше файла. –

+0

Спасибо за ваш ответ! Я добавил полный файл в вопрос (отредактировал его). – chainet

+0

Вы не можете написать Java-код в файле Xtend. Правильный синтаксис будет override getKeywordDisplayString (ключевое слово ключевого слова) {..} –

ответ

0

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

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

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

Смежные вопросы