Я хотел бы создать невероятно простой DSL с использованием xtext со следующими функциями:
- Он будет иметь два примитивных типа: Number и String.
- Пользователи могут определять свои собственные классы, состоящие из объявлений полей.
- Объявление поля связывает имя с типом, где тип может быть классом или примитивом.
Ниже приведена моя попытка 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;