Как я могу решить эту ошибку, когда я пишу модель на основе предыдущей метамодели с использованием xText?

Я написал эту метамодель в проекте 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]
"}";
...

Со всеми метаклассами, которые вы там видите (Фон, Персонаж, Враг и т. д.), у меня не было проблем с созданием метамодели в экоре, но когда я пытаюсь определить конкретную модель, подобную этой (используя Ctrl + Space):

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

Я получаю сообщение об ошибке: несоответствие INPUT, ожидающему RULE_ID, и я не могу продолжать запись с помощью Ctrl+Пробел. Любые идеи, почему это не работает? Спасибо.


person Barbara PM    schedule 25.11.2012    source источник


Ответы (1)


Проблема с фрагментом грамматики заключается в неправильном понимании перекрестных ссылок и ссылок на включение. Вы не определили фон где-то в файле примера, но грамматика ожидает ссылку на фон. Если вы измените определение на что-то в этом роде, оно будет работать:

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]
"}";

Однако я предполагаю, что вы на самом деле хотели использовать перекрестную ссылку вместо содержащегося фона на данном экране. Таким образом, вы должны предоставить либо полную грамматику, либо определить фон, прежде чем использовать его на экране.

person Sebastian Zarnekow    schedule 25.11.2012