[antlr-interest] syntax predicate strange behavior

Ilia Kantor ilia at obnovlenie.ru
Tue May 1 04:52:34 PDT 2007


>  >command_arguments:	
>  >	command_argument (SEMI command_argument)*;
>  >
>  >command_argument  :
>  >        (WS? WORD WS? MINUS GT) => WS? WORD WS? MINUS GT
>  >e=exprs_no_semi |
>  >        exprs_no_semi ;
> 
> Hmm.  Given that this one appears equivalent to this:
> 
> command_argument:
>    (WS? WORD WS? MINUS GT)? exprs_no_semi;
> 
> ... what's in exprs_no_semi?  Does it contain WORDs?  If so, that 
> could be the source of the ambiguity.

Yes, exprs_no_semi can contain WORDs, but still no idea why it gives DFA.NoViableAlt error and
works just fine in backtrack mode.. 

> 
> (Out of curiosity, is there any particular reason why you're not 
> merging 'MINUS GT' into a single 'ARROW' token or something?  Or 
> why you're treating whitespace as significant instead of simply 
> marking it as hidden and forgetting about it?)

The language I'm working on, merges commands into text, like
blabla ~DoThat{ arg1 -> myarg  } and -> gotcha.
First arrow is keyworded argument, second arrow is just plain text.

WS is important in text, but should be cut in arguments.

That's also the reason of using MINUS + GT, I let the parser to join them if needed into "arrow".
arrow: MINUS GT;

This rule was left out in my example to make stuff easier to read.





More information about the antlr-interest mailing list