2014-04-19 110 views
0

我正在做一個小的學術任務,其中我應該使用Xtext實現NuSMV語言(模型檢查語言)的eclipse插件。提供了xtext語法(有一些小錯誤)。 我創建了一個Xtext項目,並將其命名爲「smv.project」,其語言名稱爲「NuSMV」,擴展名爲「* .smv」。我已經將提供的Xtext語法複製到smv.project/src/NuSMV.xtext中,生成了工件,並創建了運行時eclipse。似乎工作正常,除了那些小錯誤(在我看來,這是在語法中產生的)。語法着色我的DSL在Xtext

現在,我的下一步是更改我的DSL中的默認顏色。顯然,每個用戶在使用我的插件時都可以在eclipse菜單中爲自己做到這一點,但是我可以修改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。當然,我在文件的開始處更改了「包」行。 我已將所有紅色值更改爲255以查看差異。 我已經生成了工件,創建了運行時eclipse,創建了一個* .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. 「外來輸入‘關鍵字’期待‘)’」
  4. 「失配輸入‘{’期待‘=>’」 。

我的問題是:

  1. 正是我應該怎麼做我的類,它實現 IHighlightingConfiguration?
  2. 什麼是詞彙和語義highlighing?
  3. 有什麼我需要知道我的語法着色工作?

非常感謝! :) Chai

+0

聽起來好像您在NuSMVProposalProvider.java文件的錯誤位置添加了行。向我們展示更多的文件。 –

+0

感謝您的回覆!我在問題中添加了完整的文件(對其進行了編輯)。 – chainet

+0

您不能在Xtend文件中編寫Java代碼。正確的語法將是 重寫getKeywordDisplayString(關鍵字關鍵字){..} –

回答

0

NuSMVProposalProvider是不是要走的路。 我根本不需要添加任何代碼。 我正在尋找的是在NuSMVUiModule中添加下一行。java:

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

感謝大家的評論! Chai