[antlr-interest] Q: move from v2 to v3 parser grammar. Rewrite tree rule
Jim Idle
jimi at temporal-wave.com
Tue Mar 22 11:59:01 PDT 2011
That is telling you that err, you can't use rewrite syntax AND an operator
;). Which one is it supposed to use?
So, remove any ^ and ! operators from the rule and use rewrite rules only.
However, is that what you want to rewrite it as. I think you are using
query_expression as that was what it looked like in v2. You might be
better off abstracting in to two rules:
queryExpression
: unionExpressions -> ^(QUERY_EXPRESSION unionExpressions) ;
unionExpressions
: query_term (( "union"^ | "except"^ ) "all"? query_term)* ;
However, using lower case literals in your parser directly is not a good
idea. Use real tokens so that you error messages are better and remember
that SQL is generally case insensitive so you will need a [trivial] custom
input stream.
Jim
> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Ruslan Zasukhin
> Sent: Tuesday, March 22, 2011 11:12 AM
> To: Matt Fowles
> Cc: antlr-interest at antlr.org; Michail Kropivka
> Subject: Re: [antlr-interest] Q: move from v2 to v3 parser grammar.
> Rewrite tree rule
>
> On 3/20/11 1:11 PM, "Matt Fowles" <matt.fowles at gmail.com> wrote:
>
> Hi Matt,
>
> > Ruslan,
>
> > Try:
> >
> > query_expression
> > : query_term (( "union" | "except" )^ "all"? query_term)*
> > -> ^(QUERY_EXPRESSION $query_expression)
> > ;
>
> Well, $ not helps. Still same
> error 165 uses rewrite syntax and also an ast operator
>
> As I understand,
> -> is re-write syntax
> ^ is AST operator ...
>
>
>
> > Matt
> >
> > On Sun, Mar 20, 2011 at 10:40 AM, Ruslan Zasukhin
> > <ruslan_zasukhin at valentina-db.com> wrote:
> >> Hi All,
> >>
> >> In v2 grammar we have rule as
> >>
> >> ===========================================
> >> query_expression
> >> : query_term (( "union"^ | "except"^ ) ( "all" )? query_term)*
> >> { ## = #([QUERY_EXPRESSION,"QUERY_EXPRESSION"], ##); }
> >> ;
> >> ===========================================
> >>
> >>
> >> We try change it to v3
> >>
> >> ===========================================
> >> query_expression
> >> : query_term (( "union"^ | "except"^ ) ( "all" )? query_term)*
> >> ->(QUERY_EXPRESSION ???? )
> >> ;
> >> ===========================================
> >>
> >> Ops, we cannot specify top node, because it can be union OR except.
> >>
> >>
> >> For now the only way we have found is:
> >> ===========================================
> >> query_expression
> >> : query_expression2 ->(QUERY_EXPRESSION query_expression2)
> >> ;
> >>
> >>
> >> query_expression2
> >> : query_term (( "union"^ | "except"^ ) ( "all" )? query_term)*
> >> ;
> >> ===========================================
> >>
> >>
> >>
> >> Question is. May be exists more elegant way for v3 Without
> additional
> >> rule?
>
>
> --
> Best regards,
>
> Ruslan Zasukhin
> VP Engineering and New Technology
> Paradigma Software, Inc
>
> Valentina - Joining Worlds of Information http://www.paradigmasoft.com
>
> [I feel the need: the need for speed]
>
>
>
> 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