XText:允许无效的交叉引用

ips*_*sec 2 grammar reference cross-reference xtext

我需要构建一个包含交叉引用的语法,它可能无效,即指向一个不存在的目标.包含此类引用的文件不应产生错误,而应仅产生警告.发电机将像特殊情况一样处理这个问题.

我怎么能用XText做到这一点?

小智 5

无法在EMF中为不存在的目标创建有效的交叉引用.

我建议使用EAttributes而不是EReferences:

  • 在{YourDSL}语法中按feature = ID更改feature = [EClass | ID].
  • 提供范围计算实用程序,就像它在{YourDSL} ScopeProvider类中的*scope_EClass_feature(context,reference)*方法中所做的那样.由于这种范围方法只使用给定引用的eType,因此重新实现应该是直截了当的.
  • {YourDSL} ProposalProvider中使用此范围计算实用程序为引入的EAttribute建议值.
  • (可选)您可以在验证规则中使用此实用程序,以便在此EAttribute不是"有效"时向其添加警告/信息.
  • 最后使用生成器中的实用程序根据有效的目标eObject创建输出.