我正在做一個小的學術任務,其中我應該使用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());
}
}
然而,接下來的錯誤出現:
- 「註釋@Override不允許用於此位置。」 在第一3行分別
- 「外來輸入‘關鍵字’期待‘)’」
- 「失配輸入‘{’期待‘=>’」 。
我的問題是:
- 正是我應該怎麼做我的類,它實現 IHighlightingConfiguration?
- 什麼是詞彙和語義highlighing?
- 有什麼我需要知道我的語法着色工作?
非常感謝! :) Chai
聽起來好像您在NuSMVProposalProvider.java文件的錯誤位置添加了行。向我們展示更多的文件。 –
感謝您的回覆!我在問題中添加了完整的文件(對其進行了編輯)。 – chainet
您不能在Xtend文件中編寫Java代碼。正確的語法將是 重寫getKeywordDisplayString(關鍵字關鍵字){..} –