我想使用 xtext 创建一个非常简单的 DSL,具有以下功能:
- 它将有两种原始类型:数字和字符串
- 用户可以定义自己的类,由字段声明组成
- 字段声明将名称与类型相关联,其中类型可以是类或基元
以下是我对 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;