[antlr-interest] NPE from org.antlr.runtime.Parser.getMissingSymbol(..) when trying to parse
Sumanto Biswas
sumanto at gmail.com
Wed Jul 9 15:54:30 PDT 2008
Hi,
I used the SimpleCalc.g grammar from
http://www.antlr.org/wiki/display/ANTLR3/Five+minute+introduction+to+ANTLR+3
and used antlr3.1b1 with Java and was trying it with various inputs. I
gave input "asd", and got a NPE. The stack trace along with other
output is pasted below.
Just for reference, I have also pasted grammar below.
Should the parser ever give NPE?
Regards,
Sumanto
------------------------------------------------------------
line 1:0 no viable alternative at character 'a'
line 1:1 no viable alternative at character 's'
line 1:2 no viable alternative at character 'd'
Exception in thread "main" java.lang.NullPointerException
at org.antlr.runtime.Parser.getMissingSymbol(Parser.java:69)
at org.antlr.runtime.BaseRecognizer.recoverFromMismatchedToken(BaseRecognizer.java:624)
at org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:117)
at SimpleCalcParser.factor(SimpleCalcParser.java:189)
at SimpleCalcParser.term(SimpleCalcParser.java:125)
at SimpleCalcParser.expr(SimpleCalcParser.java:60)
at Tester.main(Tester.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
------------------------------------------------------------
Grammar pasted below:
------------------------------------------------------------
grammar SimpleCalc;
tokens {
PLUS = '+' ;
MINUS = '-' ;
MULT = '*' ;
DIV = '/' ;
}
/*------------------------------------------------------------------
* PARSER RULES
*------------------------------------------------------------------*/
expr : term ( ( PLUS | MINUS ) term )* ;
term : factor ( ( MULT | DIV ) factor )* ;
factor : NUMBER ;
/*------------------------------------------------------------------
* LEXER RULES
*------------------------------------------------------------------*/
NUMBER : (DIGIT)+ ;
WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { $channel = HIDDEN; } ;
fragment DIGIT : '0'..'9' ;
------------------------------------------------------------
More information about the antlr-interest
mailing list