[antlr-interest] Re: Parser and infinite recursion... ?
lgcraymer
lgc at mail1.jpl.nasa.gov
Tue Apr 13 23:41:46 PDT 2004
They aren't functionally equivalent; the derivation series
logic_1 -> logic_3 -> logic_4 -> logic_1
is possible in your example 2.
--Loring
--- In antlr-interest at yahoogroups.com, "jbfraleigh" <jbfraleigh at h...>
wrote:
> Hello --
>
> I was wondering if someone might be able to explain to me why code
> example 1 works (doesn't produce any error/warning messages) while
> code example 2 does not work (and hopefully how to fix it). The
> output from code example 2 follows the code. Note that the only
> difference occurs in "logic_1" where I've changed the definition
> from: "logic_2" to "logic_2 | logic_3."
>
> --- Code Example 1:
>
> logic_1 : logic_2 ;
> logic_2 : (LPAREN logic_3 RPAREN) ;
> logic_3 : logic_4 ((AND|OR) logic_4)* ;
> logic_4 : logic_1 | if_br ;
>
> ========================
>
> --- Code Example 2:
>
> logic_1 : logic_2 | logic 3;
> logic_2 : (LPAREN logic_3 RPAREN) ;
> logic_3 : logic_4 ((AND|OR) logic_4)* ;
> logic_4 : logic_1 | if_br ;
>
> ========================
>
> --- Output from Example 2:
>
> ANTLR Parser Generator Version 2.7.2 1989-2003 jGuru.com
> xx.g:14:21: infinite recursion to rule logic_3 from rule logic_1
> xx.g:17:11: infinite recursion to rule logic_3 from rule logic_4
> xx.g:16:11: infinite recursion to rule logic_3 from rule logic_3
> xx.g:14:21: infinite recursion to rule logic_3 from rule logic_1
> xx.g:14: warning:nondeterminism between alts 1 and 2 of block upon
> xx.g:14: k==1:LPAREN
> Exiting due to errors.
>
> ========================
>
> This should be functionally equivalent to the following code, which
> does work:
>
> Code Example 3:
>
> logic_1 : logic_2 ;
> logic_2 : logic_3 ((AND|OR) logic_3)* ;
> logic_3 : (LPAREN logic_1 RPAREN) | if_br ;
>
> ========================
>
> Thanks in advance for any help.
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/antlr-interest/
<*> To unsubscribe from this group, send an email to:
antlr-interest-unsubscribe at yahoogroups.com
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
More information about the antlr-interest
mailing list