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

srinivasan karthikeyan pitchai srinivasan.karthikeyan.pitchai at oracle.com
Wed Jul 20 22:57:33 PDT 2011


Hi Gurus,
Input:

select (1) from table1
where 2 between 3 and 4;


For what ever it is worth, even the "equivalent" rewrite of the rule 
continues to fail!!

compoundExpression
options {backtrack = true;}

:
     ^(sclarSubExpression  conversion_clause
     | ^(sclarSubExpression blank)
     ;

blank:
;

The only acceptable rule seems to be:

compoundExpression:
       ^(sclarSubExpression  conversion_clause?)
;


Any insight into the nature of the issue and why it works using the 
second rule definition, while it fails with the first rule definition 
would be great.

Many Thanks,
Vasan

On 7/21/2011 10:59 AM, srinivasan karthikeyan pitchai 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


More information about the antlr-interest mailing list