// $ANTLR 3.4 C:\\Users\\Woody\\Documents\\antlr\\SGF.g 2012-11-14 04:25:56
package net.woodyfolsom.msproj.sgf;

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

@SuppressWarnings({"all", "warnings", "unchecked"})
public class SGFParser extends Parser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "COLON", "COMMA", "DIGIT", "LBRACKET", "LCLETTER", "LPAREN", "MINUS", "PERIOD", "PLUS", "RBRACKET", "RPAREN", "SEMICOLON", "SLASH", "SPACE", "STRVALUE", "UCLETTER", "'AB'", "'AP'", "'AW'", "'B'", "'BC'", "'BR'", "'Black'", "'C'", "'CA'", "'CP'", "'DT'", "'DaTe'", "'EV'", "'EVent'", "'FF'", "'GM'", "'GaMe'", "'KM'", "'PB'", "'PC'", "'PW'", "'PlaCe'", "'PlayerBlack'", "'PlayerWhite'", "'RE'", "'REsult'", "'RU'", "'SO'", "'SZ'", "'SiZe'", "'TM'", "'US'", "'VW'", "'VieW'", "'W'", "'WC'", "'WR'", "'White'"
    };

    public static final int EOF=-1;
    public static final int T__20=20;
    public static final int T__21=21;
    public static final int T__22=22;
    public static final int T__23=23;
    public static final int T__24=24;
    public static final int T__25=25;
    public static final int T__26=26;
    public static final int T__27=27;
    public static final int T__28=28;
    public static final int T__29=29;
    public static final int T__30=30;
    public static final int T__31=31;
    public static final int T__32=32;
    public static final int T__33=33;
    public static final int T__34=34;
    public static final int T__35=35;
    public static final int T__36=36;
    public static final int T__37=37;
    public static final int T__38=38;
    public static final int T__39=39;
    public static final int T__40=40;
    public static final int T__41=41;
    public static final int T__42=42;
    public static final int T__43=43;
    public static final int T__44=44;
    public static final int T__45=45;
    public static final int T__46=46;
    public static final int T__47=47;
    public static final int T__48=48;
    public static final int T__49=49;
    public static final int T__50=50;
    public static final int T__51=51;
    public static final int T__52=52;
    public static final int T__53=53;
    public static final int T__54=54;
    public static final int T__55=55;
    public static final int T__56=56;
    public static final int T__57=57;
    public static final int COLON=4;
    public static final int COMMA=5;
    public static final int DIGIT=6;
    public static final int LBRACKET=7;
    public static final int LCLETTER=8;
    public static final int LPAREN=9;
    public static final int MINUS=10;
    public static final int PERIOD=11;
    public static final int PLUS=12;
    public static final int RBRACKET=13;
    public static final int RPAREN=14;
    public static final int SEMICOLON=15;
    public static final int SLASH=16;
    public static final int SPACE=17;
    public static final int STRVALUE=18;
    public static final int UCLETTER=19;

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

    // delegators


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

    public String[] getTokenNames() { return SGFParser.tokenNames; }
    public String getGrammarFileName() { return "C:\\Users\\Woody\\Documents\\antlr\\SGF.g"; }



    // $ANTLR start "collection"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:7:1: collection returns [SGFNodeCollection sgfNodeCollection] : ( gameTree )+ ;
    public final SGFNodeCollection collection() throws RecognitionException {
        SGFNodeCollection sgfNodeCollection = null;


        SGFGameTree gameTree1 =null;



        sgfNodeCollection = new SGFNodeCollection();

        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:11:2: ( ( gameTree )+ )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:11:4: ( gameTree )+
            {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:11:4: ( gameTree )+
            int cnt1=0;
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

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


                switch (alt1) {
            	case 1 :
            	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:11:5: gameTree
            	    {
            	    pushFollow(FOLLOW_gameTree_in_collection36);
            	    gameTree1=gameTree();

            	    state._fsp--;


            	    sgfNodeCollection.add(gameTree1);

            	    }
            	    break;

            	default :
            	    if ( cnt1 >= 1 ) break loop1;
                        EarlyExitException eee =
                            new EarlyExitException(1, input);
                        throw eee;
                }
                cnt1++;
            } while (true);


            }

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

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



    // $ANTLR start "gameTree"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:14:1: gameTree returns [SGFGameTree sgfGameTree] : LPAREN sequence ( gameTree )* RPAREN ;
    public final SGFGameTree gameTree() throws RecognitionException {
        SGFGameTree sgfGameTree = null;


        List<SGFNode> sequence2 =null;



        sgfGameTree = new SGFGameTree();

        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:18:2: ( LPAREN sequence ( gameTree )* RPAREN )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:18:5: LPAREN sequence ( gameTree )* RPAREN
            {
            match(input,LPAREN,FOLLOW_LPAREN_in_gameTree61); 

            pushFollow(FOLLOW_sequence_in_gameTree63);
            sequence2=sequence();

            state._fsp--;


            sgfGameTree.setNodeSequence(sequence2);

            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:18:76: ( gameTree )*
            loop2:
            do {
                int alt2=2;
                int LA2_0 = input.LA(1);

                if ( (LA2_0==LPAREN) ) {
                    alt2=1;
                }


                switch (alt2) {
            	case 1 :
            	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:18:77: gameTree
            	    {
            	    pushFollow(FOLLOW_gameTree_in_gameTree67);
            	    gameTree();

            	    state._fsp--;


            	    sgfGameTree.addSubTree(sgfGameTree);

            	    }
            	    break;

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


            match(input,RPAREN,FOLLOW_RPAREN_in_gameTree72); 

            }

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

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



    // $ANTLR start "sequence"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:21:1: sequence returns [List<SGFNode> nodeSequence] : ( node )+ ;
    public final List<SGFNode> sequence() throws RecognitionException {
        List<SGFNode> nodeSequence = null;


        SGFNode node3 =null;



        nodeSequence = new ArrayList<SGFNode>();

        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:25:2: ( ( node )+ )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:25:4: ( node )+
            {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:25:4: ( node )+
            int cnt3=0;
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==SEMICOLON) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:25:5: node
            	    {
            	    pushFollow(FOLLOW_node_in_sequence94);
            	    node3=node();

            	    state._fsp--;


            	    nodeSequence.add(node3);

            	    }
            	    break;

            	default :
            	    if ( cnt3 >= 1 ) break loop3;
                        EarlyExitException eee =
                            new EarlyExitException(3, input);
                        throw eee;
                }
                cnt3++;
            } while (true);


            }

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

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



    // $ANTLR start "node"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:27:1: node returns [SGFNode sgfNode] : SEMICOLON ( property )* ;
    public final SGFNode node() throws RecognitionException {
        SGFNode sgfNode = null;


        SGFProperty property4 =null;



        sgfNode = new SGFNode();

        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:31:2: ( SEMICOLON ( property )* )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:31:4: SEMICOLON ( property )*
            {
            match(input,SEMICOLON,FOLLOW_SEMICOLON_in_node115); 

            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:31:14: ( property )*
            loop4:
            do {
                int alt4=2;
                int LA4_0 = input.LA(1);

                if ( ((LA4_0 >= 20 && LA4_0 <= 57)) ) {
                    alt4=1;
                }


                switch (alt4) {
            	case 1 :
            	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:31:15: property
            	    {
            	    pushFollow(FOLLOW_property_in_node118);
            	    property4=property();

            	    state._fsp--;


            	    sgfNode.addProperty(property4);

            	    }
            	    break;

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


            }

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

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



    // $ANTLR start "property"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:33:1: property returns [SGFProperty sgfProperty] : ( ( numIdent ) ( ( LBRACKET numValue RBRACKET ) )+ | ( playerIdent ) ( ( LBRACKET RBRACKET ) )+ | ( playerIdent ) ( ( LBRACKET coordValue RBRACKET ) )+ | ( strIdent ) ( ( LBRACKET RBRACKET ) ) | ( strIdent ) ( ( LBRACKET strValue RBRACKET ) )+ | ( result ) ( ( LBRACKET strValue RBRACKET ) )+ | ( komi ) ( ( LBRACKET realValue RBRACKET ) )+ | ( coordIdent ) ( ( LBRACKET coordValue RBRACKET ) )+ );
    public final SGFProperty property() throws RecognitionException {
        SGFProperty sgfProperty = null;


        SGFIdentifier numIdent5 =null;

        SGFParser.numValue_return numValue6 =null;

        SGFIdentifier playerIdent7 =null;

        SGFIdentifier playerIdent8 =null;

        SGFParser.coordValue_return coordValue9 =null;

        SGFIdentifier strIdent10 =null;

        SGFIdentifier strIdent11 =null;

        SGFParser.strValue_return strValue12 =null;

        SGFParser.strValue_return strValue13 =null;

        SGFParser.realValue_return realValue14 =null;

        SGFIdentifier coordIdent15 =null;

        SGFParser.coordValue_return coordValue16 =null;



        sgfProperty = new SGFProperty();

        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:37:2: ( ( numIdent ) ( ( LBRACKET numValue RBRACKET ) )+ | ( playerIdent ) ( ( LBRACKET RBRACKET ) )+ | ( playerIdent ) ( ( LBRACKET coordValue RBRACKET ) )+ | ( strIdent ) ( ( LBRACKET RBRACKET ) ) | ( strIdent ) ( ( LBRACKET strValue RBRACKET ) )+ | ( result ) ( ( LBRACKET strValue RBRACKET ) )+ | ( komi ) ( ( LBRACKET realValue RBRACKET ) )+ | ( coordIdent ) ( ( LBRACKET coordValue RBRACKET ) )+ )
            int alt12=8;
            switch ( input.LA(1) ) {
            case 34:
            case 35:
            case 36:
            case 48:
            case 49:
            case 50:
                {
                alt12=1;
                }
                break;
            case 28:
                {
                int LA12_2 = input.LA(2);

                if ( (LA12_2==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 2, input);

                    throw nvae;

                }
                }
                break;
            case 47:
                {
                int LA12_3 = input.LA(2);

                if ( (LA12_3==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 3, input);

                    throw nvae;

                }
                }
                break;
            case 24:
                {
                int LA12_4 = input.LA(2);

                if ( (LA12_4==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 4, input);

                    throw nvae;

                }
                }
                break;
            case 55:
                {
                int LA12_5 = input.LA(2);

                if ( (LA12_5==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 5, input);

                    throw nvae;

                }
                }
                break;
            case 32:
            case 33:
                {
                int LA12_6 = input.LA(2);

                if ( (LA12_6==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 6, input);

                    throw nvae;

                }
                }
                break;
            case 38:
            case 42:
                {
                int LA12_7 = input.LA(2);

                if ( (LA12_7==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 7, input);

                    throw nvae;

                }
                }
                break;
            case 40:
            case 43:
                {
                int LA12_8 = input.LA(2);

                if ( (LA12_8==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 8, input);

                    throw nvae;

                }
                }
                break;
            case 25:
                {
                int LA12_9 = input.LA(2);

                if ( (LA12_9==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 9, input);

                    throw nvae;

                }
                }
                break;
            case 56:
                {
                int LA12_10 = input.LA(2);

                if ( (LA12_10==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 10, input);

                    throw nvae;

                }
                }
                break;
            case 46:
                {
                int LA12_11 = input.LA(2);

                if ( (LA12_11==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 11, input);

                    throw nvae;

                }
                }
                break;
            case 39:
            case 41:
                {
                int LA12_12 = input.LA(2);

                if ( (LA12_12==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 12, input);

                    throw nvae;

                }
                }
                break;
            case 21:
                {
                int LA12_13 = input.LA(2);

                if ( (LA12_13==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 13, input);

                    throw nvae;

                }
                }
                break;
            case 29:
                {
                int LA12_14 = input.LA(2);

                if ( (LA12_14==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 14, input);

                    throw nvae;

                }
                }
                break;
            case 51:
                {
                int LA12_15 = input.LA(2);

                if ( (LA12_15==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 15, input);

                    throw nvae;

                }
                }
                break;
            case 30:
            case 31:
                {
                int LA12_16 = input.LA(2);

                if ( (LA12_16==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 16, input);

                    throw nvae;

                }
                }
                break;
            case 26:
                {
                int LA12_17 = input.LA(2);

                if ( (LA12_17==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 17, input);

                    throw nvae;

                }
                }
                break;
            case 57:
                {
                int LA12_18 = input.LA(2);

                if ( (LA12_18==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 18, input);

                    throw nvae;

                }
                }
                break;
            case 23:
                {
                int LA12_19 = input.LA(2);

                if ( (LA12_19==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 19, input);

                    throw nvae;

                }
                }
                break;
            case 54:
                {
                int LA12_20 = input.LA(2);

                if ( (LA12_20==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 20, input);

                    throw nvae;

                }
                }
                break;
            case 52:
            case 53:
                {
                int LA12_21 = input.LA(2);

                if ( (LA12_21==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 21, input);

                    throw nvae;

                }
                }
                break;
            case 27:
                {
                int LA12_22 = input.LA(2);

                if ( (LA12_22==LBRACKET) ) {
                    int LA12_26 = input.LA(3);

                    if ( (LA12_26==RBRACKET) ) {
                        int LA12_27 = input.LA(4);

                        if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                            alt12=2;
                        }
                        else if ( (true) ) {
                            alt12=4;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 27, input);

                            throw nvae;

                        }
                    }
                    else if ( (LA12_26==STRVALUE) ) {
                        int LA12_28 = input.LA(4);

                        if ( (LA12_28==RBRACKET) ) {
                            int LA12_31 = input.LA(5);

                            if ( ((((input.LT(1).getText().equals("Black")))||((input.LT(1).getText().equals("W")))||((input.LT(1).getText().equals("White")))||((input.LT(1).getText().equals("B"))))) ) {
                                alt12=3;
                            }
                            else if ( (true) ) {
                                alt12=5;
                            }
                            else {
                                NoViableAltException nvae =
                                    new NoViableAltException("", 12, 31, input);

                                throw nvae;

                            }
                        }
                        else if ( (LA12_28==STRVALUE) ) {
                            alt12=5;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 12, 28, input);

                            throw nvae;

                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 12, 26, input);

                        throw nvae;

                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 12, 22, input);

                    throw nvae;

                }
                }
                break;
            case 44:
            case 45:
                {
                alt12=6;
                }
                break;
            case 37:
                {
                alt12=7;
                }
                break;
            case 20:
            case 22:
                {
                alt12=8;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 12, 0, input);

                throw nvae;

            }

            switch (alt12) {
                case 1 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:37:4: ( numIdent ) ( ( LBRACKET numValue RBRACKET ) )+
                    {
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:37:4: ( numIdent )
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:37:5: numIdent
                    {
                    pushFollow(FOLLOW_numIdent_in_property140);
                    numIdent5=numIdent();

                    state._fsp--;


                    sgfProperty.setIdentifier(numIdent5);

                    }


                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:37:64: ( ( LBRACKET numValue RBRACKET ) )+
                    int cnt5=0;
                    loop5:
                    do {
                        int alt5=2;
                        int LA5_0 = input.LA(1);

                        if ( (LA5_0==LBRACKET) ) {
                            alt5=1;
                        }


                        switch (alt5) {
                    	case 1 :
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:37:65: ( LBRACKET numValue RBRACKET )
                    	    {
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:37:65: ( LBRACKET numValue RBRACKET )
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:37:66: LBRACKET numValue RBRACKET
                    	    {
                    	    match(input,LBRACKET,FOLLOW_LBRACKET_in_property146); 

                    	    pushFollow(FOLLOW_numValue_in_property148);
                    	    numValue6=numValue();

                    	    state._fsp--;


                    	    match(input,RBRACKET,FOLLOW_RBRACKET_in_property150); 

                    	    }


                    	    sgfProperty.addValue((numValue6!=null?numValue6.sgfValue:null));

                    	    }
                    	    break;

                    	default :
                    	    if ( cnt5 >= 1 ) break loop5;
                                EarlyExitException eee =
                                    new EarlyExitException(5, input);
                                throw eee;
                        }
                        cnt5++;
                    } while (true);


                    }
                    break;
                case 2 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:40:4: ( playerIdent ) ( ( LBRACKET RBRACKET ) )+
                    {
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:40:4: ( playerIdent )
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:40:5: playerIdent
                    {
                    pushFollow(FOLLOW_playerIdent_in_property164);
                    playerIdent7=playerIdent();

                    state._fsp--;


                    sgfProperty.setIdentifier(playerIdent7);

                    }


                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:40:71: ( ( LBRACKET RBRACKET ) )+
                    int cnt6=0;
                    loop6:
                    do {
                        int alt6=2;
                        int LA6_0 = input.LA(1);

                        if ( (LA6_0==LBRACKET) ) {
                            alt6=1;
                        }


                        switch (alt6) {
                    	case 1 :
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:40:72: ( LBRACKET RBRACKET )
                    	    {
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:40:72: ( LBRACKET RBRACKET )
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:40:73: LBRACKET RBRACKET
                    	    {
                    	    match(input,LBRACKET,FOLLOW_LBRACKET_in_property170); 

                    	    match(input,RBRACKET,FOLLOW_RBRACKET_in_property172); 

                    	    }


                    	    sgfProperty.addValue(SGFValue.EMPTY);

                    	    }
                    	    break;

                    	default :
                    	    if ( cnt6 >= 1 ) break loop6;
                                EarlyExitException eee =
                                    new EarlyExitException(6, input);
                                throw eee;
                        }
                        cnt6++;
                    } while (true);


                    }
                    break;
                case 3 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:41:4: ( playerIdent ) ( ( LBRACKET coordValue RBRACKET ) )+
                    {
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:41:4: ( playerIdent )
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:41:5: playerIdent
                    {
                    pushFollow(FOLLOW_playerIdent_in_property182);
                    playerIdent8=playerIdent();

                    state._fsp--;


                    sgfProperty.setIdentifier(playerIdent8);

                    }


                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:41:71: ( ( LBRACKET coordValue RBRACKET ) )+
                    int cnt7=0;
                    loop7:
                    do {
                        int alt7=2;
                        int LA7_0 = input.LA(1);

                        if ( (LA7_0==LBRACKET) ) {
                            alt7=1;
                        }


                        switch (alt7) {
                    	case 1 :
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:41:72: ( LBRACKET coordValue RBRACKET )
                    	    {
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:41:72: ( LBRACKET coordValue RBRACKET )
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:41:73: LBRACKET coordValue RBRACKET
                    	    {
                    	    match(input,LBRACKET,FOLLOW_LBRACKET_in_property188); 

                    	    pushFollow(FOLLOW_coordValue_in_property190);
                    	    coordValue9=coordValue();

                    	    state._fsp--;


                    	    match(input,RBRACKET,FOLLOW_RBRACKET_in_property192); 

                    	    }


                    	    sgfProperty.addValue(new SGFValue<SGFCoord>((coordValue9!=null?coordValue9.sgfCoord:null)));

                    	    }
                    	    break;

                    	default :
                    	    if ( cnt7 >= 1 ) break loop7;
                                EarlyExitException eee =
                                    new EarlyExitException(7, input);
                                throw eee;
                        }
                        cnt7++;
                    } while (true);


                    }
                    break;
                case 4 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:44:4: ( strIdent ) ( ( LBRACKET RBRACKET ) )
                    {
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:44:4: ( strIdent )
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:44:5: strIdent
                    {
                    pushFollow(FOLLOW_strIdent_in_property206);
                    strIdent10=strIdent();

                    state._fsp--;


                    sgfProperty.setIdentifier(strIdent10);

                    }


                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:44:64: ( ( LBRACKET RBRACKET ) )
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:44:65: ( LBRACKET RBRACKET )
                    {
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:44:65: ( LBRACKET RBRACKET )
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:44:66: LBRACKET RBRACKET
                    {
                    match(input,LBRACKET,FOLLOW_LBRACKET_in_property212); 

                    match(input,RBRACKET,FOLLOW_RBRACKET_in_property214); 

                    }


                    sgfProperty.addValue(SGFValue.EMPTY);

                    }


                    }
                    break;
                case 5 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:45:4: ( strIdent ) ( ( LBRACKET strValue RBRACKET ) )+
                    {
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:45:4: ( strIdent )
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:45:5: strIdent
                    {
                    pushFollow(FOLLOW_strIdent_in_property223);
                    strIdent11=strIdent();

                    state._fsp--;


                    sgfProperty.setIdentifier(strIdent11);

                    }


                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:45:64: ( ( LBRACKET strValue RBRACKET ) )+
                    int cnt8=0;
                    loop8:
                    do {
                        int alt8=2;
                        int LA8_0 = input.LA(1);

                        if ( (LA8_0==LBRACKET) ) {
                            alt8=1;
                        }


                        switch (alt8) {
                    	case 1 :
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:45:65: ( LBRACKET strValue RBRACKET )
                    	    {
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:45:65: ( LBRACKET strValue RBRACKET )
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:45:66: LBRACKET strValue RBRACKET
                    	    {
                    	    match(input,LBRACKET,FOLLOW_LBRACKET_in_property229); 

                    	    pushFollow(FOLLOW_strValue_in_property231);
                    	    strValue12=strValue();

                    	    state._fsp--;


                    	    match(input,RBRACKET,FOLLOW_RBRACKET_in_property233); 

                    	    }


                    	    sgfProperty.addValue(new SGFValue<String>((strValue12!=null?input.toString(strValue12.start,strValue12.stop):null)));

                    	    }
                    	    break;

                    	default :
                    	    if ( cnt8 >= 1 ) break loop8;
                                EarlyExitException eee =
                                    new EarlyExitException(8, input);
                                throw eee;
                        }
                        cnt8++;
                    } while (true);


                    }
                    break;
                case 6 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:47:4: ( result ) ( ( LBRACKET strValue RBRACKET ) )+
                    {
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:47:4: ( result )
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:47:5: result
                    {
                    pushFollow(FOLLOW_result_in_property245);
                    result();

                    state._fsp--;


                    sgfProperty.setIdentifier(SGFIdentifier.RESULT);

                    }


                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:47:64: ( ( LBRACKET strValue RBRACKET ) )+
                    int cnt9=0;
                    loop9:
                    do {
                        int alt9=2;
                        int LA9_0 = input.LA(1);

                        if ( (LA9_0==LBRACKET) ) {
                            alt9=1;
                        }


                        switch (alt9) {
                    	case 1 :
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:47:65: ( LBRACKET strValue RBRACKET )
                    	    {
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:47:65: ( LBRACKET strValue RBRACKET )
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:47:66: LBRACKET strValue RBRACKET
                    	    {
                    	    match(input,LBRACKET,FOLLOW_LBRACKET_in_property251); 

                    	    pushFollow(FOLLOW_strValue_in_property253);
                    	    strValue13=strValue();

                    	    state._fsp--;


                    	    match(input,RBRACKET,FOLLOW_RBRACKET_in_property255); 

                    	    }


                    	    sgfProperty.addValue(new SGFValue<SGFResult>(new SGFResult((strValue13!=null?input.toString(strValue13.start,strValue13.stop):null))));

                    	    }
                    	    break;

                    	default :
                    	    if ( cnt9 >= 1 ) break loop9;
                                EarlyExitException eee =
                                    new EarlyExitException(9, input);
                                throw eee;
                        }
                        cnt9++;
                    } while (true);


                    }
                    break;
                case 7 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:49:4: ( komi ) ( ( LBRACKET realValue RBRACKET ) )+
                    {
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:49:4: ( komi )
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:49:5: komi
                    {
                    pushFollow(FOLLOW_komi_in_property267);
                    komi();

                    state._fsp--;


                    sgfProperty.setIdentifier(SGFIdentifier.KOMI);

                    }


                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:49:60: ( ( LBRACKET realValue RBRACKET ) )+
                    int cnt10=0;
                    loop10:
                    do {
                        int alt10=2;
                        int LA10_0 = input.LA(1);

                        if ( (LA10_0==LBRACKET) ) {
                            alt10=1;
                        }


                        switch (alt10) {
                    	case 1 :
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:49:61: ( LBRACKET realValue RBRACKET )
                    	    {
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:49:61: ( LBRACKET realValue RBRACKET )
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:49:62: LBRACKET realValue RBRACKET
                    	    {
                    	    match(input,LBRACKET,FOLLOW_LBRACKET_in_property273); 

                    	    pushFollow(FOLLOW_realValue_in_property275);
                    	    realValue14=realValue();

                    	    state._fsp--;


                    	    match(input,RBRACKET,FOLLOW_RBRACKET_in_property277); 

                    	    }


                    	    sgfProperty.addValue(new SGFValue<Double>(Double.parseDouble((realValue14!=null?input.toString(realValue14.start,realValue14.stop):null))));

                    	    }
                    	    break;

                    	default :
                    	    if ( cnt10 >= 1 ) break loop10;
                                EarlyExitException eee =
                                    new EarlyExitException(10, input);
                                throw eee;
                        }
                        cnt10++;
                    } while (true);


                    }
                    break;
                case 8 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:50:4: ( coordIdent ) ( ( LBRACKET coordValue RBRACKET ) )+
                    {
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:50:4: ( coordIdent )
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:50:5: coordIdent
                    {
                    pushFollow(FOLLOW_coordIdent_in_property287);
                    coordIdent15=coordIdent();

                    state._fsp--;


                    sgfProperty.setIdentifier(coordIdent15);

                    }


                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:50:67: ( ( LBRACKET coordValue RBRACKET ) )+
                    int cnt11=0;
                    loop11:
                    do {
                        int alt11=2;
                        int LA11_0 = input.LA(1);

                        if ( (LA11_0==LBRACKET) ) {
                            alt11=1;
                        }


                        switch (alt11) {
                    	case 1 :
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:50:68: ( LBRACKET coordValue RBRACKET )
                    	    {
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:50:68: ( LBRACKET coordValue RBRACKET )
                    	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:50:69: LBRACKET coordValue RBRACKET
                    	    {
                    	    match(input,LBRACKET,FOLLOW_LBRACKET_in_property292); 

                    	    pushFollow(FOLLOW_coordValue_in_property294);
                    	    coordValue16=coordValue();

                    	    state._fsp--;


                    	    match(input,RBRACKET,FOLLOW_RBRACKET_in_property296); 

                    	    }


                    	    sgfProperty.addValue(new SGFValue<SGFCoord>(new SGFCoord((coordValue16!=null?input.toString(coordValue16.start,coordValue16.stop):null))));

                    	    }
                    	    break;

                    	default :
                    	    if ( cnt11 >= 1 ) break loop11;
                                EarlyExitException eee =
                                    new EarlyExitException(11, input);
                                throw eee;
                        }
                        cnt11++;
                    } while (true);


                    }
                    break;

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

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



    // $ANTLR start "playerIdent"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:54:1: playerIdent returns [SGFIdentifier sgfPlayer] : ({...}? strIdent |{...}? strIdent |{...}? strIdent |{...}? strIdent );
    public final SGFIdentifier playerIdent() throws RecognitionException {
        SGFIdentifier sgfPlayer = null;


        SGFIdentifier strIdent17 =null;

        SGFIdentifier strIdent18 =null;

        SGFIdentifier strIdent19 =null;

        SGFIdentifier strIdent20 =null;


        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:55:2: ({...}? strIdent |{...}? strIdent |{...}? strIdent |{...}? strIdent )
            int alt13=4;
            switch ( input.LA(1) ) {
            case 28:
                {
                int LA13_1 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 1, input);

                    throw nvae;

                }
                }
                break;
            case 47:
                {
                int LA13_2 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 2, input);

                    throw nvae;

                }
                }
                break;
            case 24:
                {
                int LA13_3 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 3, input);

                    throw nvae;

                }
                }
                break;
            case 55:
                {
                int LA13_4 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 4, input);

                    throw nvae;

                }
                }
                break;
            case 32:
            case 33:
                {
                int LA13_5 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 5, input);

                    throw nvae;

                }
                }
                break;
            case 38:
            case 42:
                {
                int LA13_6 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 6, input);

                    throw nvae;

                }
                }
                break;
            case 40:
            case 43:
                {
                int LA13_7 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 7, input);

                    throw nvae;

                }
                }
                break;
            case 25:
                {
                int LA13_8 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 8, input);

                    throw nvae;

                }
                }
                break;
            case 56:
                {
                int LA13_9 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 9, input);

                    throw nvae;

                }
                }
                break;
            case 46:
                {
                int LA13_10 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 10, input);

                    throw nvae;

                }
                }
                break;
            case 39:
            case 41:
                {
                int LA13_11 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 11, input);

                    throw nvae;

                }
                }
                break;
            case 21:
                {
                int LA13_12 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 12, input);

                    throw nvae;

                }
                }
                break;
            case 29:
                {
                int LA13_13 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 13, input);

                    throw nvae;

                }
                }
                break;
            case 51:
                {
                int LA13_14 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 14, input);

                    throw nvae;

                }
                }
                break;
            case 30:
            case 31:
                {
                int LA13_15 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 15, input);

                    throw nvae;

                }
                }
                break;
            case 26:
                {
                int LA13_16 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 16, input);

                    throw nvae;

                }
                }
                break;
            case 57:
                {
                int LA13_17 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 17, input);

                    throw nvae;

                }
                }
                break;
            case 23:
                {
                int LA13_18 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 18, input);

                    throw nvae;

                }
                }
                break;
            case 54:
                {
                int LA13_19 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 19, input);

                    throw nvae;

                }
                }
                break;
            case 52:
            case 53:
                {
                int LA13_20 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 20, input);

                    throw nvae;

                }
                }
                break;
            case 27:
                {
                int LA13_21 = input.LA(2);

                if ( (((input.LT(1).getText().equals("W")))) ) {
                    alt13=1;
                }
                else if ( (((input.LT(1).getText().equals("B")))) ) {
                    alt13=2;
                }
                else if ( (((input.LT(1).getText().equals("White")))) ) {
                    alt13=3;
                }
                else if ( (((input.LT(1).getText().equals("Black")))) ) {
                    alt13=4;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 21, input);

                    throw nvae;

                }
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 13, 0, input);

                throw nvae;

            }

            switch (alt13) {
                case 1 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:55:4: {...}? strIdent
                    {
                    if ( !(((input.LT(1).getText().equals("W")))) ) {
                        throw new FailedPredicateException(input, "playerIdent", "(input.LT(1).getText().equals(\"W\"))");
                    }

                    pushFollow(FOLLOW_strIdent_in_playerIdent318);
                    strIdent17=strIdent();

                    state._fsp--;


                    sgfPlayer = strIdent17;

                    }
                    break;
                case 2 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:56:4: {...}? strIdent
                    {
                    if ( !(((input.LT(1).getText().equals("B")))) ) {
                        throw new FailedPredicateException(input, "playerIdent", "(input.LT(1).getText().equals(\"B\"))");
                    }

                    pushFollow(FOLLOW_strIdent_in_playerIdent327);
                    strIdent18=strIdent();

                    state._fsp--;


                    sgfPlayer = strIdent18;

                    }
                    break;
                case 3 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:57:4: {...}? strIdent
                    {
                    if ( !(((input.LT(1).getText().equals("White")))) ) {
                        throw new FailedPredicateException(input, "playerIdent", "(input.LT(1).getText().equals(\"White\"))");
                    }

                    pushFollow(FOLLOW_strIdent_in_playerIdent336);
                    strIdent19=strIdent();

                    state._fsp--;


                    sgfPlayer = strIdent19;

                    }
                    break;
                case 4 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:58:4: {...}? strIdent
                    {
                    if ( !(((input.LT(1).getText().equals("Black")))) ) {
                        throw new FailedPredicateException(input, "playerIdent", "(input.LT(1).getText().equals(\"Black\"))");
                    }

                    pushFollow(FOLLOW_strIdent_in_playerIdent345);
                    strIdent20=strIdent();

                    state._fsp--;


                    sgfPlayer = strIdent20;

                    }
                    break;

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

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



    // $ANTLR start "strIdent"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:61:1: strIdent returns [SGFIdentifier sgfIdent] : ( charEnc | source | blackCountry | whiteCountry | event | playerBlack | playerWhite | blackRank | whiteRank | rules | place | application | copyright | username | date | 'Black' | 'White' | 'B' | 'W' | view | comment );
    public final SGFIdentifier strIdent() throws RecognitionException {
        SGFIdentifier sgfIdent = null;


        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:62:2: ( charEnc | source | blackCountry | whiteCountry | event | playerBlack | playerWhite | blackRank | whiteRank | rules | place | application | copyright | username | date | 'Black' | 'White' | 'B' | 'W' | view | comment )
            int alt14=21;
            switch ( input.LA(1) ) {
            case 28:
                {
                alt14=1;
                }
                break;
            case 47:
                {
                alt14=2;
                }
                break;
            case 24:
                {
                alt14=3;
                }
                break;
            case 55:
                {
                alt14=4;
                }
                break;
            case 32:
            case 33:
                {
                alt14=5;
                }
                break;
            case 38:
            case 42:
                {
                alt14=6;
                }
                break;
            case 40:
            case 43:
                {
                alt14=7;
                }
                break;
            case 25:
                {
                alt14=8;
                }
                break;
            case 56:
                {
                alt14=9;
                }
                break;
            case 46:
                {
                alt14=10;
                }
                break;
            case 39:
            case 41:
                {
                alt14=11;
                }
                break;
            case 21:
                {
                alt14=12;
                }
                break;
            case 29:
                {
                alt14=13;
                }
                break;
            case 51:
                {
                alt14=14;
                }
                break;
            case 30:
            case 31:
                {
                alt14=15;
                }
                break;
            case 26:
                {
                alt14=16;
                }
                break;
            case 57:
                {
                alt14=17;
                }
                break;
            case 23:
                {
                alt14=18;
                }
                break;
            case 54:
                {
                alt14=19;
                }
                break;
            case 52:
            case 53:
                {
                alt14=20;
                }
                break;
            case 27:
                {
                alt14=21;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 14, 0, input);

                throw nvae;

            }

            switch (alt14) {
                case 1 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:62:4: charEnc
                    {
                    pushFollow(FOLLOW_charEnc_in_strIdent362);
                    charEnc();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.CHARSET;

                    }
                    break;
                case 2 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:63:10: source
                    {
                    pushFollow(FOLLOW_source_in_strIdent374);
                    source();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.SOURCE;

                    }
                    break;
                case 3 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:64:10: blackCountry
                    {
                    pushFollow(FOLLOW_blackCountry_in_strIdent386);
                    blackCountry();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.COUNTRY_BLACK;

                    }
                    break;
                case 4 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:65:10: whiteCountry
                    {
                    pushFollow(FOLLOW_whiteCountry_in_strIdent398);
                    whiteCountry();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.COUNTRY_WHITE;

                    }
                    break;
                case 5 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:66:4: event
                    {
                    pushFollow(FOLLOW_event_in_strIdent404);
                    event();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.EVENT;

                    }
                    break;
                case 6 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:67:4: playerBlack
                    {
                    pushFollow(FOLLOW_playerBlack_in_strIdent410);
                    playerBlack();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.PLAYER_BLACK;

                    }
                    break;
                case 7 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:68:4: playerWhite
                    {
                    pushFollow(FOLLOW_playerWhite_in_strIdent416);
                    playerWhite();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.PLAYER_WHITE;

                    }
                    break;
                case 8 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:69:4: blackRank
                    {
                    pushFollow(FOLLOW_blackRank_in_strIdent422);
                    blackRank();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.RANK_BLACK;

                    }
                    break;
                case 9 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:70:4: whiteRank
                    {
                    pushFollow(FOLLOW_whiteRank_in_strIdent428);
                    whiteRank();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.RANK_WHITE;

                    }
                    break;
                case 10 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:71:4: rules
                    {
                    pushFollow(FOLLOW_rules_in_strIdent434);
                    rules();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.RULES;

                    }
                    break;
                case 11 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:72:4: place
                    {
                    pushFollow(FOLLOW_place_in_strIdent440);
                    place();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.PLACE;

                    }
                    break;
                case 12 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:73:12: application
                    {
                    pushFollow(FOLLOW_application_in_strIdent454);
                    application();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.APPLICATION;

                    }
                    break;
                case 13 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:74:11: copyright
                    {
                    pushFollow(FOLLOW_copyright_in_strIdent467);
                    copyright();

                    state._fsp--;


                    }
                    break;
                case 14 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:75:11: username
                    {
                    pushFollow(FOLLOW_username_in_strIdent479);
                    username();

                    state._fsp--;


                    }
                    break;
                case 15 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:76:11: date
                    {
                    pushFollow(FOLLOW_date_in_strIdent491);
                    date();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.DATE;

                    }
                    break;
                case 16 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:77:11: 'Black'
                    {
                    match(input,26,FOLLOW_26_in_strIdent504); 

                    sgfIdent = SGFIdentifier.MOVE_BLACK;

                    }
                    break;
                case 17 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:78:11: 'White'
                    {
                    match(input,57,FOLLOW_57_in_strIdent517); 

                    sgfIdent = SGFIdentifier.MOVE_WHITE;

                    }
                    break;
                case 18 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:79:11: 'B'
                    {
                    match(input,23,FOLLOW_23_in_strIdent530); 

                    sgfIdent = SGFIdentifier.MOVE_BLACK;

                    }
                    break;
                case 19 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:80:11: 'W'
                    {
                    match(input,54,FOLLOW_54_in_strIdent543); 

                    sgfIdent = SGFIdentifier.MOVE_WHITE;

                    }
                    break;
                case 20 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:81:11: view
                    {
                    pushFollow(FOLLOW_view_in_strIdent556);
                    view();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.VIEW;

                    }
                    break;
                case 21 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:82:11: comment
                    {
                    pushFollow(FOLLOW_comment_in_strIdent570);
                    comment();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.COMMENT;

                    }
                    break;

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

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



    // $ANTLR start "coordIdent"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:87:1: coordIdent returns [SGFIdentifier sgfIdent] : ( addBlack | addWhite );
    public final SGFIdentifier coordIdent() throws RecognitionException {
        SGFIdentifier sgfIdent = null;


        SGFIdentifier addBlack21 =null;

        SGFIdentifier addWhite22 =null;


        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:88:2: ( addBlack | addWhite )
            int alt15=2;
            int LA15_0 = input.LA(1);

            if ( (LA15_0==20) ) {
                alt15=1;
            }
            else if ( (LA15_0==22) ) {
                alt15=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 15, 0, input);

                throw nvae;

            }
            switch (alt15) {
                case 1 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:88:4: addBlack
                    {
                    pushFollow(FOLLOW_addBlack_in_coordIdent616);
                    addBlack21=addBlack();

                    state._fsp--;


                    sgfIdent = addBlack21;

                    }
                    break;
                case 2 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:89:5: addWhite
                    {
                    pushFollow(FOLLOW_addWhite_in_coordIdent624);
                    addWhite22=addWhite();

                    state._fsp--;


                    sgfIdent = addWhite22;

                    }
                    break;

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

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



    // $ANTLR start "numIdent"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:92:1: numIdent returns [SGFIdentifier sgfIdent] : ( fileFormat | game | size | time );
    public final SGFIdentifier numIdent() throws RecognitionException {
        SGFIdentifier sgfIdent = null;


        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:93:2: ( fileFormat | game | size | time )
            int alt16=4;
            switch ( input.LA(1) ) {
            case 34:
                {
                alt16=1;
                }
                break;
            case 35:
            case 36:
                {
                alt16=2;
                }
                break;
            case 48:
            case 49:
                {
                alt16=3;
                }
                break;
            case 50:
                {
                alt16=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 16, 0, input);

                throw nvae;

            }

            switch (alt16) {
                case 1 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:93:4: fileFormat
                    {
                    pushFollow(FOLLOW_fileFormat_in_numIdent641);
                    fileFormat();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.FILE_FORMAT;

                    }
                    break;
                case 2 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:94:4: game
                    {
                    pushFollow(FOLLOW_game_in_numIdent647);
                    game();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.GAME;

                    }
                    break;
                case 3 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:95:4: size
                    {
                    pushFollow(FOLLOW_size_in_numIdent653);
                    size();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.SIZE;

                    }
                    break;
                case 4 :
                    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:96:4: time
                    {
                    pushFollow(FOLLOW_time_in_numIdent659);
                    time();

                    state._fsp--;


                    sgfIdent = SGFIdentifier.TIME;

                    }
                    break;

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

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


    public static class numValue_return extends ParserRuleReturnScope {
        public SGFValue<Integer> sgfValue;
    };


    // $ANTLR start "numValue"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:98:1: numValue returns [SGFValue<Integer> sgfValue] : ( STRVALUE ) ;
    public final SGFParser.numValue_return numValue() throws RecognitionException {
        SGFParser.numValue_return retval = new SGFParser.numValue_return();
        retval.start = input.LT(1);


        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:99:2: ( ( STRVALUE ) )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:99:5: ( STRVALUE )
            {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:99:5: ( STRVALUE )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:99:6: STRVALUE
            {
            match(input,STRVALUE,FOLLOW_STRVALUE_in_numValue675); 

            }


            retval.sgfValue = new SGFValue<Integer>(Integer.parseInt(input.toString(retval.start,input.LT(-1))));

            }

            retval.stop = input.LT(-1);


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

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



    // $ANTLR start "realIdent"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:101:1: realIdent : komi ;
    public final void realIdent() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:102:2: ( komi )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:102:4: komi
            {
            pushFollow(FOLLOW_komi_in_realIdent688);
            komi();

            state._fsp--;


            }

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

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


    public static class realValue_return extends ParserRuleReturnScope {
    };


    // $ANTLR start "realValue"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:104:1: realValue : STRVALUE ;
    public final SGFParser.realValue_return realValue() throws RecognitionException {
        SGFParser.realValue_return retval = new SGFParser.realValue_return();
        retval.start = input.LT(1);


        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:105:2: ( STRVALUE )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:105:4: STRVALUE
            {
            match(input,STRVALUE,FOLLOW_STRVALUE_in_realValue698); 

            }

            retval.stop = input.LT(-1);


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

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


    public static class coordValue_return extends ParserRuleReturnScope {
        public SGFCoord sgfCoord;
    };


    // $ANTLR start "coordValue"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:107:1: coordValue returns [SGFCoord sgfCoord] : STRVALUE ;
    public final SGFParser.coordValue_return coordValue() throws RecognitionException {
        SGFParser.coordValue_return retval = new SGFParser.coordValue_return();
        retval.start = input.LT(1);


        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:108:2: ( STRVALUE )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:108:4: STRVALUE
            {
            match(input,STRVALUE,FOLLOW_STRVALUE_in_coordValue713); 

            retval.sgfCoord = new SGFCoord(input.toString(retval.start,input.LT(-1)));

            }

            retval.stop = input.LT(-1);


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

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



    // $ANTLR start "fileFormat"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:111:1: fileFormat : 'FF' ;
    public final void fileFormat() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:112:2: ( 'FF' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:112:4: 'FF'
            {
            match(input,34,FOLLOW_34_in_fileFormat727); 

            }

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

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



    // $ANTLR start "game"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:114:1: game : ( 'GM' | 'GaMe' );
    public final void game() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:114:7: ( 'GM' | 'GaMe' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:
            {
            if ( (input.LA(1) >= 35 && input.LA(1) <= 36) ) {
                input.consume();
                state.errorRecovery=false;
            }
            else {
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

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

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



    // $ANTLR start "size"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:116:1: size : ( 'SZ' | 'SiZe' );
    public final void size() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:116:7: ( 'SZ' | 'SiZe' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:
            {
            if ( (input.LA(1) >= 48 && input.LA(1) <= 49) ) {
                input.consume();
                state.errorRecovery=false;
            }
            else {
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

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

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



    // $ANTLR start "view"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:118:1: view : ( 'VW' | 'VieW' );
    public final void view() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:118:7: ( 'VW' | 'VieW' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:
            {
            if ( (input.LA(1) >= 52 && input.LA(1) <= 53) ) {
                input.consume();
                state.errorRecovery=false;
            }
            else {
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

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

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



    // $ANTLR start "charEnc"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:120:1: charEnc : 'CA' ;
    public final void charEnc() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:120:9: ( 'CA' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:120:11: 'CA'
            {
            match(input,28,FOLLOW_28_in_charEnc775); 

            }

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

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



    // $ANTLR start "source"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:122:1: source : 'SO' ;
    public final void source() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:122:8: ( 'SO' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:122:10: 'SO'
            {
            match(input,47,FOLLOW_47_in_source783); 

            }

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

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



    // $ANTLR start "blackCountry"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:124:1: blackCountry : 'BC' ;
    public final void blackCountry() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:125:2: ( 'BC' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:125:4: 'BC'
            {
            match(input,24,FOLLOW_24_in_blackCountry793); 

            }

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

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



    // $ANTLR start "whiteCountry"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:127:1: whiteCountry : 'WC' ;
    public final void whiteCountry() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:128:2: ( 'WC' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:128:4: 'WC'
            {
            match(input,55,FOLLOW_55_in_whiteCountry804); 

            }

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

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



    // $ANTLR start "event"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:130:1: event : ( 'EV' | 'EVent' );
    public final void event() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:130:7: ( 'EV' | 'EVent' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:
            {
            if ( (input.LA(1) >= 32 && input.LA(1) <= 33) ) {
                input.consume();
                state.errorRecovery=false;
            }
            else {
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

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

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



    // $ANTLR start "playerBlack"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:132:1: playerBlack : ( 'PB' | 'PlayerBlack' );
    public final void playerBlack() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:133:2: ( 'PB' | 'PlayerBlack' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:
            {
            if ( input.LA(1)==38||input.LA(1)==42 ) {
                input.consume();
                state.errorRecovery=false;
            }
            else {
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

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

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



    // $ANTLR start "playerWhite"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:134:1: playerWhite : ( 'PW' | 'PlayerWhite' );
    public final void playerWhite() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:135:2: ( 'PW' | 'PlayerWhite' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:
            {
            if ( input.LA(1)==40||input.LA(1)==43 ) {
                input.consume();
                state.errorRecovery=false;
            }
            else {
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

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

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



    // $ANTLR start "blackRank"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:136:1: blackRank : 'BR' ;
    public final void blackRank() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:137:2: ( 'BR' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:137:4: 'BR'
            {
            match(input,25,FOLLOW_25_in_blackRank850); 

            }

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

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



    // $ANTLR start "whiteRank"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:139:1: whiteRank : 'WR' ;
    public final void whiteRank() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:140:2: ( 'WR' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:140:5: 'WR'
            {
            match(input,56,FOLLOW_56_in_whiteRank861); 

            }

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

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



    // $ANTLR start "komi"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:142:1: komi : 'KM' ;
    public final void komi() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:142:7: ( 'KM' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:142:9: 'KM'
            {
            match(input,37,FOLLOW_37_in_komi871); 

            }

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

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



    // $ANTLR start "result"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:144:1: result : ( 'RE' | 'REsult' );
    public final void result() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:144:9: ( 'RE' | 'REsult' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:
            {
            if ( (input.LA(1) >= 44 && input.LA(1) <= 45) ) {
                input.consume();
                state.errorRecovery=false;
            }
            else {
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

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

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



    // $ANTLR start "rules"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:148:1: rules : 'RU' ;
    public final void rules() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:148:7: ( 'RU' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:148:9: 'RU'
            {
            match(input,46,FOLLOW_46_in_rules897); 

            }

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

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



    // $ANTLR start "place"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:150:1: place : ( 'PC' | 'PlaCe' );
    public final void place() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:150:8: ( 'PC' | 'PlaCe' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:
            {
            if ( input.LA(1)==39||input.LA(1)==41 ) {
                input.consume();
                state.errorRecovery=false;
            }
            else {
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

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

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



    // $ANTLR start "application"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:152:1: application : 'AP' ;
    public final void application() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:153:2: ( 'AP' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:153:4: 'AP'
            {
            match(input,21,FOLLOW_21_in_application919); 

            }

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

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



    // $ANTLR start "time"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:155:1: time : 'TM' ;
    public final void time() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:155:6: ( 'TM' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:155:8: 'TM'
            {
            match(input,50,FOLLOW_50_in_time928); 

            }

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

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



    // $ANTLR start "date"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:157:1: date : ( 'DT' | 'DaTe' );
    public final void date() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:157:7: ( 'DT' | 'DaTe' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:
            {
            if ( (input.LA(1) >= 30 && input.LA(1) <= 31) ) {
                input.consume();
                state.errorRecovery=false;
            }
            else {
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

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

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



    // $ANTLR start "addBlack"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:159:1: addBlack returns [SGFIdentifier sgfIdent] : 'AB' ;
    public final SGFIdentifier addBlack() throws RecognitionException {
        SGFIdentifier sgfIdent = null;


        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:160:2: ( 'AB' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:160:4: 'AB'
            {
            match(input,20,FOLLOW_20_in_addBlack954); 

            sgfIdent = SGFIdentifier.ADD_BLACK;

            }

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

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



    // $ANTLR start "addWhite"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:163:1: addWhite returns [SGFIdentifier sgfIdent] : 'AW' ;
    public final SGFIdentifier addWhite() throws RecognitionException {
        SGFIdentifier sgfIdent = null;


        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:164:2: ( 'AW' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:164:4: 'AW'
            {
            match(input,22,FOLLOW_22_in_addWhite971); 

            sgfIdent = SGFIdentifier.ADD_WHITE;

            }

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

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



    // $ANTLR start "copyright"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:167:1: copyright : 'CP' ;
    public final void copyright() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:168:2: ( 'CP' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:168:4: 'CP'
            {
            match(input,29,FOLLOW_29_in_copyright983); 

            }

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

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



    // $ANTLR start "username"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:170:1: username : 'US' ;
    public final void username() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:170:9: ( 'US' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:170:11: 'US'
            {
            match(input,51,FOLLOW_51_in_username990); 

            }

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

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



    // $ANTLR start "comment"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:172:1: comment : 'C' ;
    public final void comment() throws RecognitionException {
        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:172:9: ( 'C' )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:172:11: 'C'
            {
            match(input,27,FOLLOW_27_in_comment998); 

            }

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

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


    public static class strValue_return extends ParserRuleReturnScope {
    };


    // $ANTLR start "strValue"
    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:174:1: strValue : ( STRVALUE )+ ;
    public final SGFParser.strValue_return strValue() throws RecognitionException {
        SGFParser.strValue_return retval = new SGFParser.strValue_return();
        retval.start = input.LT(1);


        try {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:175:2: ( ( STRVALUE )+ )
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:175:4: ( STRVALUE )+
            {
            // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:175:4: ( STRVALUE )+
            int cnt17=0;
            loop17:
            do {
                int alt17=2;
                int LA17_0 = input.LA(1);

                if ( (LA17_0==STRVALUE) ) {
                    alt17=1;
                }


                switch (alt17) {
            	case 1 :
            	    // C:\\Users\\Woody\\Documents\\antlr\\SGF.g:175:5: STRVALUE
            	    {
            	    match(input,STRVALUE,FOLLOW_STRVALUE_in_strValue1009); 

            	    }
            	    break;

            	default :
            	    if ( cnt17 >= 1 ) break loop17;
                        EarlyExitException eee =
                            new EarlyExitException(17, input);
                        throw eee;
                }
                cnt17++;
            } while (true);


            }

            retval.stop = input.LT(-1);


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

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

    // Delegated rules


 

    public static final BitSet FOLLOW_gameTree_in_collection36 = new BitSet(new long[]{0x0000000000000202L});
    public static final BitSet FOLLOW_LPAREN_in_gameTree61 = new BitSet(new long[]{0x0000000000008000L});
    public static final BitSet FOLLOW_sequence_in_gameTree63 = new BitSet(new long[]{0x0000000000004200L});
    public static final BitSet FOLLOW_gameTree_in_gameTree67 = new BitSet(new long[]{0x0000000000004200L});
    public static final BitSet FOLLOW_RPAREN_in_gameTree72 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_node_in_sequence94 = new BitSet(new long[]{0x0000000000008002L});
    public static final BitSet FOLLOW_SEMICOLON_in_node115 = new BitSet(new long[]{0x03FFFFFFFFF00002L});
    public static final BitSet FOLLOW_property_in_node118 = new BitSet(new long[]{0x03FFFFFFFFF00002L});
    public static final BitSet FOLLOW_numIdent_in_property140 = new BitSet(new long[]{0x0000000000000080L});
    public static final BitSet FOLLOW_LBRACKET_in_property146 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_numValue_in_property148 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_RBRACKET_in_property150 = new BitSet(new long[]{0x0000000000000082L});
    public static final BitSet FOLLOW_playerIdent_in_property164 = new BitSet(new long[]{0x0000000000000080L});
    public static final BitSet FOLLOW_LBRACKET_in_property170 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_RBRACKET_in_property172 = new BitSet(new long[]{0x0000000000000082L});
    public static final BitSet FOLLOW_playerIdent_in_property182 = new BitSet(new long[]{0x0000000000000080L});
    public static final BitSet FOLLOW_LBRACKET_in_property188 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_coordValue_in_property190 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_RBRACKET_in_property192 = new BitSet(new long[]{0x0000000000000082L});
    public static final BitSet FOLLOW_strIdent_in_property206 = new BitSet(new long[]{0x0000000000000080L});
    public static final BitSet FOLLOW_LBRACKET_in_property212 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_RBRACKET_in_property214 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_strIdent_in_property223 = new BitSet(new long[]{0x0000000000000080L});
    public static final BitSet FOLLOW_LBRACKET_in_property229 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_strValue_in_property231 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_RBRACKET_in_property233 = new BitSet(new long[]{0x0000000000000082L});
    public static final BitSet FOLLOW_result_in_property245 = new BitSet(new long[]{0x0000000000000080L});
    public static final BitSet FOLLOW_LBRACKET_in_property251 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_strValue_in_property253 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_RBRACKET_in_property255 = new BitSet(new long[]{0x0000000000000082L});
    public static final BitSet FOLLOW_komi_in_property267 = new BitSet(new long[]{0x0000000000000080L});
    public static final BitSet FOLLOW_LBRACKET_in_property273 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_realValue_in_property275 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_RBRACKET_in_property277 = new BitSet(new long[]{0x0000000000000082L});
    public static final BitSet FOLLOW_coordIdent_in_property287 = new BitSet(new long[]{0x0000000000000080L});
    public static final BitSet FOLLOW_LBRACKET_in_property292 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_coordValue_in_property294 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_RBRACKET_in_property296 = new BitSet(new long[]{0x0000000000000082L});
    public static final BitSet FOLLOW_strIdent_in_playerIdent318 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_strIdent_in_playerIdent327 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_strIdent_in_playerIdent336 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_strIdent_in_playerIdent345 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_charEnc_in_strIdent362 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_source_in_strIdent374 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_blackCountry_in_strIdent386 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_whiteCountry_in_strIdent398 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_event_in_strIdent404 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_playerBlack_in_strIdent410 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_playerWhite_in_strIdent416 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_blackRank_in_strIdent422 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_whiteRank_in_strIdent428 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_rules_in_strIdent434 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_place_in_strIdent440 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_application_in_strIdent454 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_copyright_in_strIdent467 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_username_in_strIdent479 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_date_in_strIdent491 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_26_in_strIdent504 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_57_in_strIdent517 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_23_in_strIdent530 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_54_in_strIdent543 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_view_in_strIdent556 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_comment_in_strIdent570 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_addBlack_in_coordIdent616 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_addWhite_in_coordIdent624 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_fileFormat_in_numIdent641 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_game_in_numIdent647 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_size_in_numIdent653 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_time_in_numIdent659 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_STRVALUE_in_numValue675 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_komi_in_realIdent688 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_STRVALUE_in_realValue698 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_STRVALUE_in_coordValue713 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_34_in_fileFormat727 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_28_in_charEnc775 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_47_in_source783 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_24_in_blackCountry793 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_55_in_whiteCountry804 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_25_in_blackRank850 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_56_in_whiteRank861 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_37_in_komi871 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_46_in_rules897 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_21_in_application919 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_50_in_time928 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_20_in_addBlack954 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_22_in_addWhite971 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_29_in_copyright983 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_51_in_username990 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_27_in_comment998 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_STRVALUE_in_strValue1009 = new BitSet(new long[]{0x0000000000040002L});

}