首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xtext,Xbase:推断问题

Xtext,Xbase:推断问题
EN

Stack Overflow用户
提问于 2013-01-02 09:28:31
回答 1查看 246关注 0票数 0

我将为我的dsl编写一个更详细的文章,我有一些问题我无法用文档的帮助来解决。

第一个:我需要从一个特性创建静态void ():如何使用.toMethod()添加静态

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

代码语言:javascript
复制
Sequence:
    'SEQ' name=ID '{'
        statements+=Statement*
    '}'
;

其中声明:

代码语言:javascript
复制
Statement:
    Sequence | others...
;

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

例如:

代码语言:javascript
复制
SEQ first {
   instructions...
   SEQ second {
      other instructions....
   }
   instructions...
}

必须产生:

代码语言:javascript
复制
void first(){
   instructions(translated)...
   second();
   instructions(translated)...
}
void second(){
   other instructions(translated)...
}

有可能意识到这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2013-11-29 07:19:13

第一个问题:

代码语言:javascript
复制
ctx.toMethod('main', ctx.newTypeRef(Void.Type)) [
  static = true
  ….
]

第二个问题:

这意味着“指令”指的是'XExpression‘的实例,您需要稍微欺骗一下,因为目前不可能在推理过程中组合新的表达式。基本上,你能做的是使你的序列成为XExpression的一个子类型。然后,在JvmModelInference期间,您需要遍历表达式树(语句)并为序列创建方法。您需要覆盖XbaseTypeComputer和XbaseCompiler,并为表达式添加类型计算和编译策略。后者将是对在推理期间创建的方法的调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14119566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档