[antlr-interest] How to recognize unmatchable input?

Jim Idle jimi at temporal-wave.com
Tue Jan 4 11:32:35 PST 2011


I will take a look.

Jim

> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Marco Trudel
> Sent: Tuesday, January 04, 2011 6:15 AM
> To: antlr-interest at antlr.org
> Subject: Re: [antlr-interest] How to recognize unmatchable input?
>
> On a second thought, I think the Java target is doing it perfectly
> fine.
> There might be a bug in the C target.
> Is there a workaround for that? I'm actually working with the C target,
> not with the Java one.
>
> Thanks and happy new year
> Marco
>
>
> On 04.01.2011 15:06, Marco Trudel wrote:
> > Dear all
> >
> > ##### grammar #####
> >
> > grammar Demo;
> > main : ONE* ;
> > ONE  : '1' {System.out.print("(1) ");} ;
> > A    : 'a' {System.out.print("(a) ");} ;
> > WS   : ' ' {$channel=HIDDEN;} ;
> >
> > ##### code #####
> >
> > public static void main(String[] args) throws Exception {
> >      DemoLexer lexer = new DemoLexer(new ANTLRStringStream("a 1 1"));
> >      DemoParser parser = new DemoParser(new
> CommonTokenStream(lexer));
> >      parser.main();
> >      System.out.println("Lexer: " + lexer.getNumberOfSyntaxErrors());
> >      System.out.println("Parser: " +
> > parser.getNumberOfSyntaxErrors());
> > }
> >
> >
> > Working with antlr-3.3-complete.jar and
> > libantlr3c-3.3-SNAPSHOT.tar.gz, for the input "a 1 1" I get:
> > - Java target: (a), Lexer: 0, Parser: 0
> > - C target: (1) (1), Lexer: 0, Parser: 0
> >
> > Am I doing something undefined here? I'm surprised that the two
> > targets produce a different result. I would expect an error since the
> > input seems unmatchable to me.
> >
> > If I change "main" to
> > 	main : ONE* EOF ;
> > I get:
> > - Java target: (a) (1), Lexer: 0, Parser: 1
> >     ->  With the warning: line 1:0 missing EOF at 'a'
> > - C target: (1) (1), Lexer: 0, Parser: 0
> >
> >
> > Questions:
> > - How do I recognize if an input did not match my grammar?
> > - Which of the targets is doing it right? None, only one or both?
> >
> >
> > In my real project I have something very similar but with completely
> > different behavior. The Java target tells me "no viable alternative
> at
> > input" and gives me a parser error. The C target just segfaults :-/
> So
> > I'm really interested how to do that right.
> >
> >
> > Thanks
> > Marco
> >
> > List: http://www.antlr.org/mailman/listinfo/antlr-interest
> > Unsubscribe:
> > http://www.antlr.org/mailman/options/antlr-interest/your-email-
> address
>
> 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