我对导入全局作用域的工作原理非常迷惑。我正在为一种结构良好的语言编写一个使用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 {}但这在我的编辑器中没有任何效果。我仍然可以引用在每个具有相同扩展名的文件中定义的对象,而不需要使用include语句,并且我仍然不能包含项目之外的文件。
发布于 2013-06-18 05:51:10
解决方案是将这两个从工作流中删除。
// 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-11 16:19:54
您必须删除ImportNamespacesScopingFragment。它将语言配置为使用基于名称的作用域,而不是基于文件的作用域。
您可能还想深入研究IContainer.Manager,默认情况下,它使用基于Eclipse工作区和项目概念的实现进行配置。
https://stackoverflow.com/questions/17034734
复制相似问题