我将为我的dsl编写一个更详细的文章,我有一些问题我无法用文档的帮助来解决。
第一个:我需要从一个特性创建静态void ():如何使用.toMethod()添加静态
第二个:假设我的dsl中有这样一个规则:
Sequence:
'SEQ' name=ID '{'
statements+=Statement*
'}'
;其中声明:
Statement:
Sequence | others...
;序列必须映射到空方法,该方法的主体由语句的转换组成。但问题是:当在序列中找到另一个序列时,我必须为新序列创建一个方法,并在超级序列中添加一个调用。
例如:
SEQ first {
instructions...
SEQ second {
other instructions....
}
instructions...
}必须产生:
void first(){
instructions(translated)...
second();
instructions(translated)...
}
void second(){
other instructions(translated)...
}有可能意识到这一点吗?
发布于 2013-11-29 07:19:13
第一个问题:
ctx.toMethod('main', ctx.newTypeRef(Void.Type)) [
static = true
….
]第二个问题:
这意味着“指令”指的是'XExpression‘的实例,您需要稍微欺骗一下,因为目前不可能在推理过程中组合新的表达式。基本上,你能做的是使你的序列成为XExpression的一个子类型。然后,在JvmModelInference期间,您需要遍历表达式树(语句)并为序列创建方法。您需要覆盖XbaseTypeComputer和XbaseCompiler,并为表达式添加类型计算和编译策略。后者将是对在推理期间创建的方法的调用。
https://stackoverflow.com/questions/14119566
复制相似问题