2010-12-03 2 views
1

Работа над игровым проектом, который включает язык сценариев, который я хочу интерпретировать в код виртуальной машины, который может быть выполнен непосредственно. Я включил грамматику ниже. Все правила lexer отображаются правильно в диаграмме синтаксиса, но когда я нажимаю на тела любого из правил парсера, я получаю «Не могу отобразить правило« X », потому что состояние начала не найдено» для данного правила синтаксического анализатора X.Ошибки грамматики AntlrWorks и языка

Я не совсем уверен, почему ANTLR жалуется, что у него нет начального состояния. Грамматика должна начинаться с кодировки, на которую не ссылается ни одно другое правило парсера. Кроме того, поле в правом верхнем углу экрана зеленое, что указывает на отсутствие синтаксических ошибок.

Я прочесал некоторые из других сообщений на доске сообщений, а также многие из грамматик, содержащихся в загрузке грамматики образца ANTLRv3, но ни один из них не имеет специального кода, который указывает ANTLR, что одним из правил парсера является начало. Я чувствую, что что-то простое сломано, но я в тупике относительно того, что именно это.

Любые советы или помощь были бы высоко оценены! Даже если это просто так: «Пойдите, прочитайте это».

grammar RobotWarsGrammar; 



EQUAL 
options { 
    paraphrase = "="; 
} 
    : '=' 
    ; 
+0

любая помощь? Я все еще не могу понять. – 2010-12-03 13:49:11

ответ

2

Предполагая, что вы используете ANTLR 3.x.

Все, что:

options { 
    paraphrase = ...; 
} 

материал (AFAIK) синтаксис старый ANTLR 2 - попробуйте удалить его.

Кроме того, что ! в вашем comment правило:

comment 
    : !(DIGIT | LETTER | SPACE)* 
    ; 

является дерево-переписывание-оператор (see the cheat sheet). Но это работает только тогда, когда у вас есть:

options { 
    output=AST; 
} 

в вашей грамматике (которой вы не являетесь). Итак, удалите это ! из вашего правила comment. Если вы не хотите соответствовать буквальному !, в этом случае вам нужно обернуть одинарные кавычки вокруг него:

comment 
    : '!' (DIGIT | LETTER | SPACE)* 
    ; 
Смежные вопросы