【问题标题】:xtext generated method are wrong in the generatorxtext 生成的方法在生成器中是错误的
【发布时间】:2019-02-05 08:57:33
【问题描述】:

早上好, 我是 xtext 的新手。我为我的 dsl 编写了一个语法,在生成器中,模型中生成的一个方法给了我们错误的结果: 错误的语法是: 特点:

'Feature' name=ID '{'
    'verb' verb= [Activity]
    'objects' '('(classes+=[Class] (','classes+=[Class])*)?')'
    'common' '('(common+=[Feature] (','common+=[Feature])*)?')'     
    'optional' '('(optional+=[Feature] (','optional+=[Feature])*)?')'
    'variabilities' '(' (variabilities+=[FeatureVariability] (','variabilities+=FeatureVariability])*)?')'  
    'generalization' '('(generalization+=[Feature] (','generalization+=Feature])*)?')'      
 '}';

然后拥有具有以下特征的模型:

特征 f2{

         verb act1
         objects (C4, C3)
         common()
         optional(f32, f31)
         variabilities()    
         generalization()
        }

特征 f3{

         verb act1
         objects (C1, C2, C3)
         common()
         optional(f31, f32)
         variabilities()    
         generalization()
    } 

Feature f31{


         verb act2
         objects (C3)
         common()
         optional()
         variabilities()    
         generalization()
    }


Feature f32{
         verb act1
         objects (C1, C2, C3)
         common()
         optional()
         variabilities()    
         generalization()
    }

特征 f4{

         verb act1
         objects (C1, C2, C3)
         common()
         optional(f32, f31)
         variabilities()    
         generalization()
    }

特征 f1{

         verb act1
         objects (C1, C4)
         common(f2)
         optional(f31)
         variabilities()          
         generalization()}    

当我显示功能名称时,common 的大小 common's contains ,可选

size 可选大小,可选包含,我有以下结果:

特征名:f2,共同大小:2个共同特征f32,f31

特征名称:f2,可选大小:2 可选特征f32,f31

特征名称:f3,共同大小:2共同特征f31,f32

特征名称:f3,可选大小:2 可选特征f31,f32

特征名称:f31,共同大小:0共同特征

功能名称:f31,可选功能的大小:0 可选功能

特征名称:f32,共同大小:0共同特征

功能名称:f32,可选功能的大小:0 可选功能

特征名:f4,共同大小:2个共同特征f32,f31

特征名称:f4,可选大小:2 可选特征f32,f31

特征名称:f1,共同大小:2共同特征f2,f31

特征名称:f1,可选大小:2 可选特征f2,f31

但是当我使用 Junit 进行测试时,一切正常。 感谢您的帮助

【问题讨论】:

  • 能否请您说明您在生成器中所做的工作以及如何完成单元测试以及实际错误是什么
  • 实际的错误是,在生成器中,当我得到特征的“common”字段时,大小并不总是应该的。例如在帖子中,对于功能 f1 common 是 (f2) 所以,大小是 1 但是当我显示 f1.common.size() 它显示 2 并且当我显示功能时我有 f2 和 f31 而不是 f2
  • Junit 测试是为了确保该功能的所有字段都包含预期的内容
  • 在生成器中,我使用字段中的每个特性(通用、可选、泛化)来推断语言的另一个概念。如果在为特定的“f1”三个概念生成一个对应于 f2 和两个对应于 f31 时发现错误。然后我想到了显示这些字段的包含。我发现“common”有 f2 和 f31 作为功能,而“optional”有 f31
  • 很抱歉,无法真正重现这一点。没有变化。顺便说一句:做 m2m 的常用方法不是在生成器中完成,而是在 iderivedstatecomputer 中完成

标签: eclipse xtext emf xtend


【解决方案1】:

确保如果您在验证器和生成器中使用功能列表,您不会意外地进行模型到模型转换,例如

feature.common + feature.optional

【讨论】:

    猜你喜欢
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多