以下是带有交叉引用的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
。我能做些什么来按照我描述的方式进行这项工作?