【发布时间】:2016-05-30 11:46:43
【问题描述】:
有一些这样的语言。
language sample.linking.SampleLang;
generate SampleLang "http://sample/linking/samplelang/v1"
Model:
entity_node = Entity
;
Entity:
type = ('blabla1' | 'blabla2') ':' name = ID (annotation = Annotation)? '{'
(parts += EntityPart)*
'}'
;
Annotation:
'deprecated' ( '->' name = ID )?
;
//SomeOtherRools
EntityPart:
'createNewEntity' '(' entity=STRING ')'
;
我有多个文件,必须检查一下
name1.ext
blabla2:name1
{
...
}
name2.ext
blabla2:name2 deprecated -> name1
{
...
}
name3.ext
blabla1:name3
{
createNewEntity("name2") - show warning about deprecation
createNewEntity("name1")
}
需要检查的是实体,我尝试从其他已弃用的实体“创建”它。不能通过交叉引用来完成,因为我必须通过字符串指定名称。这种情况如何编写检查器?
@Check
def checkDeprecation(EntityPart entityPart) {
/*???*/
}
【问题讨论】:
-
您能提供更多提示吗?搜索范围是什么?同一个文件 - 所有文件?搜索条件是什么?为什么 STRING 会阻止您进行交叉引用 (christiandietrich.wordpress.com/2015/03/19/…)
-
添加一些编辑以发布...我尝试更改规则 EntityPart: 'createNewEntity' '(' entity=STRING ')';到 EntityPart: 'createNewEntity' '(' entity=[Entity|STRING] ')';它总是显示“无法解析对实体的引用”(也尝试将实体规则更改为使用 name = STRING 具有相同的结果)
-
请分享完整的语法和示例模型
-
(附言我无法通过简单地改变语法来重现它)