2012-07-05 4 views
0

JvmModelInferrer 방식을 사용하여 입력 파일에서 클래스를 생성하는 간단한 작은 DSL을 구현했습니다. 나는 일반 자바 프로젝트의 코드 내에서 파서와 코드 제너레이터를 어떻게 호출 할 수 있는지 알아 내려고한다. 그래서 내 비 -Xtext 프로젝트의 메인 클래스의 어느 시점에서 파일을 만들어서 DSL 용 Xtext 파서/codeGenerator로 전달하면 결과는 클래스 파일이 원하는 폴더에 생성됩니다 (내 자바 프로젝트 내에서). 이 사례는 문서에서 다루지 않으므로 도움이 될 것입니다. 고마워요!Java 프로젝트에서 Xtext 파서/JvmModelInferrer를 호출하는 방법

UPDATE : 내 코드는 지금까지 다음과 같습니다

private static IGenerator generator; 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 

     // this line registers the EMF for our DSL 
     Injector injector = new HyRuleStandaloneSetup().createInjectorAndDoEMFRegistration(); 
     ResourceSet rs = new ResourceSetImpl(); 
     File file = new File(
       "C:/Documents and Settings/chmamat2/runtime-EclipseXtext/hyrule.project/src/hyrule/project/main.hrule"); 
     Resource resource = rs.getResource(URI.createURI(file.toURI().toString()), true); 

     //setup the generator 
     generator = injector.getInstance(IGenerator.class); 

     //setup the file system access 
     final EclipseResourceFileSystemAccess2 fsa = new EclipseResourceFileSystemAccess2(); 


     generator.doGenerate(resource, fsa); 

답변

2

을 기본적으로, 당신은 EMF 모델로 DSL을 열 수 있습니다 : 당신은 EMF ResourceSet 만든 다음에 의해 (파일을 열려면 ResourceSet API를 사용 파일을 나타내는 파일 또는 플랫폼 URI를 작성)을 작성하고 그 내용을 엽니 다.

그러나 Xbase를 사용하지 않는 경우에만 작동합니다. Xbase를 사용하는 경우 Xtext API가 제공하는 Guice 인젝터를 사용하여 ResourceSet을 인스턴스화해야합니다. ResourceSet이 초기화되면 이전과 같은 방식으로 작동합니다.

인젝터를 사용하려면 StandaloneSetup 클래스를 사용하여 인스턴스화하십시오. - Eclipse IDE에서 자신의 편집기와 함께 코드를 사용하거나 Xtext 기반 Eclipse 확장을 등록하려는 경우 실행 공장. 예를 들어, 내 Xtext Reflective Tree editor project에 등록 된 편집기를 참조하십시오.

  1. 당신은 Xtext 프로젝트 자연과 이클립스 프로젝트를 사용할 수 있습니다

    또한 몇 가지 가능성을 가지고, 코드 생성기를 호출합니다. 설치가 완료되면 DSL 파일을 작성/수정하면 빌더가 마술처럼 이전에 언급 한 모든 것을 완료합니다. 더 이상 할 일이 없습니다.

  2. 주입 된 클래스를 사용하는 경우 코드에 IGenerator를 삽입 할 수 있으므로 원래 EMF 기반 Xtext 모델을 연 후에 프로그래밍 방식으로 호출 할 수 있습니다.
+0

감사합니다, 나는 IGenerator 주입 및 doGenerate (Resource input, IFileSystemAccess fsa) 메서드를 프로그래밍 방식으로 호출하는 두 번째 접근 방식을 작업하고 있지만 IFileSystemAccess 인스턴스를 만들거나 수없는 것 같습니다. 인젝터 ... 어떤 아이디어? –

+0

지금까지 내 코드를 표시하도록 질문을 업데이트했습니다. 모두 예외를 던지고있는 fsa를 만드는 것과는 별개의 것으로 보인다. –

+0

코드 생성기에서 작동 할 루트 폴더를 제공하는 방식으로 파일 시스템 액세스의 수동 설정이 필요합니다. 그러나 Eclipse 외부에서 작업하는 경우 EclipseResource 기반 클래스 대신 JavaIOFileSystemAccess 클래스를 사용하고 싶습니다. –