2016-10-15 90 views
0

我有两个语法和两个文件一个b(使用语法分别为A和)。文件a指定变量名称,b指定文件名称aXTEXT范围代码生成依赖于不同的文件

b使用该文件一个希望:代码生成的b我要包括的文件的内容时在一个

  • 定义

    • 参考变量创建生成为a

    这怎么可以在xtext中完成?

    更新1

    实施例语法

    Model: 
        ref_model=RefModel 
        ref_vars+=[Vars]+ 
    ; 
    
    RefModel: 
        'reference' 'file' name=ID 
    ; 
    

    RefModel限定该文件一个可以位于和Vars一个限定。

  • +1

    如何引用文件名?相对/绝对/相对项目.....?你可以例如给出它的文件名称(iqualifiednameprovider)的模型根,并从b ref = [RootOfA | TerminalOrDataTypeRuleThatCanParseTheName]例如ref = [RootOfA | STRING] –

    +0

    现在的想法是将文件放在固定的目录中,给定一个文件名可以找到该文件。 |我发现'iqualifiednameprovider'的例子可以用一个模型而不是两个模型。 [RootOfA | STRING]解析时,有效数据的外观如何? – Johan

    +0

    它看起来像“xxxx.yyyy”,你可以使用FileName:ID“。” ID; (ref = [RootOfA | FileName] –

    回答

    1

    过去我们曾经使用过importURI,但是你也可以通过你自己的范围来做到这一点。

    如果例如要使用的文件的简单的名字,你应该在B中的名称A的根元素的引用

    Model: 
        ref_model=RefModel 
        ref_vars+=[Vars]+ 
    ; 
    
    RefModel: 
        'reference' 'file' name=[ModelA] 
    ; 
    

    然后,你需要索引的根元素使用资源URI的简单文件名的模型。

    +0

    ModelA定义在哪里?PS我使用importURI工作并查看http://blog.efftinge.de/2009/01/xtext-scopes-and-emf-index。 html – Johan

    +0

    但是,如果我有两个语法文件在B中可以看到两个文件的变量。怎么才能使得由importURI指定的文件的变量可见? – Johan

    +0

    工作流还包含fragment = scoping.ImportNamespacesScopingFragment2 auto-inject {} – Johan