[antlr-interest] 'match not' not working
Tom
tbee at tbee.org
Tue Aug 4 05:52:40 PDT 2009
I have a pretty simply grammar to construct; it must find balanced
tokens in a stream. For example:
aaa %{ bbb }% ccc
These may be nested:
aaa %{ aaa %{ bbb }% ccc }% ccc
or not present at all:
aaa
or consequtive:
aaa %{ bbb }% ccc %{ bbb }% ccc
So all a need to do is find the tokens with non-tokens in between. This
is the grammar I expected that would do that:
/*------------------------------------------------------------------
* PARSER RULES
*------------------------------------------------------------------*/
parse: loop;
loop: noloop LOOPSTART loop LOOPEND loop
| noloop
;
noloop: (~( LOOPSTART | LOOPEND ))*
;
/*------------------------------------------------------------------
* LEXER RULES
*------------------------------------------------------------------*/
LOOPSTART: '%{';
LOOPEND: '}%';
However, the "match not" is not working.
"X" results in
line 1:0 no viable alternative at character 'X'
"%{X}%" results in
line 1:2 no viable alternative at character 'X'
If I replace the match-not part with a dummy 'X'*, then the grammar
works (or atleast the mentioned tests run through). There is very
limited documentation on the "match not", does anyone have a suggestion
for me?
Tom
NB: if this works I will introduce a third token; an %{ with an id in
between, written like: %id$
More information about the antlr-interest
mailing list