[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