我们如何交叉引用 Xtext 中的多个项目?
How do we cross reference to multiple items in Xtext?
我的语法如下所示:
Module: MOD mid=ModId ;
Stmt: CALL nam=ModName ';';
ModName: (idn1=[ModId|ID] | ('"' idn2=[ModId|ID] '"') | (idn3=ID idn4=ID));
基本上,我有一个提到模块名称的声明。所以当我稍后尝试调用该模块时,它应该提示我定义的模块名称(带或不带引号)并且还允许我输入一个新的变量名称(这不是模块名称)。
如何实现?我能够实现引用模块名称或定义名称,而不是两者。
示例程序:
Module add
Module subtract
Module divide
call add; //referencing module name
call "subtract"; // referencing module name in quotes
call operation; // without reference
此致,
阿妮莎
这有很多问题。
首先要用字符串引用看看https://christiandietrich.wordpress.com/2015/03/19/xtext-and-strings-as-cross-references/
要获得可选参考,您必须将语法更改为仅具有 ID 或仅具有参考。在 IDOnly 的情况下,你可以做类似
ModNameManipulator returns ModName: ref=[XXXX]
然后使用 IDerivedStateComputer 和 SyntheticLinkingSupport 来 create/populate 引用。
或者您调整链接以避免抛出错误。
这两种解决方案都不是微不足道的,可能需要更深入的 Xtext 知识
谢谢克里斯蒂安。我犯了一个愚蠢的错误,没有将 ModId 分配给名称。现在内容辅助工作正常。
现在的语法如下所示:
Module: 'MOD' mid=ModuleName;
ModuleName: name = identifier;
Var: d=DataType v=VarName;
VarName: name=identifier;
Stmt: 'Call' ((idn1=[Names|ID] 'Mod.')| (idn3=[Names|ID] idn4=ID '.'));
Names: id = ModuleName| id2 = VarName;
我对合并列表的范围进行了更改,以便能够为内容辅助提供 ModuleName 和 VarName。这很好用。
然而,一旦我输入值,它就会抛出错误提示 - "Couldn't resolve reference to Names"
我做错了什么?
我的语法如下所示:
Module: MOD mid=ModId ;
Stmt: CALL nam=ModName ';';
ModName: (idn1=[ModId|ID] | ('"' idn2=[ModId|ID] '"') | (idn3=ID idn4=ID));
基本上,我有一个提到模块名称的声明。所以当我稍后尝试调用该模块时,它应该提示我定义的模块名称(带或不带引号)并且还允许我输入一个新的变量名称(这不是模块名称)。
如何实现?我能够实现引用模块名称或定义名称,而不是两者。
示例程序:
Module add
Module subtract
Module divide
call add; //referencing module name
call "subtract"; // referencing module name in quotes
call operation; // without reference
此致,
阿妮莎
这有很多问题。
首先要用字符串引用看看https://christiandietrich.wordpress.com/2015/03/19/xtext-and-strings-as-cross-references/
要获得可选参考,您必须将语法更改为仅具有 ID 或仅具有参考。在 IDOnly 的情况下,你可以做类似
ModNameManipulator returns ModName: ref=[XXXX]
然后使用 IDerivedStateComputer 和 SyntheticLinkingSupport 来 create/populate 引用。
或者您调整链接以避免抛出错误。 这两种解决方案都不是微不足道的,可能需要更深入的 Xtext 知识
谢谢克里斯蒂安。我犯了一个愚蠢的错误,没有将 ModId 分配给名称。现在内容辅助工作正常。
现在的语法如下所示:
Module: 'MOD' mid=ModuleName;
ModuleName: name = identifier;
Var: d=DataType v=VarName;
VarName: name=identifier;
Stmt: 'Call' ((idn1=[Names|ID] 'Mod.')| (idn3=[Names|ID] idn4=ID '.'));
Names: id = ModuleName| id2 = VarName;
我对合并列表的范围进行了更改,以便能够为内容辅助提供 ModuleName 和 VarName。这很好用。
然而,一旦我输入值,它就会抛出错误提示 - "Couldn't resolve reference to Names"
我做错了什么?