[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