[antlr-interest] Q: move from v2 to v3 parser grammar. Rewrite tree rule

Ruslan Zasukhin ruslan_zasukhin at valentina-db.com
Tue Mar 22 11:11:54 PDT 2011


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]




More information about the antlr-interest mailing list