2013-08-02 52 views
0

使用xtext我試圖開發一種小型語言。如何使用xbase檢查xtext中的返回類型

def sum(Integer a, Integer b):Integer { 
    return (a+b) 
} 

這是我使用這個語法:

Function: 
    'def' name=ValidID 
    '('(params+=FullJvmFormalParameter (',' params+=FullJvmFormalParameter)*)? ')' 
    ':' type=JvmTypeReference 
    body=XBlockExpression; 

至於原因,很明顯對我來說,抱怨說「void函數不能返回值」。我如何鏈接返回表達式的類型與我的函數聲明中的類型?

回答

0

您必須將表達式放入JvmOperation的上下文中。如果您想了解更多關於推斷的JVM模型的信息,請參閱領域模型示例,文檔和7種語言。

基本上,你所要做的就是沿着這些路線的東西:

def dispatch infer(MyLanguageConcept concept, IJvmDeclaredTypeAcceptor acceptor, boolean prelinking) { 
    acceptor.accept(
     concept.toClass(concept.fullyQualifiedName) 
    ).initializeLater [ 
     for (definition : concept.getDefinitions) { 
      members += definition.toMethod(
        definition.name, 
        definition.type) [ 
       for (p : definition.params) { 
        parameters += p.toParameter(p.name, p.parameterType) 
       } 
       body = definition.body 
      ] 
     } 
    ] 
} 
相關問題