2

我的 DSL 中有一个原型:

prototype function SaySomething(String Words);
prototype function SayHelloLanguage(String Language, String Words);

我想验证当您调用其中一个函数原型时

SaySomething("Hello World!");
SayHelloLanguage("French", "Bonjour World!");

您包含正确数量和类型的参数。

Prototype:
   'prototype function' name=ID '('parameters+=Parameter (',' parameters+=Parameter)* ')'
Function:
    name=[Prototype] '('parameters+=Parameter (',' parameters+=Parameter)* ')'
                        ^^^^^ how do I cross reference/validate this part                       

我想出了足够的交叉引用和范围,以便它会自动完成函数名称,但我看不出如何在语法中定义正确的参数计数或类型限制。

我需要实现验证器吗?或者这是我可以在语法中定义的东西?

4

1 回答 1

4

我终于想通了。

在 DSLJavaValidator.java 中添加一个检查:

@check
public void checkParameterCount(Function function){
    Prototype p = (Prototype) function.eCrossReferences().get(0);
    if(function.getParameters.size() != p.getParameters.size()){
       error("Bad Parameter Count", DSLPackage.Literals.FUNCTION__NAME);
    }
}

当您在编辑器中键入时,所有带有 @check 注释的函数都会被调用。

于 2013-03-20T00:40:57.560 回答