0
我嘗試編寫新的語法,並且我在Java中編寫了類似Enum的東西,它使Var(我的語法中的一個類型)成爲一組預定義的常量。Xtext交叉引用枚舉的常量
我希望它能夠識別包含在這個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,它是ID,但我不知道如何做到這一點。 我需要做什麼才能讓左手被識別爲包含移動的東西?
評論:在我的真實語法中,我實際上嘗試移動== LEFT(布爾運算符),它不能識別LEFT作爲移動常量(同樣的錯誤出現)。
謝謝!
非常感謝!!,它的工作! – RoG