我的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
我想出了足够的交叉引用和范围,以便它自动完成函数名称,但我没有看到如何在语法中定义正确的参数计数或类型限制。
我是否需要实施验证器?或者这是我可以在语法中定义的东西吗?
答案 0 :(得分: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注释的函数都会被调用。