3

xtext で動作する文法があり、コードの検証を開始しています。

このために、私のために作成されたバリデータ xtext にメソッドを追加しました。

もちろん、式が有効でない場合は、指定された AST ノードに警告を表示できるようにしたいと考えています。

私は明らかなことを試みました:

@Check
public void testCheck(Expression_Multiplication m){
    if(!(m.getLeft() instanceof Expression_Number)){
        warning("Multiplication should be on numbers.",m.getLeft());
    }
    if(!(m.getRight() instanceof Expression_Number)){
        warning("Multiplication should be on numbers.",m.getRight());
    }
}

Expression_Number extendsEObjectであるため、成功しませんが、 ではありませんEStructuralFeature

warning(String message, EStructuralFeature feature)

のプロトタイプは他にもたくさんありますが、 aと awarningだけを取るものはありません。またはログから抽出されたさまざまな値を使用すると、エラーが発生し、とにかく正しい場所に警告が表示されることがあります。例を検索すると、値はorという名前のクラスの statics フィールドから取得されることが多く、プロジェクトで生成されたものにはs が含まれていることがわかりましたが、どれを使用すればよいか、またはこれらのいずれかが必要な理由がわかりません.StringEobjectnulleContainingFeatureLiterals***PackageEStructuralFeature

質問は次のとおりです。

特定の AST 要素に警告を表示するにはどうすればよいですか?

4

2 に答える 2

3

EStructuralFeature は、AST のプロパティです。定数を含む EPackage クラスが生成されます。

あなたの場合、それは次のようなものだと思います:

MyDslPackage.Literals.EXPRESSION_MULTIPLICATION__LEFT

MyDslPackage.Literals.EXPRESSION_MULTIPLICATION__RIGHT
于 2013-06-11T11:41:23.440 に答える