一般情况下,我有我的dsl作为插件,我想创建一个使用我的dsl的新应用
所以我试着写这段代码:
JsonParser p = new JsonParser();
IParseResult r = p.parse(new StringReader("{}"));
//once that work it will be the file data instead of {}
但是当我进行解析时,节点模型构建器为null,并且以下行具有异常: return doParse(ruleName,in,nodeModelBuilder.get(),0);
我不知道如何初始化nodeModelBuilder
我确定我错过了一些步骤,但我对xtext过程并不熟悉。 谢谢!
答案 0 :(得分:0)
您已经在Eclipse论坛上阅读了以下答案。您需要通过注入来创建IParser实例。所有依赖项也会被注入。必需的绑定在JsonRuntimeModule中描述。 Xtext使用Guice和这些模块将所有内容粘合在一起。此模式称为依赖注入。
...我想创建一个使用我的dsl
的新应用
所以你想在独立模式下使用你的Json DSL。
我的建议:
[1] http://www.eclipsezone.com/eclipse/forums/t99762.html [2] org.eclipse.xtext.junit.util.ParseHelper
答案 1 :(得分:0)
你不应该直接调用解析器。看到: http://wiki.eclipse.org/Xtext/FAQ#How_do_I_load_my_model_in_a_standalone_Java_application.C2.A0.3F
代码应如下所示:
Injector injector = new MyDslStandaloneSetup().createInjectorAndDoEMFRegistration();
XtextResourceSet resourceSet = injector.getInstance(XtextResourceSet.class);
resourceSet.addLoadOption(XtextResource.OPTION_RESOLVE_ALL, Boolean.TRUE);
Resource resource = resourceSet.getResource(new File("/../../some.json").toURI(), true);
Model modelRootElement = (Model) resource.getContents().get(0);
将MyDsl替换为'JsonParser'或'Json'或您的DSL名称。在DSL源代码中查找类JsonStandaloneSetup或JsonParserStandaloneSetup。启动Xtext项目时(或第一次运行工作流时,现在不确定),将生成此类。将Model
替换为您的根元素类型。它必须是EObject的子类。
解析/验证/建立AST完成resource.getContents()
命令。我知道,不是很直观。这是因为你必须初始化上下文,事实上各种各样的上下文,Guice上下文,EMF上下文,以及其他所有上下文都封装在StandaloneSetup(和RuntimeModule)中。上下文类似于Spring Application Context。
答案 2 :(得分:0)
您需要使用StandaloneSetup
以独立模式运行。