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

Terence Parr parrt at cs.usfca.edu
Sun Jan 22 10:03:57 PST 2012


fixed. goes out with next push
Ter
On Jan 21, 2012, at 2:35 PM, Peter Boughton wrote:

> 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?
> 
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address



More information about the antlr-interest mailing list