[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