2012-02-23 6 views
0

Все, что я знаю, это то, что она прекращает действие antlr, извиняясь. Вот файл журнала:Загадочная ошибка ANTLR

(10): internal error: /Bridge/bridge.g : java.lang.IllegalStateException: java.lang.NullPointerException 
org.deved.antlride.runtime.AntlrErrorListener$DynamicToken.invokeMethod(AntlrErrorListener.java:59) 
org.deved.antlride.runtime.AntlrErrorListener$DynamicToken.getLine(AntlrErrorListener.java:64) 
org.deved.antlride.runtime.AntlrErrorListener.report(AntlrErrorListener.java:131) 
org.deved.antlride.runtime.AntlrErrorListener.message(AntlrErrorListener.java:115) 
org.deved.antlride.runtime.AntlrErrorListener.warning(AntlrErrorListener.java:99) 
org.antlr.tool.ErrorManager.grammarWarning(ErrorManager.java:742) 
org.antlr.tool.ErrorManager.grammarWarning(ErrorManager.java:757) org.antlr.tool.Grammar.parseAndBuildAST(Grammar.java:655) 
org.antlr.Tool.getRootGrammar(Tool.java:626) org.antlr.Tool.process(Tool.java:459) 
org.deved.antlride.runtime.Tool2.main(Tool2.java:24) 
+1

Вероятно, не ANTLR, но ANTLRIDE. Попробуйте вместо этого генерировать лексер и/или парсер с org.antlr.Tool. Из командной строки выполните: 'java -cp antlr-3.4-complete.jar org.antlr.Tool bridge.g' –

ответ

0

У меня была такая же проблема вчера. Не уверен, что мой случай идентичен вашему, но стоит попробовать. У меня был правило под названием аннотации, как это:

annotation 
    : AT class declaration? 
     -> ^(ANNOTATION class declaration?) 
    ; 

И я хотел бы разобрать вложенные аннотации в фигурных скобках, так что я сделал:

subAnnotation: 
    : CURLY_START annotation CURLY_END 
     -> ^(ANNOTATION annotation) 
    ; 

Это дала мне то же ошибку твоя. Итак, я в конечном итоге интересно, что это не работает. Даже если я не уверен, я думаю, что проблема заключается в рекурсии правила аннотации, вызывающего ошибку. Итак, я закончил это:

annotationValue: 
    : CURLY_START subAnnotation CURLY_END 
     -> ^(ANNOTATION subAnnotation) 
    ; 

subAnnotation 
    : AT class declaration? 
     -> ^(ANNOTATION class declaration?) 
    ; 

Это решило мою проблему. Как я уже сказал, я не знаю, можно ли применить это исправление к вашей проблеме. Более того, я думал, что ANTLR смог справиться с не левым рекурсивным правилом. Может быть, кто-то, кто лучше знает инструмент, может это подтвердить.

Должен признаться, я не пробовал предлагать @BartKiers, возможно, это также решит проблему.

С уважением,
Matt

4

Я получил ту же ошибку с простой грамматикой для логических формул. Для меня проблема заключалась в том, что ANTLR не мог найти очевидное правило запуска, потому что у меня была рекурсия по моему правилу запуска. Добавление нового правила, указывающего на рекурсивный, выполнило задание (см. http://thesoftwarelife.blogspot.com/2008/07/antlr-frustrations.html).

Жаль, что ANTLR IDE неправильно перенаправляет сообщение об ошибке. В командной строке я получаю:

предупреждение (138): Formula.g: 0: 1: грамматика формула: нет правила пуска (нет правила, очевидно, может сопровождаться EOF)

+0

аккуратный трюк с помощью CLI, чтобы проверить, не получите ли вы такую ​​же ошибку. Благодаря! – Donbhupi

Смежные вопросы