我需要构建一个包含交叉引用的语法,这可能是无效的,即指向一个不存在的目标。包含此类引用的文件不应产生错误,而只会产生警告。生成器会将此作为特殊情况处理。
我如何使用 XText 做到这一点?
最佳答案
无法在 EMF 中创建对不存在目标的有效交叉引用。
我建议使用 EAttributes 而不是 EReferences:
- 在 {YourDSL} 语法中将 feature=[EClass|ID] 更改为 feature=ID。
- 提供范围计算实用程序,就像在 {YourDSL}ScopeProvider 类的 *scope_EClass_feature(context, reference)* 方法中所做的那样。由于此范围方法仅使用给定引用的 eType,因此重新实现应该很简单。
- 在 {YourDSL}ProposalProvider 中使用此范围计算实用程序来为引入的 EAttribute 建议值。
- 您可以选择在验证规则中使用此实用程序,以在 EAttribute 不“有效”时向其添加警告/信息。
- 最后使用生成器中的实用程序根据有效的目标 eObject 创建输出。
关于reference - XText:允许无效的交叉引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13634242/