[antlr-interest] How to recognize unmatchable input?

Marco Trudel marco at mtsystems.ch
Tue Jan 4 06:15:14 PST 2011


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


More information about the antlr-interest mailing list