[antlr-interest] Using ANTLR's ~ to do match literals causes "no viable alternative" messages in generated Java but not in ANTLRWorks
Ron Hunter-Duvar
ron.hunter-duvar at oracle.com
Thu Feb 25 16:54:22 PST 2010
Hi Davy,
You don't have a rule for consuming whitespace. Add something like this:
WS :
WS_CHAR+ {$channel=HIDDEN;}
;
fragment WS_CHAR :
(' '|'\r'|'\t'|'\u000C'|'\n')
;
Ron
Davy Landman wrote:
> Hello,
>
> I'm having some problems with my generated java parser/lexer, but I've
> tried to reduce the problem to a small subset.
>
> Let's assume the simple language which has identifiers and numbers.
> And the only rules are, a number contains out of only numbers, and a
> identifier can not contain `'?', ':', ' '` and can not begin with a
> number.
>
> I would create the following ANTLR specification of this language.
>
> grammar simple;
>
> prog: expr* EOF;
>
> expr
> : ID | INT;
>
>
> ID : ~('0'..'9'|SEPERATORS) ~(SEPERATORS)*;
>
> fragment
> SEPERATORS
> : ' ' | ':' | '?';
>
> INT : '0'..'9'+
> ;
>
> And running this in ANTLRWorks debugging and parsing mode, no errors
> are reported to the console.
>
> But if I than generate the Parser and Lexer and try to consume it in a
> java program as such:
>
> import org.antlr.runtime.ANTLRStringStream;
> import org.antlr.runtime.CommonTokenStream;
> import org.antlr.runtime.RecognitionException;
>
>
> public class runner {
>
> public static void main(String args[])
> {
> simpleLexer lex = new simpleLexer(new ANTLRStringStream("a33 44"));
> CommonTokenStream tokens= new CommonTokenStream(lex);
> simpleParser parser = new simpleParser(tokens);
> try {
> parser.prog();
> } catch (RecognitionException e) {
> e.printStackTrace();
> }
> }
> }
>
> The parser works, and the prog() continues succesfully. But in the
> background the following error message is printed to the console.
>
> line 1:3 no viable alternative at character ' '
>
> The same exact sequence causes no messages to the ANTLRWorks console,
> so I was wondering, am I abusing the ~ ? Or is there a difference
> between the ANTLRWorks debugger and default java runtime?
>
> So if anybody can help me how to get rid of these messages? Because in
> the original lexer and parser where this question is based, I get a
> nice looking AST but only have messages printed to the eclipse
> console.
>
> Versions used:
> ANTLRWorks 1.3.1
> ANTLR-3.2
> Linux x64
>
> Kind regards,
> Davy Landman
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>
>
--
Ron Hunter-Duvar | Software Developer V | 403-272-6580
Oracle Service Engineering
Gulf Canada Square 401 - 9th Avenue S.W., Calgary, AB, Canada T2P 3C5
All opinions expressed here are mine, and do not necessarily represent
those of my employer.
More information about the antlr-interest
mailing list