Folgende zu meiner Frage: here Ich versuche, das Scoping anzupassen. Ich möchte, dass im Bereich "Prädikat" in meiner Sprache einige der Objekte im Bereich sichtbar sind, wie "typeDef".Scoping: alle Instanzen des bestimmten Typs in der aktuellen Datei erhalten xtext
Predicate:
'predicate' name=ID ('(' params=TypedParamList ')')?
(':' body=TemporalExpression TOK_SEMI)
| ('{' body=TemporalExpression '}');
TypeDef:
'type' name=ID '=' type=VarType TOK_SEMI;
Hier einige Beispiele meiner Sprache.
type
move = {left, right};
predicate stop(move m1, move m2) :
m1=left and m2=right;
Es ist nicht links und rechts erkennen (Verweis nicht auflösen kann)
ich so etwas wie dies versucht:
val allContentsCurrFile = EcoreUtil2.eAllOfType(context,TypeDef)
val allContentsCurrFile2 = EcoreUtil2.getAllContentsOfType(context,TypeDef)
Ich putted dies als Parameter der Scopes.scopeFor-Methode (zusätzlich zu den Parametern von Prädikat) und das ist nicht für mich gearbeitet. Ich weiß nicht, wie ich es machen soll, wie man alle Instanzen eines bestimmten Typs in der aktuellen Datei findet, damit der Querverweis im Prädikat-Bereich funktioniert.
Danke.
Wie sieht dein Cross Ref aus? –
sieht es so aus: Zeiger = [Referrable | QualifiedName] Dies ist die Querreferenz. Es wird von TemporalExpression abgerufen (es gibt eine Menge von Parserregeln, bis es zur Referenz kommt). Es wird in die if-Anweisung "if (reference == SpectraPackage.Literals.TEMPORAL_PRIMARY_EXPR_HELPER__POINTER)" – RoG
Und TypeDef ist ein refferable? –