Ich versuche, neue Grammatik zu schreiben, und ich schrieb etwas wie Enum in Java, das für Var (ein Typ in meiner Grammatik) eine Reihe von vordefinierten Konstanten ermöglicht.Xtext Querverweis auf Konstanten von Enum
Ich möchte es die Konstanten, die zu diesem Var gehören zu erkennen, aber ich habe keinen Weg gefunden, wie es geht (obwohl ich versuche, das Buch zu lesen "Implementieren von domänenspezifischen Sprachen mit Xtext und Xtend", und viel im Internet gesucht)
Also machte ich ein kleines Beispiel auf der Domainmodel Grammatik:
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';
So ist das Beispiel:
Var {LEFT,RIGHT} move
entity C {
content: move
side: LEFT //ERROR: couldn't resolve reference to VarDecl 'LEFT'
}
ich weiß, dass LEF T ist nicht VarDecl, es ist ID, aber ich weiß nicht, wie ich es anders machen soll. Was ich tun muss, damit LEFT wie etwas erkennen würde, das einschließt, sich zu bewegen?
Kommentar: in meiner echten Grammatik versuche ich tatsächlich zu bewegen == LEFT (boolescher Operator) und es ist nicht LEFT als Konstante der Bewegung zu erkennen (der gleiche Fehler erscheint).
Danke!
Vielen Dank !!, Es hat funktioniert! – RoG