[antlr-interest] Syntactic predicates and loops

Noel F Bryson nfb at silistix.com
Fri Apr 30 09:18:57 PDT 2004


I'm trying to build a grammar which includes something like the
following rules, which are intended to parse declaration-lists e.g. T1
a,b,c,T2 d,e,f,T3 g,h (where T1,T2 are types and a-h are variables).

type: identifier;
variable: identifier;

list_of_variables: variable (COMMA variable)*;
                                                                                                                                                             
declaration_list: type list_of_variables 
                      ( COMMA type list_of_variables)*;
                                                           

I have simplified the rules to illustrate my problem - which is that 
I get an ambiguity in list_of_variables:

sand2.g:35: warning:nondeterminism upon
sand2.g:35:     k==1:COMMA
sand2.g:35:     k==2:identifier
sand2.g:35:     k==3:EOF
sand2.g:35:     between alt 1 and exit branch of block

This occurs because ANTLR sees that, when it meets a COMMA, it can
either match using the loop in list_of_variables, or exit and match
using the loop in list_of_declarations. hence it can't tell if T2 is a
variable name or a type name. 

Since 'type' and 'variable' are actually more complex than I have shown
here, and themselves involve loops at the end, I don't think I can
resolve this be factoring or increasing the look-ahead. 

 
I'd like to be able to resolve this by getting list_of_variables to use
a syntactic predicate to lookahead through the identifier to see if
there is a COMMA (or EOF) after it. I'm new to this field, and would be
grateful if someone could show me how to do this - ANTLR ignores my
feeble efforts e.g.

list_of_variables: variable ((COMMA identifier COMMA identifier
identifier) => COMMA variable)*;





 
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