[antlr-interest] greedy options on parser rule or look ahead sematics predicate

向秦贤 fyaoxy at gmail.com
Mon Aug 27 23:01:17 PDT 2007


Hi,
If this case just alike that this link stated
http://www.antlr.org/wiki/display/ANTLR3/Action+execution+during+backtracking

name:a,b,c,   \  ___ I want this 2 lines greedy make a combination.
a,b,c,            /        because 3rd line match a pair rule.
a,b,c:value;
But a,b,c self is a stringArray.

Any idea?


在 07-8-28,向秦贤<fyaoxy at gmail.com> 写道:
> oops, soooorry again, this test grammar should be this,
> grammar OnGreedy;
> options{output=AST; ASTLabelType=CommonTree;}
> tokens{ARRAY;STRING;STR;}
> pairs   :       pair (';'LINE? pair)* (';' | LINE)?;
> pair    :       stringArray ':' stringArray;
> stringArray:string (options{greedy=false;}:(',' LINE? string)*) (','
> |LINE)?->^(ARRAY string+);
>
> string: words->^(STR[$text]);
>
> words: WORD+;
> WORD:(~(' '| '\t'|',' |';' | ':' | '\r' | '\n'))+;
> WS      :       (' ' | '\t')+ {$channel=HIDDEN;};
> LINE    :       ('\r'?'\n')+
> //      {$channel=HIDDEN;}
>         ;
>
> Sooooorry:)
> Questions is questions:)
>
> 2007/8/28, 向秦贤 <fyaoxy at gmail.com>:
> > So Sooooorry, this grammar should be this,
> >
> > grammar OnGreedy;
> > options{output=AST; ASTLabelType=CommonTree;}
> > tokens{ARRAY;STRING;STR;}
> > pairs   :       pair (';' pair)* (';' | LINE);
> > pair    :       stringArray ':' stringArray;
> > stringArray:string (options{greedy=false;}:(',' LINE? string)*) (','
> > |LINE)?->^(ARRAY string+);
> >
> > string: words->^(STR[$text]);
> > words: WORD+;
> > WORD:(~(' '| '\t'|',' |';' | ':' | '\r' | '\n'))+;
> > WS      :       (' ' | '\t')+ {$channel=HIDDEN;};
> > LINE    :       ('\r'?'\n')+
> > //      {$channel=HIDDEN;}
> >         ;
> >
> > Questions is yet that questions:)
> > I mistake at extracting it from full grammar.
> > Thanks
> >
> > 2007/8/28, 向秦贤 <fyaoxy at gmail.com>:
> > > Hi,
> > > I have a grammar with conflict semantics, I cannot handle this right.
> > > here is grammar.
> > >
> > > grammar OnGreedy;
> > > options{output=AST; ASTLabelType=CommonTree;}
> > > tokens{ARRAY;STRING;STR;}
> > > pairs   :       pair (':' pair)* (';' | LINE);
> > > pair    :       stringArray ':' stringArray;
> > > stringArray:string (options{greedy=false;}:',' LINE? string)* ','
> > > LINE?->^(ARRAY string+);
> > >
> > > string: words->^(STR[$text]);
> > > words: WORD+;
> > > WORD:(~(' '| '\t'|',' |';' | ':' | '\r' | '\n'))+;
> > > WS      :       (' ' | '\t')+ {$channel=HIDDEN;};
> > > LINE    :       ('\r'?'\n')+
> > > //      {$channel=HIDDEN;}
> > >         ;
> > >
> > > Supported input:
> > > name:a,b,c,
> > > a,b,c,
> > > a,b,c:value;
> > >
> > > As you see, I hope this parsed result is :
> > > name:a,b,c,a,b,c;
> > > a,b,c:value;
> > > Yes, I hope pair rule's value part (stringArray) greedy, and make
> > > closest rule match next to a new pair.
> > >
> > > My questions are:
> > > 1, I hope greedy options can work fine like in lexer. seems I cannot
> > > get right result.
> > > 2, I wanna use semantics predicate like some syntactics predicate rewrite rule,
> > > (stringArray !pair)=>stringArray
> > > 3, maybe in code do this work, but there need handle newline, and
> > > match follow rule, I not sure if it is acceptable or effective.
> > >
> > > There are some good ways to handle this case?
> > > Thanks
> > >
> > > --
> > > 致敬
> > > 向秦贤
> > >
> >
> >
> > --
> > 致敬
> > 向秦贤
> >
>
>
> --
> 致敬
> 向秦贤
>


-- 
致敬
向秦贤


More information about the antlr-interest mailing list