如何在RUTA中选择并设置覆盖/被覆盖注释作为特征
类型不匹配报错解决
该报错的原因是规则隐式类型推断和类型系统定义的特征范围不一致:MyItem的LanguageParent特征在类型系统中定义的取值范围是Dependency类型,但直接写MyItem.LanguageParent = d时,RUTA默认将MyItem识别为当前创建的MyItem实例类型,和特征要求的Dependency类型不匹配。
调整规则写法,给创建的MyItem实例绑定显式变量即可解决:
d:dep.Dependency -> { mi:MyItem{ mi.Display = "Ignore", mi.Lemma = d.Dependent.lemma.value, mi.LanguageParent = d }; };
获取与Governor位置重合的自定义注释
要拿到和dep.Governor位置完全重合的MyItem实例,可以在Dependency匹配的规则块内,先通过位置条件匹配到对应的MyItem再绑定变量复用,示例写法如下:
d:dep.Dependency -> { // 匹配和Governor位置完全重合的MyItem实例,绑定为变量govItem govItem:MyItem{@identical(govItem, d.Governor)}; // 创建当前从属词对应的MyItem,直接复用上面绑定的govItem curItem:MyItem{ curItem.Display = "displayedValue", curItem.Lemma = d.Dependent.lemma.value, curItem.Parent = govItem }; };
如果你的MyItem注释范围大于Governor的Token范围,可以把@identical替换为COVERS(govItem, d.Governor),匹配覆盖了Governor位置的MyItem实例即可。
注意要保证该规则执行前,所有Governor位置对应的MyItem注释已经创建完成,否则会匹配不到govItem变量。
内容的提问来源于stack exchange,提问作者RodP
相关产品推荐
相关产品推荐

