2013-01-02 2 views
0

나는 내 dsl에 대한 추론을 쓰려고하는데 나는 문서의 도움으로 만 풀 수없는 몇 가지 질문을 가지고있다.Xtext, Xbase : 추측 질문들

먼저 하나 내가 만들 필요가 정적 무효 메인() 기능에서 : 나는 .toMethod()정적을 추가하는 방법을?

두 번째 :이처럼 내 DSL의 규칙이 있다고 가정 :

Sequence: 
    'SEQ' name=ID '{' 
     statements+=Statement* 
    '}' 
; 

어디 진술 :

Statement: 
    Sequence | others... 
; 

순서가 무효 방법에 매핑 신체의해야 그 방법은 진술의 traslation에서 구성됩니다. 하지만 문제는 이것입니다 : Sequence 내부에서 다른 Sequence를 찾을 때 새로운 시퀀스를위한 메소드를 생성하고 슈퍼 시퀀스에서 호출을 추가해야합니다. 예를 들어

:

SEQ first { 
    instructions... 
    SEQ second { 
     other instructions.... 
    } 
    instructions... 
} 

생성해야합니다 :

void first(){ 
    instructions(translated)... 
    second(); 
    instructions(translated)... 
} 
void second(){ 
    other instructions(translated)... 
} 

그것을 실현 할 수 있습니까?

+1

이 두 질문이 연결되어 있는지 확실하지 않습니다. 그렇지 않은 경우 질문을 분리하는 것이 좋습니다. – rds

답변

1

첫 번째 질문 :

ctx.toMethod('main', ctx.newTypeRef(Void.Type)) [ 
    static = true 
    …. 
] 

두 번째 질문 :

가 작성하실 수 없습니다로 '지침'은 'XExpression'의 인스턴스를 의미와 함께, 당신은 약간의 트릭을해야하는 것으로 추론 중 새로운 표현. 기본적으로 coudl은 Sequence를 XExpression의 하위 유형으로 만드는 것입니다. 그런 다음 JvmModelInference가 실행되는 동안 표현식 트리 (Statement)를 살펴보고 Sequences에 대한 메소드를 작성해야한다. XbaseTypeComputer와 XbaseCompiler를 재정의하고 형식 계산을 추가하고 표현식에 대한 전략을 컴파일해야합니다. 후자는 추론 중에 작성된 메소드에 대한 호출입니다.