【问题标题】:Xtext, Xbase: infer questionsXtext,Xbase:推断问题
【发布时间】:2013-11-29 15:19:13
【问题描述】:

我要为我的 dsl 编写一个推断器,但我有一些仅靠文档帮助无法解决的问题。

第一个: 我需要从一个特性创建 static void main():如何添加 static.toMethod()

第二个: 假设我的 dsl 中有这样的规则:

Sequence:
    'SEQ' name=ID '{'
        statements+=Statement*
    '}'
;

Where 语句:

Statement:
    Sequence | others...
;

Sequence 必须映射到 void 方法,并且该方法的主体由 语句 的翻译组成。 但问题是这样的:当在一个序列中我会找到另一个序列时,我必须为新序列创建一个方法并在超级序列中添加一个调用。

例如:

SEQ first {
   instructions...
   SEQ second {
      other instructions....
   }
   instructions...
}

必须生成:

void first(){
   instructions(translated)...
   second();
   instructions(translated)...
}
void second(){
   other instructions(translated)...
}

有可能实现吗?

【问题讨论】:

  • 我不确定这两个问题是否相关。如果不是,你最好分开提问

标签: code-generation xtext xbase


【解决方案1】:

第一个问题:

ctx.toMethod('main', ctx.newTypeRef(Void.Type)) [
  static = true
  ….
]

第二个问题:

暗示“指令”是指“XExpression”的实例,您需要花点功夫,因为目前无法在推理过程中编写新的表达式。 您可以做的基本上是使您的序列成为 XExpression 的子类型。然后在 JvmModelInference 期间,您需要遍历表达式树(语句)并为序列创建方法。您需要覆盖 XbaseTypeComputer 以及 XbaseCompiler 并为您的表达式添加类型计算和编译策略。后者将调用推理期间创建的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    相关资源
    最近更新 更多