[antlr-interest] why <if(y==2 )> in Stringtemplate does not work?

Terence Parr parrt at cs.usfca.edu
Sun Mar 8 15:36:01 PDT 2009


remove if from predicate. it's an expression.
ter
On Mar 8, 2009, at 3:27 PM, YINGAnnie wrote:

>
> But there's some errors as the red color shows:
>
> additiveExpression
>
>     :   ^(ADDITIVE_EXPRESSION multiplicativeExpression+)              
> (106): reference to undefined rule: multiplicativeExpression
>     ;
>
>
> multiplicativeExpression
>
>     :^(DIV unaryExpression+)          (106): reference to undefined  
> rule: unaryExpression
>     |^(MOD unaryExpression+)         (106): reference to undefined  
> rule: unaryExpression
>     |^(STAR u1=unaryExpression u2=unaryExpression)  - 
> >{if($u2.text==2)}? assgin(x={$u1.text},y={$u2.text},z={"<<"})
>     ;                                               (100): syntax  
> error: antlr: expecting REWRITE, found ';'
>
> unaryExpression
>     : ^(UNARY_EXPRESSION unaryOp? postfixExpression)      (100):  
> syntax error: antlr: expecting SEMI, found ')'
>     ;
>
> If I delete  ->{if($u2.text==2)}?  
> assgin(x={$u1.text},y={$u2.text},z={"<<"}) , all the errors are  
> gone. I am not sure what is the problem.
>
> Thanks.
>
> Ann
>
>
>
>
>
>
>
>
> > CC: antlr-interest at antlr.org
> > From: parrt at cs.usfca.edu
> > To: yimm8369 at hotmail.com
> > Subject: Re: [antlr-interest] why <if(y==2 )> in Stringtemplate  
> does not work?
> > Date: Fri, 6 Mar 2009 15:56:11 -0800
> >
> >
> > On Mar 6, 2009, at 3:46 PM, YingAnnie wrote:
> >
> > >
> > > So, what I expect is that when the code is "a=b*c", and c==2, then
> > > change * to /.
> > >
> > > multiplicativeExpression
> > > :^(STAR u1=unaryExpression u2=unaryExpression) ->
> > > assgin(x={$u1.text},y={$u2.text},z={"/"})
> > > ;
> > >
> > > group T;
> > > assgin(x,y,z)::= <<
> > > <if(y==2)><x><z><y><else><"error"><endif>
> > >
> > > If I can not test the value of attributes within ST,Then it has to
> > > be done in the tree grammar. can I do something like this:
> > >
> > > multiplicativeExpression
> > > :^(STAR u1=unaryExpression u2='2') ->
> > > assgin(x={$u1.text},y={$u2.text},z={"/"})
> > > ;
> >
> > Almost. you need predicated -> alternatives
> >
> > -> {..}? template one
> > -> {...}? template two
> > -> else template
> >
> > T
>
> 把MSN装进手机,更多聊天乐趣等你挖掘! 立刻下载!
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address



More information about the antlr-interest mailing list