Как я могу решить эту ошибку, когда я пишу модель на основе предыдущей метамодели с использованием 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]
"}";
...
Все метаклассы, которые вы видите там (Фон, Персонаж, Враг и т. Д.) У меня не было проблем с созданием метамодели в ecore, но когда я пытаюсь определить конкретную модель, подобную этой (используя Ctrl+Space):
Screen name: s1
Level: "easy"
End: 1000
Я получаю сообщение об ошибке: несоответствующий INPUT, ожидающий RULE_ID, и я не могу продолжать писать с помощью Ctrl + Пробел. Есть идеи, почему это не работает? Спасибо.
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]
"}";
Тем не менее, я ожидаю, что вы на самом деле хотели использовать перекрестную ссылку вместо содержимого фона на данном экране. Таким образом, вы должны предоставить либо полную грамматику, либо определить фон, прежде чем использовать ее на экране.