/ / Xtext-Querverweis für Sprache mit Aufzählungstypen - xtext

Xtext-Querverweis für Sprache mit Aufzählungstypen - xtext

Ich habe eine einfache Sprache mit so etwas wie Aufzählungen. Wie bekomme ich eine funktionierende Lösung für EnumEntry mit Querverweisen? Es wird auch gut sein, EnumEntry nach EnumEntity zu filtern ...

MyDsl.xtext

grammar org.xtext.example.mydsl.MyDsl with
org.eclipse.xtext.common.Terminals

generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"

Model:
entity_node = Entity | EnumEntity;

Entity:
type = ("my_entity") ":" name = ID "{"
(parts += EntityPart)*
"}";

EnumEntity:
type = ("my_enum") ":" name = ID "{"
//entry = EnumEntry ("," entrys+= EnumEntry)* Fixed after Christian comment
entrys+= EnumEntry ("," entrys+= EnumEntry)*
"}";

EnumEntry:
name = ID;

EnumUsage:
/* What should I do here? */
enumEntity = [EnumEntity]"."entry = [EnumEntry];

EntityPart:
EnumUsage ";";

my_enum_entity.mydsl

my_enum:my_enum_entity
{
my_enum_entry_1,
my_enum_entry_2,
my_enum_entry_3
}

my_pretty_entity.mydsl

my_entity:my_pretty_entity
{
my_enum_entity.my_enum_entry_2;
}

Irgendein Fehler

Antworten:

1 für die Antwort № 1

Sie haben den Scopeprovider nicht angepasst oder haben den Code einfach nicht gepostet?

Ich würde so etwas erwarten

class MyDslScopeProvider extends AbstractMyDslScopeProvider {

override getScope(EObject context, EReference reference) {
if (reference == MyDslPackage.Literals.ENUM_USAGE__ENUM_ENTRY) {
if (context instanceof EnumUsage) {
return Scopes.scopeFor(context.enumEntity.entrys)
}
}
super.getScope(context, reference)
}

}

Wenn Sie Scoping nicht anpassen möchten, passen Sie die Grammatik wie folgt an

EnumUsage: entry = [EnumEntry|FQN];
FQN: ID ("." ID)*;