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 に答える