2012-12-05 2 views
0

내가 플러그인으로 내 DSL이 내가 xtext 작동하지 일반적으로

그래서 난이 코드를 작성하려고 내 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);

그리고 난 내가 몇 가지 단계 누락하지만 난이 xtext 과정에 아주 익숙하지 않아요 확신 nodeModelBuilder

init을하는 방법을 모르겠어요. 덕분에 !

답변

0

이미 Eclipse 포럼에서 다음 답변을 읽었습니다. IParser 인스턴스를 삽입하여 만들어야합니다. 모든 종속성도 주입됩니다. 필요한 바인딩은 JsonRuntimeModule에 설명되어 있습니다. Xtext는 Guice와 Theses Modules을 사용하여 모든 것을 연결합니다. 이 패턴을 Dependency Injection이라고합니다.


... 난

그래서 독립형 모드에서 JSON의 DSL을 사용하려면 내 DSL을 이용하여 새 응용 프로그램을 만들려고합니다.

나의 제안 :

  • 읽기 및 입력 파일을 구문 분석 CLI와 최소 이클립스 IApplication을 만듭니다. Eclipse IApplication의 장점은 헤드리스 버전의 DSL 런타임을 쉽게 배포 할 수 있다는 것입니다. [1]
  • 독립 실행 형 모드에서 DSL 및 Xtext 런타임을 사용하는 방법에 대한 예제는 Xtext의 JUnit 지원에서 JsonInjectorProvider 및 ParseHelper [2]를 살펴보십시오.

[1] http://www.eclipsezone.com/eclipse/forums/t99762.html [2] org.eclipse.xtext.junit.util.ParseHelper

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); 

가 'JsonParser'또는 'JSON'또는 무엇이든 DSL 이름으로 MyDsl를 교체합니다. DSL 소스 코드에서 JsonStandaloneSetup 또는 JsonParserStandaloneSetup 클래스를 찾으십시오. 이 클래스는 Xtext 프로젝트를 시작할 때 (또는 처음으로 워크 플로를 실행할 때, 지금은 확실하지 않은 경우) 생성됩니다. Model을 루트 요소 유형으로 바꿉니다. EObject 하위 클래스 여야합니다.

구문 분석/유효성 검사/생성 AST는 resource.getContents() 명령으로 수행됩니다. 매우 직관적이지는 않습니다. 이것은 컨텍스트, 모든 종류의 컨텍스트, 사실 Guice 컨텍스트, EMF 컨텍스트 및 기타 등을 모두 StandaloneSetup (및 RuntimeModule)에 캡슐화해야하기 때문입니다. 컨텍스트는 Spring Application Context와 유사합니다.