Я пытаюсь написать новую грамматику, и я написал что-то вроде Enum в Java, что позволяет Var (тип в моей грамматике) быть набором предопределенных констант.Перекрестная ссылка Xtext на константы Enum
Я хочу, чтобы он распознавал константы, которые относятся к этому Var, но я не нашел способа сделать это (хотя я пытаюсь прочитать книгу «Реализация доменных языков с помощью Xtext и Xtend» и искал много в Интернете)
Так что я сделал маленький пример по грамматике Domainmodel:
Domainmodel:
(elements+=AbstractElement)*;
PackageDeclaration:
'package' name=QualifiedName '{'
(elements+=AbstractElement)*
'}';
AbstractElement:
PackageDeclaration | Type | Import;
QualifiedName:
ID ('.' ID)*;
Import:
'import' importedNamespace=QualifiedNameWithWildcard;
QualifiedNameWithWildcard:
QualifiedName '.*'?;
Type:
DataType | Entity | Var;
DataType:
'datatype' name=ID;
Entity:
'entity' name=ID ('extends' superType=[Entity|QualifiedName])? '{'
(features+=Feature)*
'}';
Feature:
(many?='many')? name=ID ':' type=[VarDecl |QualifiedName];
Var:
kind='Var' var=VarDecl;
VarDecl:
type=VarType name=SimpleVarID;
SimpleVarID:
ID ('[' INT ']')*;
VarType:
name='boolean'
| '{' const+=TypeConstant (',' const+=TypeConstant)* '}';
TypeConstant:
ID | INT | 'FALSE' | 'TRUE';
Итак, пример:
Var {LEFT,RIGHT} move
entity C {
content: move
side: LEFT //ERROR: couldn't resolve reference to VarDecl 'LEFT'
}
Я знаю, что LEF T не является VarDecl, это идентификатор, но я не знаю, как это сделать. Что мне нужно сделать, чтобы LEFT распознавался как нечто, что можно было бы переместить?
комментарий: в моей реальной грамматике я действительно пытаюсь сделать move == LEFT (логический оператор), и он не распознает LEFT как константу перемещения (появляется такая же ошибка).
Спасибо!
Спасибо большое !, Это сработало! – RoG