1

順序付けされていないグループを定義しましたが、期待どおりに機能します。変更したいのはエラーメッセージだけです。これは、順序付けされていないグループの要素がまだモデル化されていない場合に表示されます。これを解決する簡単な方法はありますか?すでにカスタムチェックを試しましたが、予期しない動作が発生しました。

順序付けられていないグループとエラーメッセージの私のルールに従います。

Element:
    (name=ConfigurationName) &
    (description=Description)? &
    (tool=Tool) &
    (model=Model) &
    (interfaces=Interfaces)? &
    (paramaters=Parameters)? &
    (paramfile=ParamFile)?
;

rule ruleElement failed predicate: {getUnorderedGroupHelper().canLeave(grammarAccess.getElementAccess().getUnorderedGroup())}?

このエラーメッセージを次のようなものに変更したいと思います:「構成には次の要素が必要です:....」

4

3 に答える 3

2

Xtext には SyntaxErrorMessageProvider というサービスがあり、パーサーのエラー メッセージを言い換えるために使用されます。パーサー レベルでメッセージを定義する必要がありますが (そのため、使用する EMF モデルはありません)、元のエラー メッセージとコンテキストを取得し、それをトラバースして独自のエラー メッセージを提供することは可能です。

これを登録するには、«YourLanguage»RuntimeModuleクラスを開き、次のメソッドを追加します。

public Class<? extends ISyntaxErrorMessageProvider> bindISyntaxErrorMessageProvider() {
    return «YourLanguage»SyntaxErrorMessageProvider.class;
}

whereは、カスタム関数を実装できる«YourLanguage«SyntaxErrorMessageProviderclass を拡張して、あなたが導入したクラスです。SyntaxErrorMessageProvider

于 2013-01-25T23:23:07.473 に答える
0

自動検証のカスタマイズを行い、パブリッククラスを作成しますMyDslLanguageSyntaxErrorMessageProvider extends SyntaxErrorMessageProvider {}

そして、それをMyDslRuntimeModuleに登録します。publicClass bindISyntaxErrorMessageProvider(){return MyDslLanguageSyntaxErrorMessageProvider.class;}

しかし、私の問題は、このカスタマイズにどのパッケージが使用されているかです。Javaクラスの作成にorg.xtext.example.mydsl.validationパッケージを使用しました。また、xtendクラスを使用してこのカスタマイズを行います。インターネットで十分なソースが見つかりません:(

于 2013-02-13T14:29:45.700 に答える
0

Java を使用してこのカスタム SyntaxErrorMessageProvider クラスを記述できますが、これをバインドするには、Runtime Module クラスでバインドできます。また、任意のパッケージを使用してこのクラスを宣言できますが、Runtime クラスがある同じパッケージでこのクラスを宣言することは理にかなっています

于 2014-02-21T10:18:34.317 に答える