次の機能を備えた、xtext を使用した信じられないほど単純な DSL を作成したいと考えています。
- Number と String の 2 つのプリミティブ型があります。
- ユーザーは、フィールド宣言で構成される独自のクラスを定義できます
- フィールド宣言は名前を型に関連付けます。型はクラスまたはプリミティブにすることができます
以下は、DSL での私の試みです。クラス定義と参照は正常に機能しますが、プリミティブ型を使用する方法がわかりません。'String' および 'Number' リテラルが機能していません:
Model:
(classes+=Class)*
(fields+=Field)*;
FieldType: Class | 'String' | 'Number';
Field:
type=[FieldType] name=ID ";";
Class:
"class" name=ID
"{"
(fields+=Field)*
"}";
上記の DSL に対して有効であると思われる例を次に示します。
Class SomeClass {
}
// This works!
SomeClass reference;
// This does not, doesn't recognise the "String" literal
String string;
今後は割り当てをサポートすることに注意してください。したがって、私の DSL は、数値/文字列リテラルの概念を組み込む必要があります。Number someNumber = 123;