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.pitc...@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.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 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.