[antlr-interest] Unicode conversion in getCharValueFromGrammarCharLiteral is applying to all six-char-long literals.

Peter Boughton boughtonp at gmail.com
Sat Jan 21 14:35:19 PST 2012


Unicode conversion in getCharValueFromGrammarCharLiteral is applying
to all six-char-long literals (eight including the quotes), instead of
limiting itself to those that begin with \u

Which means it breaks when I have a rule containing:
	~'elseif'
or:
	( 'elseif' | 'switch' )
or:
	~( 'elseif' | 'switch' )

(It works for just 'elseif' on its own.)


Here's the error it produces:

 Exception in thread "main" java.lang.NumberFormatException: For input
string: "seif"
 	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
 	at java.lang.Integer.parseInt(Integer.java:449)
 	at org.antlr.v4.misc.CharSupport.getCharValueFromGrammarCharLiteral(CharSupport.java:120)
 	at org.antlr.v4.automata.LexerATNFactory.set(LexerATNFactory.java:123)
 	at org.antlr.v4.parse.ATNBuilder.blockSet(ATNBuilder.java:1129)
 	at org.antlr.v4.parse.ATNBuilder.element(ATNBuilder.java:721)
 	at org.antlr.v4.parse.ATNBuilder.alternative(ATNBuilder.java:473)
 	at org.antlr.v4.parse.ATNBuilder.block(ATNBuilder.java:288)
 	at org.antlr.v4.parse.ATNBuilder.subrule(ATNBuilder.java:1025)
 	at org.antlr.v4.parse.ATNBuilder.element(ATNBuilder.java:657)
 	at org.antlr.v4.parse.ATNBuilder.alternative(ATNBuilder.java:473)
 	at org.antlr.v4.parse.ATNBuilder.block(ATNBuilder.java:288)
 	at org.antlr.v4.automata.ParserATNFactory._createATN(ParserATNFactory.java:123)
 	at org.antlr.v4.automata.LexerATNFactory.createATN(LexerATNFactory.java:71)
 	at org.antlr.v4.Tool.processNonCombinedGrammar(Tool.java:303)
 	at org.antlr.v4.Tool.process(Tool.java:284)
 	at org.antlr.v4.Tool.processGrammarsOnCommandLine(Tool.java:248)
 	at org.antlr.v4.Tool.main(Tool.java:146)
 Java Result: 1


I think I can work around this by using '\elseif' since \e just gets
treated as e, right?


More information about the antlr-interest mailing list