如果在声明类型之前引用类型,如何在Xtext IDE中显示错误

时间:2015-09-30 14:50:41

标签: c++ xtext xtend

我们有一个基于Xtext的自定义DSL,并通过Xtend从这个DSL编写的文档中生成C ++代码。以下是DSL的一个简单示例:

component CMP
{
    type A
    {
       B member_1;
    }

    type B
    {
        string member_1;
    }
}

最终,为每个type元素生成包含C ++结构(基于component元素)的头文件。现在出现以下问题:在我的DSL中AB可以正确解析(即使B的声明时间晚于A)。但是当我们生成C ++代码并执行resource.contents.filter(TypeElement)之类的迭代遍历所有type元素时,它们的传递顺序与文档中声明的顺序相同。这会导致生成的C ++标头出现编译器错误,因为B的声明时间晚于A,并且在没有前向声明的情况下编译器无法解析。

我想要的是在这种情况下在IDE中显示错误(即,如果文档中稍后出现的type存在引用)。这种情况是否有某种标准验证器?如果没有,那么处理这个问题最恰当的方法是什么?

提前谢谢!

1 个答案:

答案 0 :(得分:2)

前向引用没有标准验证器。您需要根据交叉引用目标的值定义自己的一个。将ILocationInFileProvider注入验证器以获取引用实例的区域,并将其与引用所有者的区域进行比较。这将成为检测前向引用的技巧。