// $ANTLR 3.4 /private/prg/code/xreate/antlr/lisp.g 2012-04-07 17:57:03

import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings({"all", "warnings", "unchecked"})
public class lispParser extends Parser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "WHITESPACE", "WORD", "'('", "')'", "','"
    };

    public static final int EOF=-1;
    public static final int T__6=6;
    public static final int T__7=7;
    public static final int T__8=8;
    public static final int WHITESPACE=4;
    public static final int WORD=5;

    // delegates
    public Parser[] getDelegates() {
        return new Parser[] {};
    }

    // delegators


    public lispParser(TokenStream input) {
        this(input, new RecognizerSharedState());
    }
    public lispParser(TokenStream input, RecognizerSharedState state) {
        super(input, state);
    }

    public String[] getTokenNames() { return lispParser.tokenNames; }
    public String getGrammarFileName() { return "/private/prg/code/xreate/antlr/lisp.g"; }



    // $ANTLR start "statement"
    // /private/prg/code/xreate/antlr/lisp.g:7:1: statement : WORD ( '(' statement ( ',' statement )* ')' )? ;
    public final void statement() throws RecognitionException {
        try {
            // /private/prg/code/xreate/antlr/lisp.g:8:2: ( WORD ( '(' statement ( ',' statement )* ')' )? )
            // /private/prg/code/xreate/antlr/lisp.g:8:4: WORD ( '(' statement ( ',' statement )* ')' )?
            {
            match(input,WORD,FOLLOW_WORD_in_statement71); 

            // /private/prg/code/xreate/antlr/lisp.g:8:9: ( '(' statement ( ',' statement )* ')' )?
            int alt2=2;
            int LA2_0 = input.LA(1);

            if ( (LA2_0==6) ) {
                alt2=1;
            }
            switch (alt2) {
                case 1 :
                    // /private/prg/code/xreate/antlr/lisp.g:8:10: '(' statement ( ',' statement )* ')'
                    {
                    match(input,6,FOLLOW_6_in_statement74); 

                    pushFollow(FOLLOW_statement_in_statement76);
                    statement();

                    state._fsp--;


                    // /private/prg/code/xreate/antlr/lisp.g:8:24: ( ',' statement )*
                    loop1:
                    do {
                        int alt1=2;
                        int LA1_0 = input.LA(1);

                        if ( (LA1_0==8) ) {
                            alt1=1;
                        }


                        switch (alt1) {
                    	case 1 :
                    	    // /private/prg/code/xreate/antlr/lisp.g:8:25: ',' statement
                    	    {
                    	    match(input,8,FOLLOW_8_in_statement79); 

                    	    pushFollow(FOLLOW_statement_in_statement81);
                    	    statement();

                    	    state._fsp--;


                    	    }
                    	    break;

                    	default :
                    	    break loop1;
                        }
                    } while (true);


                    match(input,7,FOLLOW_7_in_statement85); 

                    }
                    break;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return ;
    }
    // $ANTLR end "statement"

    // Delegated rules


 

    public static final BitSet FOLLOW_WORD_in_statement71 = new BitSet(new long[]{0x0000000000000042L});
    public static final BitSet FOLLOW_6_in_statement74 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_statement_in_statement76 = new BitSet(new long[]{0x0000000000000180L});
    public static final BitSet FOLLOW_8_in_statement79 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_statement_in_statement81 = new BitSet(new long[]{0x0000000000000180L});
    public static final BitSet FOLLOW_7_in_statement85 = new BitSet(new long[]{0x0000000000000002L});

}