[antlr-interest] Deciphering the TreeWalker error message ...

Gary Miller gary at sumwise.com
Wed Jul 20 23:48:13 PDT 2011


Hey Vasan,

Couple of things.

1. My name is Gary not Grey ;-)

2. I'm not really an ANTLR guru.

3.
rule :
 ^(subrule otherrule)
;
Just looks wrong.
If you inline (expand) out what you have written you would get
compoundExpression
: ^((SUB_EXPR ^(PAREN_SCLAR_EXPRESSION sclarExpression+) conversion_clause )
;
The ^(( is impossible
Make all you start tree look like ^(TOKEN ...)
^(sign sse=sclarSubExpression) therefore also look wrong.

4. I've never tried Jim DOTTreeGenerator but can see how it could be useful.
If you try it out let me know what you think
http://www.antlr.org/pipermail/antlr-interest/2009-March/033417.html

5. A pretty version of you AST toStringTree might help you.
See below. You never see a (( as far as I know.

Regards
Gary

(DML_STATEMENT
    (select
        (SELECT_LIST
            (SELECT_ITEM
                (COMPOUND_EXPR
                    (SUB_EXPR
                        (PAREN_SCLAR_EXPRESSION
                            (COMPOUND_EXPR
                                (SUB_EXPR 1)
                            )
                        )
                    )
                )
            )
        )
        (from
            (TABLE_LIST_ITEM
                (TABLE_OR_VIEW_NAME table1)
            )
        )
        (where
            (CONDITION_LIST
                (between
                    (COMPOUND_EXPR
                        (SUB_EXPR 2)
                    )
                    (and
                        (COMPOUND_EXPR
                            (SUB_EXPR 3)
                        )
                        (COMPOUND_EXPR
                            (SUB_EXPR 4)
                        )
                    )
                )
            )
        )
    )
)



On Thu, Jul 21, 2011 at 4:03 PM, srinivasan karthikeyan pitchai
<srinivasan.karthikeyan.pitchai at oracle.com> wrote:
>
> Hey Grey,
> Yes you are absolutely right, the first element is a rule reference.
>
> My sclarSubExpression snippet is as follows:-
>
> sclarSubExpression
>     :
>      ^(SUB_EXPR ^(sign sse=sclarSubExpression))
>     | ^(SUB_EXPR expressionWithParen)
>     | ^(SUB_EXPR function)
>     | ^(SUB_EXPR object_name)
>     | ^(SUB_EXPR constant)
>     | ^(SUB_EXPR coalesce_exp)
>     | ^(SUB_EXPR nullif_exp)
>     | ^(SUB_EXPR case_expression)
>     ;
>
> expressionWithParen
>
>     :
>     ^(PAREN_SCLAR_EXPRESSION sclarExpression+)
>     ;
>
> The toStringTree AST is also provided below:
>
> Works:-
> ----------
>
> DML_STATEMENT DOWN select DOWN SELECT_LIST DOWN SELECT_ITEM DOWN
> COMPOUND_EXPR DOWN SUB_EXPR DOWN PAREN_SCLAR_EXPRESSION DOWN
> COMPOUND_EXPR DOWN SUB_EXPR DOWN 1 UP UP UP UP UP UP UP from DOWN
> TABLE_LIST_ITEM DOWN TABLE_OR_VIEW_NAME DOWN table1 UP UP UP where DOWN
> CONDITION_LIST DOWN between DOWN COMPOUND_EXPR DOWN SUB_EXPR DOWN 2 UP
> UP and DOWN COMPOUND_EXPR DOWN SUB_EXPR DOWN 3 UP UP COMPOUND_EXPR DOWN
> SUB_EXPR DOWN 4 UP UP UP UP UP UP UP UP
>
> Parser AST Tree : (DML_STATEMENT (select (SELECT_LIST (SELECT_ITEM
> (COMPOUND_EXPR (SUB_EXPR (PAREN_SCLAR_EXPRESSION (COMPOUND_EXPR
> (SUB_EXPR 1))))))) (from (TABLE_LIST_ITEM (TABLE_OR_VIEW_NAME table1)))
> (where (CONDITION_LIST (between (COMPOUND_EXPR (SUB_EXPR 2)) (and
> (COMPOUND_EXPR (SUB_EXPR 3)) (COMPOUND_EXPR (SUB_EXPR 4))))))))
>
>
> Fails:
> -------
> DML_STATEMENT DOWN select DOWN SELECT_LIST DOWN SELECT_ITEM DOWN
> COMPOUND_EXPR DOWN SUB_EXPR DOWN PAREN_SCLAR_EXPRESSION DOWN
> COMPOUND_EXPR DOWN SUB_EXPR DOWN 1 UP UP UP UP UP UP UP from DOWN
> TABLE_LIST_ITEM DOWN TABLE_OR_VIEW_NAME DOWN table1 UP UP UP where DOWN
> CONDITION_LIST DOWN between DOWN COMPOUND_EXPR DOWN SUB_EXPR DOWN 2 UP
> UP and DOWN COMPOUND_EXPR DOWN SUB_EXPR DOWN 3 UP UP COMPOUND_EXPR DOWN
> SUB_EXPR DOWN 4 UP UP UP UP UP UP UP UP
>
> Parser AST Tree : (DML_STATEMENT (select (SELECT_LIST (SELECT_ITEM
> (COMPOUND_EXPR (SUB_EXPR (PAREN_SCLAR_EXPRESSION (COMPOUND_EXPR
> (SUB_EXPR 1))))))) (from (TABLE_LIST_ITEM (TABLE_OR_VIEW_NAME table1)))
> (where (CONDITION_LIST (between (COMPOUND_EXPR (SUB_EXPR 2)) (and
> (COMPOUND_EXPR (SUB_EXPR 3)) (COMPOUND_EXPR (SUB_EXPR 4))))))))
>
> Thanks for spending your valuable time looking into this issue.
>
> Regards,
> Vasan
>
> On 7/21/2011 11:23 AM, Gary Miller wrote:
> > Hey Vasan,
> >
> > Without seeing the reset of the tree walker grammar and the toStringTree of
> > the AST I'm really just guessing.
> >
> > The rule looks a bit odd to me.
> > All my tree walker rules look more like
> >
> > compoundExpression
> > :
> >       ^(SOMETOKEN  conversion_clause)
> >      | sclarSubExpression
> > ;
> >
> > I guess you can have rules as the first element of a tree, its just not
> > something that turns up in my tree grammars.
> >
> > Regards
> > Gary
> >
> > On Thu, Jul 21, 2011 at 3:29 PM, srinivasan karthikeyan pitchai<
> > srinivasan.karthikeyan.pitchai at oracle.com>  wrote:
> >
> >> Hi Folks,
> >> I forgot to mention.  The compoundExpression rule has options{backtrack
> >> = true;}  set that is it reads like
> >>
> >> compoundExpression
> >> options {backtrack = true;}
> >> :
> >>       ^(sclarSubExpression  conversion_clause)
> >>      | sclarSubExpression
> >> ;
> >>
> >> Thanks,
> >> Vasan
> >>
> >>
> >>
> >> On 7/21/2011 10:56 AM, srinivasan karthikeyan pitchai wrote:
> >>> Jim, Gray, Loring,
> >>> Thanks for pitching in to give me some direction to focus on.
> >>>
> >>> ANTLR Gurus,
> >>>
> >>> I've solved the issue.  Still I am unable to reason out my fix.
> >>>
> >>> I am providing the offending grammar snippet below and would appreciate
> >>> your rationale to get an insight into the problem and how the fix works!!
> >>>
> >>> The below rule fails with the "
> >>>
> >>> no viable alt; token=[@-1,0:0='DOWN'" error message
> >>>
> >>> compoundExpression:
> >>>        ^(sclarSubExpression  conversion_clause)
> >>>       | sclarSubExpression
> >>> ;
> >>>
> >>> However when I change the rule like the following, i.e make the
> >>> conversion_clause optional  and then remove the second alternative every
> >>> thing works fine!!  In my mind both the rules are semantically identical.
> >>>
> >>> compoundExpression:
> >>>        ^(sclarSubExpression  conversion_clause?)
> >>> ;
> >>>
> >>> Thanks a ton.
> >>>
> >>> -Vasan
> >>>
> >>> On 7/21/2011 4:16 AM, Jim Idle wrote:
> >>>> Or use the dot description producing methods and create a nice graphic
> >>>> with graphviz. Much easier to see that way.
> >>>>
> >>>> Jim
> >>>>
> >>>>> -----Original Message-----
> >>>>> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> >>>>> bounces at antlr.org] On Behalf Of Gary Miller
> >>>>> Sent: Wednesday, July 20, 2011 3:44 PM
> >>>>> To: antlr-interest at antlr.org
> >>>>> Subject: Re: [antlr-interest] Deciphering the TreeWalker error message
> >>>>> ...
> >>>>>
> >>>>> I often find it usefully to print out the AST (toStringTree in Java)
> >>>>> and walk through the tree grammar manually.
> >>>>>
> >>>>> Regards
> >>>>> Gary
> >>>>>
> >>>>> On Thu, Jul 21, 2011 at 3:15 AM, Loring Craymer<lgcraymer at yahoo.com>
> >>>>> wrote:
> >>>>>
> >>>>>> "UP" and "DOWN" tokens (start/end of child list for tree) do not have
> >>>>>> location information attached so no line/column error reporting.
> >>>>>> Mostly the error says that you started a subtree that your grammar
> >>>>>> does not match, probably an LPAREN or RPAREN rooted subtree from your
> >>>>>> report of cases where you do or do not get the error.
> >>>>>>
> >>>>>> --Loring
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>> ________________________________
> >>>>>>> From: srinivasan karthikeyan pitchai<
> >>>>>> srinivasan.karthikeyan.pitchai at oracle.com>
> >>>>>>> To: antlr-interest at antlr.org
> >>>>>>> Cc: Terence Parr<parrt at cs.usfca.edu>
> >>>>>>> Sent: Wednesday, July 20, 2011 9:46 AM
> >>>>>>> Subject: [antlr-interest] Deciphering  the TreeWalker error message
> >>>>> ...
> >>>>>>> Hi Folks,
> >>>>>>> What does the ANTLR walker error message like the following mean?
> >>>>>>>
> >>>>>>> no viable alt; token=[@-1,0:0='DOWN'
> >>>>>>>
> >>>>>>>
> >>>>>>> Would appreciate any general guidance/suggestions to zero in on the
> >>>>>>> errors of this nature.
> >>>>>>>
> >>>>>>> Thanks,
> >>>>>>> Vasan
> >>>>>>>
> >>>>>>>
> >>>>>>> Input sql:
> >>>>>>> -----------
> >>>>>>>
> >>>>>>> select (1) from table1
> >>>>>>> where 2 between 3 and 4;
> >>>>>>>
> >>>>>>>
> >>>>>>> Error Message:
> >>>>>>> --------------------
> >>>>>>>
> >>>>>>> TDWalker1.g: node from after line 2:8 [start1, startStatement, dml,
> >>>>>>> query_term, query_expression, query, query_unit, where_clause,
> >>>>>>> condition_list, condition_subexpression, condition] Walker1: no
> >>>>>>> viable alt; token=[@-1,0:0='DOWN',<2>,0:-1] (decision=127 state 0)
> >>>>>>> decision=<<590:1: condition options {backtrack=true; } : ( ^(
> >>>>>>> comparison_operator ( condition_quantifier )? c1= condition c2=
> >>>>>>> condition ) | ^( BETWEEN expression ^( and_or_operator c1= condition
> >>>>>>> c2= condition ) ) | ^( condition_operator expression c1= condition
> >>>>> ^(
> >>>>>>> ESCAPE escape_character ) ) | ^( condition_operator expression c1=
> >>>>>>> condition )
> >>>>>>> | ^( condition_operator expression_list c1= condition ) | ^( NOT c1=
> >>>>>>> condition ) | ^( EXISTS expression ) | ^( IS_NOT_NULL expression ) |
> >>>>>>> ^( IS_NULL expression ) | ^( IS_NOT expression UNTIL_CHANGED ) | ^(
> >>>>>>> IS expression UNTIL_CHANGED ) | ^( IS_NOT expression UNTIL_CLOSED )
> >>>>> |
> >>>>>>> ^( IS expression UNTIL_CLOSED ) | expression | condition_list );>>
> >>>>>> context=......
> >>>>>>> However the following SQL, that just doesn't have the parenthesis
> >>>>>>> around 1,  works fine!!!
> >>>>>>>
> >>>>>>> select (1) from table1
> >>>>>>> where 2 between 3 and 4;
> >>>>>>>
> >>>>>>>
> >>>>>>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> >>>>>>> Unsubscribe:
> >>>>>> http://www.antlr.org/mailman/options/antlr-interest/your-email-
> >>>>> address
> >>>>>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> >>>>>> Unsubscribe:
> >>>>>> http://www.antlr.org/mailman/options/antlr-interest/your-email-
> >>>>> address
> >>>>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> >>>>> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-
> >>>>> email-address
> >>>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> >>>> Unsubscribe:
> >> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
> >>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> >>> Unsubscribe:
> >> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
> >>
> >> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> >> Unsubscribe:
> >> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
> >>
> > List: http://www.antlr.org/mailman/listinfo/antlr-interest
> > Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>
> 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