0

我对导入全局范围的工作方式感到非常迷茫。我正在为结构良好的语言编写带有 xtext 的解析器,我不能依赖工作空间或项目概念。在我的语言中,我包含可以具有另一个文件的相对或绝对路径的语句。我需要能够引用在这个其他文件中定义的对象。我尝试使用 importURI 但它不起作用。我所尝试的只是添加这条规则:

Include:
    'INCLUDE' '='  importURI=STRING ';'
;

并在这些部分更改了 MWE2 文件:

   // scoping and exporting API
                 fragment = scoping.ImportURIScopingFragment {}
                // fragment = exporting.SimpleNamesFragment {}

                // scoping and exporting API
                fragment = scoping.ImportNamespacesScopingFragment {}
                fragment = exporting.QualifiedNamesFragment {}

但这对我的编辑器没有任何影响。我仍然可以在没有包含语句的情况下引用每个具有相同扩展名的文件中定义的对象,并且我仍然不能包含项目之外的文件。

4

2 回答 2

0

您必须删除 ImportNamespacesScopingFragment。它将您的语言配置为使用基于名称的范围而不是基于文件的范围。

您可能还想深入了解 IContainer.Manager,它默认配置了基于 Eclipse 工作区和项目概念的实现。

于 2013-06-11T08:19:53.767 回答
0

解决方案是从工作流程中删除这两个。

 // provides the necessary bindings for java types integration
 // fragment = types.TypesGeneratorFragment {}

 // generates the required bindings only if the grammar inherits from Xbase
 //fragment = xbase.XbaseGeneratorFragment {}
于 2013-06-17T21:51:09.583 回答