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.pitc...@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-boun...@antlr.org [mailto:antlr-interest- >>>>> boun...@antlr.org] On Behalf Of Gary Miller >>>>> Sent: Wednesday, July 20, 2011 3:44 PM >>>>> To: antlr-interest@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<lgcray...@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.pitc...@oracle.com> >>>>>>> To: antlr-interest@antlr.org >>>>>>> Cc: Terence Parr<pa...@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 -- You received this message because you are subscribed to the Google Groups "il-antlr-interest" group. To post to this group, send email to il-antlr-inter...@googlegroups.com. To unsubscribe from this group, send email to il-antlr-interest+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=en.