【发布时间】:2017-01-04 15:06:08
【问题描述】:
我有一个简单的 DSL,它应该为表达式生成异步代码(这是我能想出的最简单的例子来说明我的观点)。我刚刚在scripting example 中添加了一个新的async 声明:
grammar org.xtext.scripting.Scripting with org.eclipse.xtext.xbase.Xbase
generate scripting "http://www.xtext.org/scripting/Scripting"
import "http://www.eclipse.org/xtext/xbase/Xbase" as xbase
Script returns xbase::XBlockExpression:
{Script}
(expressions+=XExpressionOrVarDeclaration ';'?)*;
XExpression returns xbase::XExpression:
super | Async
;
Async:
'async' expression=XExpression
;
这个想法是async 代码在另一个线程中执行。
我的问题是,如何使用ScriptingJvmModelInferrer 为Async.expression 生成代码?
在最简单的情况下,我会像这样包装Async.expression 中的代码?
AsyncRunner.exec(new Runnable() {
@Override
public void run() {
// the Async.expression would end up here
}
})
这样做的钩子在哪里?
【问题讨论】:
-
我想我在eclipse.org/Xtext/documentation/207_template.html(模板语言)中找到了一个示例,请参阅扩展编译器部分