2011-09-15 53 views
1

我正在處理的項目具有自定義文件格式和預定義的結構。該結構非常簡單且通用(我無法改變它):它由(嵌套)命令和類型化屬性組成。如何使用XText創建方言

使用這種結構,已經創建了幾種方言。方言是通用語法的「實例化」,並指定命令的名稱和含義以及期望的屬性。

我爲這些方言之一創建了一個EMF模型,並且我想重用XText來輕鬆創建專業的文本編輯器,並且能夠將我的模型讀取和寫入正確的格式。

現在我有一個選擇。一方面,我可以直接定位方言,並將相同語法中的定製文件結構和方言中的概念混合在一起。另一方面,我可以創建一個描述文件結構的語法,並且在此之上我可以描述我的方言。

我應該遵循哪種方式?我認爲後者是最好的,但我怎樣才能創建一個描述這兩層的語法呢?

回答

3

Xtext允許擴展現有的語言:在語法的頭部,您可以指定一個父語法,它會被繼承。

有關示例,請參見從2.0的Xtext,它擴展了語言的XBase域模型例子:

grammar org.eclipse.xtext.example.domainmodel.Domainmodel with org.eclipse.xtext.xbase.Xbase 

每個語法元素可通過新的語法取代;可以添加新的驗證等。請參閱以下博客文章以獲取更多建議:http://koehnlein.blogspot.com/2011/07/extending-xbase.html

您可以使用相同的方法:創建基本語言,然後將它們擴展爲您的各種方言。

+0

謝謝你的鏈接,但它似乎不符合我的要求...如果我正確地理解它,它是一種用新元素擴展語法(和/或替換現有的語法)的方法。相反,我有一個定義文檔結構的通用語法,我想對元素施加額外的語義約束。 作爲一個類比,考慮通用XML(文檔由netsted元素組成,包含在角度支撐中)和特定的XML模式(它限制元素的名稱和順序)。 – Matteo

+0

在這種情況下,您可以執行類似的操作:創建擴展語法,從父級複製基本規則,然後編寫額外的驗證檢查。您的需求可能有點矯枉過正,但它應該起作用。 –

+0

即使它看起來很醜,我認爲這是唯一的方法... – Matteo

相關問題