Xtext在xtext文件中分配对象

时间:2015-04-20 09:29:52

标签: eclipse dsl xtext metamodel ecore

尝试使用元模型概念,eclipse和xtext为Mongoose和MondoDb创建元模型。

我正在尝试将我在test.mydsl文件中创建的对象分配给同一文件中的另一个对象,但我在test.mydsl文件中出错。

我正在尝试将创建的Schema(sc1)对象分配给Collection(col)对象,但当前收到错误

错误消息

  

功能'验证'的   ' {paket.impl.NCollectionImpl@67d76e14平台:/resource/test/classes/test.mydsl#// @ collections.0}'   包含一个未解析的代理   ' {paket.impl.SchemaImpl@361d8284平台:/resource/test/classes/test.mydsl# | 0}'

我对Schema和Collection的语法

Schema returns Schema:
    {Schema}
    ('Schema' '<' Name=EString) '>'
    '{'
        (schemaExpression+=Expression ( "," schemaExpression+=Expression)*)?
        (verificationDocumentElement+=VerDocElement ( "," verificationDocumentElement+=VerDocElement)*)?
    '}';

NCollection returns NCollection:
    {NCollection}
    ('Collection' '<' Name=EString) ',' (validate=[Schema|EString])? '>'
    '{'
        (document+=Document ( "," document+=Document)*)?
    '}';

my test.mydsl

Database<db1>{

    Schema<sc1>{
        var ja=lp   
        ime:{
            type:String,
            min:123.0
        }

    }
    Collection<col, sc1> 
    {

    }
}

我尝试了所有,但没有成功。

任何想法该怎么办?

谢谢

编辑:

也许我不够清楚。主要问题是&#34;验证&#34; NCollection规则中的属性。 当我创建我的Schema对象(test.mydsl中的sc1),然后尝试将它作为&#34; sc1&#34;传递给Collection(col.in test.mydsl)时,&#34;验证&#34;属性不能像字符串一样接受它,我不知道如何像Schema对象一样传递它。 我希望这个解释有所帮助。

2 个答案:

答案 0 :(得分:0)

请尝试使用name=EString代替Name=EString,因为Xtext会为属性name强制使用特殊的默认语义。另外,我建议查看文档。

答案 1 :(得分:0)

代码

validate=[Schema|EString]

说:我想通过字符串引用模式引用,即"sc1"而不是名称。 Xtext不知道如何将字符串转换为引用。请改用:

validate=[Schema]

的缩写
validate=[Schema|ID]

这将使用Schema的名称作为参考。请注意,您必须写

('Schema' '<' name=EString) '>'

即。小写name使其有效。 Xtext对名为name的属性进行了特殊处理。