2013-02-06 1 views
4

현재 프로젝트에서 xlsd 편집기를 사용하여 내 dsl 사양 (예 : voc.mydsl, arch.mydsl 및 network.mydsl)을 작성하고 있습니다. 나는 코드 완성과 다른 기능 때문에 xText 편집기를 좋아한다.Xtext 및 Java 프로그램으로 자동화 제공

그러나 별도의 Java 프로그램이 있습니다. 이 자바 프로그램은 텍스트 파일 (즉, voc.txt, arch.txt, network.txt)을 입력으로 사용하여 ANTLR 파서를 사용하여 이러한 파일을 구문 분석하고 StringTemplate 파일을 사용하여 코드를 생성합니다. 이
(1) 내가 XText 편집기 (voc.mydsl, arch.mydsl 및 network.mydsl)에서 DSL 사양을 쓰기 :

지금, 내 문제는 현재 내가 수동으로 다음 단계를 수행해야한다는 것입니다.
(2)이 사양을 3 개의 텍스트 파일 (즉, voc.txt, arch.txt, network.txt)에 복사하여 붙여 넣습니다.
(3) 마지막으로 이러한 .txt 파일을 구문 분석하고 코드를 생성하는 Java 프로그램을 실행합니다.

위의 세 단계를 자동화 (한 번의 클릭으로 수행) 할 수있는 방법이 있습니까? 세부 사항이 필요한 경우 알려주십시오.

답변

3

DSL 용 "특수"생성기를 작성할 수 있습니다. XText는 * .mydsl 파일을 편집하고 저장할 때마다이 생성기를 호출합니다. 이 "Generator"에서 실제로하는 일은 Xtext에는 관심이 없습니다. 그래서 MydslGenerator.xtend 발전기는 다음과 같이 수 :

// whereever Xtext generates your empty version of this file 
package mydsl.xtext.generator 

// add imports 

@Singleton 
class MydslGenerator implements IGenerator { 

    override void doGenerate(Resource resource, IFileSystemAccess fsa) { 

     // calculate new filename 
     val newFilename= resource.URI.lastSegment.replaceAll(".mydsl", ".txt") 

     // get text representation of parsed model 
     val textContent = resource.contents.map[NodeModelUtils::getNode(it).text].join 

     // write text content to new file 
     fsa.generateFile(newFilename, textContent); 

     // TODO: call ANTLR parser on new file here 
    } 
} 

을 이클립스에서 직접 main 메소드를 호출하거나 새 JVM을 호출하여 하나 귀하의 "기타"프로그램을 호출 할 수있는 마지막 단계에서. 나중에 * .mydsl 파일을 저장할 때마다 호출되므로 다른 생성기가 빠르게 작동하는 경우에만 나중에 사용하는 것이 좋습니다. 첫 번째 방법은 다른 프로그램에 메모리 누수가없고 많은 jar 종속성이없는 경우에만 권장됩니다.

+0

THanks A.H. 답변. 그러나 나는 명확한 생각을 얻지 못하고있다. 예를 들어 답을 상세하게 설명하고 상세한 대답을 제공해 주시겠습니까? – Pankesh