以下是带有交叉引用的 xtext 语法的简单表示。
有两个实体——一个容器和一个对象——以及每个实体上的操作。我希望能够通过对象自己的名称或容器名称来引用对象。我希望在任何一种情况下都可以使用交叉引用。
我的语法是:
Model:
operations+=Operation*;
ContainerEntity:
name=ID;
ObjectEntity:
(first=[ContainerEntity] '.')? name=ID
;
Operation:
CreateContainer | CreateObject | ContainerOp | ObjectOp
;
CreateContainer:
'Container' container=ContainerEntity ';'
;
CreateObject:
'Object' object=ObjectEntity ';'
;
ContainerOp:
'ContainerOp' name=[ContainerEntity] ';'
;
ObjectOp:
'ObjectOp' name=[ObjectEntity] ';'
;
编辑声明是:
Container c;
Object o;
ContainerOp c;
ObjectOp o;
ObjectOp c.o; // ERROR: Couldn't resolve reference to ObjectEntity 'c'.
请注意,它不会将“c”识别为ContainerEntity
. 我该怎么做才能按照我描述的方式进行这项工作?