[antlr-interest] finally stumbled on a solution but i still dont grok it !

Ymo ymo.mail at gmail.com
Fri Aug 29 09:19:12 PDT 2008


If anyone can comment on this i would really appreciate. Matt i am hoping
you missed this !

On Wed, Aug 27, 2008 at 12:25 AM, Ymo <ymo.mail at gmail.com> wrote:

> Hi All.
>
> I was trying to match block of delimited text. the  token CODE was always
> taking precedence and matching all tokens that came before it for no obvious
> reason. Right now when i put  parenthesis and the options (i even tried
> passing k .. it seems no bearing what k i choose) around the LG_BLOCK rule
> then evrything seems to work fine. Any ideas why ?
>
> Thanks Matt for all your help !
>
> input:
> <%a>
> <@b>
> <ccc:d>
> <aaaaaaaaa:bbbbbbbbbbbbbbb>
> <%-comment-%>
>
> grammar:
>
> all     :    ( t1 | t2 | t3 | code | text)* ;
> t1      :    T1 RG;
> t2    :    T2 RG;
> t3    :    T3 RG;
> code    :    CODE;
> text    :    TEXT;
>
> //LEXER
> LG : '<';
> RG : '>';
>
> LG_BLOCK:
>     ( options {k=2;} : // <-- why do i need this ?? and why does k=1 still
> works ?
>         (LG '%-') => COMMENT { $type=COMMENT;} |
>         (LG 'ccc:d') => T3 { $type=T3;} |
>         (LG '%a') => T1 { $type=T1;} |
>         (LG '@b') => T2 { $type=T2;} |
>         //uncommenting the below line makes lexes '<%a' as CODE !!!
>         //it basically overrides evrything for no reason !
>         (LG ) => CODE { $type=CODE;} |
>         ( TEXT {$type=TEXT;})
>     );
>
> fragment T1 : LG '%a';
> fragment T2 : LG '@b';
> fragment T3 : LG 'ccc:d';
>
> fragment TEXT: ( ~(LG|RG) )+;
>
> fragment
> CODE :
>    LG (options {k=2;greedy=false;} : . )+  RG{
>    };
>
> fragment COMMENT :
>    LG '%-' ( options {k=3;greedy=false;} : . )* '-%' RG {
>       $channel=HIDDEN;
>    };
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20080829/325bb366/attachment.html 


More information about the antlr-interest mailing list