0

私は xText プロジェクトでこのメタモデルを書きました:

Screen:
"Screen name: " name = ID
    "Level: " level = STRING
    "End: " end = INT
    background = [Background]
    character = [Character]
    (enemies+=Enemy)*
    (elements+=Element)*

Background:
"Background{
    Id: " id = ID
    "Image: " image = [Image]
"}";
...

そこに表示されるすべてのメタクラス (背景、キャラクター、敵など) ecore でメタモデルを作成する際に問題はありませんでしたが、特定のモデルを次のように定義しようとすると (Ctrl+Space を使用):

Screen name: s1
Level: "easy"
End: 1000

エラーが表示されます: INPUT が RULE_IDを予期していて、Ctrl+Space で書き続けることができません。これが機能しない理由はありますか?ありがとうございました。

4

1 に答える 1

0

文法スニペットの問題は、相互参照と包含参照の誤解です。サンプルファイルのどこかに背景を定義していませんが、文法は背景への参照を想定しています。定義をこれらの線に沿ったものに変更すると、機能します。

Screen:
"Screen name: " name = ID
    "Level: " level = STRING
    "End: " end = INT
    background = Background
    character = Character
    (enemies+=Enemy)*
    (elements+=Element)*

Background:
"Background{
    Id: " id = ID
    "Image: " image = [Image]
"}";

ただし、実際には、特定の画面に含まれている背景ではなく、相互参照を使用したいと考えています。したがって、画面で使用する前に、完全な文法を提供するか、背景を定義する必要があります。

于 2012-11-25T19:04:46.163 に答える