// $ANTLR 3.4 /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g 2016-09-13 11:30:03

 /*
    Ulysses OO-Action System Parser

    Copyright Graz University of Technology 2009
    Copyright AIT Austrian Institute of Technology 2013, 2016
    Version 1.09
 */
 package org.momut.ooas.parser;

 import org.momut.ooas.ast.expressions.*;
 import org.momut.ooas.ast.statements.*;
 import org.momut.ooas.ast.identifiers.*;
 import org.momut.ooas.ast.types.*;
 import org.momut.ooas.ast.types.FunctionType.FunctionTypeEnum;


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

@SuppressWarnings({"all", "warnings", "unchecked"})
public class ooaParser extends ooaCustomParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "FLOAT_OR_INT_OR_RANGE", "LINE_COMMENT", "T_ABORT", "T_ABS", "T_ACTIONS", "T_AND", "T_ASSIGNMENT", "T_AUTOCONS", "T_BAR", "T_BIIMPLIES", "T_BOOL", "T_BREAK", "T_CARD", "T_CBRL", "T_CBRR", "T_CHAR", "T_COLON", "T_COMMA", "T_COMMENT", "T_CONC", "T_CONSTS", "T_CTRL", "T_DCONC", "T_DERIV", "T_DIFF", "T_DIGIT", "T_DINTER", "T_DIV", "T_DO", "T_DOM", "T_DOMRESBY", "T_DOMRESTO", "T_DUNION", "T_ELEMS", "T_ELSE", "T_END", "T_EQUAL", "T_EXISTS", "T_FALSE", "T_FLOAT", "T_FLOATNUMBER", "T_FOLDLR", "T_FOLDRL", "T_FORALL", "T_GREATER", "T_GREATEREQUAL", "T_HEAD", "T_IDENTIFIER", "T_IDIV", "T_IF", "T_IMPLIES", "T_IN", "T_INDS", "T_INFTY", "T_INT", "T_INTER", "T_INTNUMBER", "T_KILL", "T_LEN", "T_LESS", "T_LESSEQUAL", "T_LETTER", "T_LIST", "T_LPAREN", "T_LSQPAREN", "T_MAP", "T_MAPS", "T_MERGE", "T_METHODS", "T_MINUS", "T_MOD", "T_MUNION", "T_NEW", "T_NIL", "T_NONDET", "T_NOT", "T_NOTEQUAL", "T_OBS", "T_OD", "T_OF", "T_OR", "T_POINT", "T_POW", "T_PRIMED", "T_PRIO", "T_PROD", "T_RANGETO", "T_REQUIRES", "T_RNG", "T_RNGRESBY", "T_RNGRESTO", "T_RPAREN", "T_RSQPAREN", "T_SELF", "T_SEMICOLON", "T_SEQMOD_MAPOVERRIDE", "T_SET", "T_SKIP", "T_STATIC", "T_STRINGLITERAL", "T_SUBSET", "T_SUM", "T_SYSTEM", "T_TAIL", "T_THEN", "T_TO", "T_TRUE", "T_TYPES", "T_UNION", "T_VAR", "T_WITH", "T_WS", "'&'", "'::'", "']|'", "'as'", "'begin'", "'|['"
    };

    public static final int EOF=-1;
    public static final int T__116=116;
    public static final int T__117=117;
    public static final int T__118=118;
    public static final int T__119=119;
    public static final int T__120=120;
    public static final int T__121=121;
    public static final int FLOAT_OR_INT_OR_RANGE=4;
    public static final int LINE_COMMENT=5;
    public static final int T_ABORT=6;
    public static final int T_ABS=7;
    public static final int T_ACTIONS=8;
    public static final int T_AND=9;
    public static final int T_ASSIGNMENT=10;
    public static final int T_AUTOCONS=11;
    public static final int T_BAR=12;
    public static final int T_BIIMPLIES=13;
    public static final int T_BOOL=14;
    public static final int T_BREAK=15;
    public static final int T_CARD=16;
    public static final int T_CBRL=17;
    public static final int T_CBRR=18;
    public static final int T_CHAR=19;
    public static final int T_COLON=20;
    public static final int T_COMMA=21;
    public static final int T_COMMENT=22;
    public static final int T_CONC=23;
    public static final int T_CONSTS=24;
    public static final int T_CTRL=25;
    public static final int T_DCONC=26;
    public static final int T_DERIV=27;
    public static final int T_DIFF=28;
    public static final int T_DIGIT=29;
    public static final int T_DINTER=30;
    public static final int T_DIV=31;
    public static final int T_DO=32;
    public static final int T_DOM=33;
    public static final int T_DOMRESBY=34;
    public static final int T_DOMRESTO=35;
    public static final int T_DUNION=36;
    public static final int T_ELEMS=37;
    public static final int T_ELSE=38;
    public static final int T_END=39;
    public static final int T_EQUAL=40;
    public static final int T_EXISTS=41;
    public static final int T_FALSE=42;
    public static final int T_FLOAT=43;
    public static final int T_FLOATNUMBER=44;
    public static final int T_FOLDLR=45;
    public static final int T_FOLDRL=46;
    public static final int T_FORALL=47;
    public static final int T_GREATER=48;
    public static final int T_GREATEREQUAL=49;
    public static final int T_HEAD=50;
    public static final int T_IDENTIFIER=51;
    public static final int T_IDIV=52;
    public static final int T_IF=53;
    public static final int T_IMPLIES=54;
    public static final int T_IN=55;
    public static final int T_INDS=56;
    public static final int T_INFTY=57;
    public static final int T_INT=58;
    public static final int T_INTER=59;
    public static final int T_INTNUMBER=60;
    public static final int T_KILL=61;
    public static final int T_LEN=62;
    public static final int T_LESS=63;
    public static final int T_LESSEQUAL=64;
    public static final int T_LETTER=65;
    public static final int T_LIST=66;
    public static final int T_LPAREN=67;
    public static final int T_LSQPAREN=68;
    public static final int T_MAP=69;
    public static final int T_MAPS=70;
    public static final int T_MERGE=71;
    public static final int T_METHODS=72;
    public static final int T_MINUS=73;
    public static final int T_MOD=74;
    public static final int T_MUNION=75;
    public static final int T_NEW=76;
    public static final int T_NIL=77;
    public static final int T_NONDET=78;
    public static final int T_NOT=79;
    public static final int T_NOTEQUAL=80;
    public static final int T_OBS=81;
    public static final int T_OD=82;
    public static final int T_OF=83;
    public static final int T_OR=84;
    public static final int T_POINT=85;
    public static final int T_POW=86;
    public static final int T_PRIMED=87;
    public static final int T_PRIO=88;
    public static final int T_PROD=89;
    public static final int T_RANGETO=90;
    public static final int T_REQUIRES=91;
    public static final int T_RNG=92;
    public static final int T_RNGRESBY=93;
    public static final int T_RNGRESTO=94;
    public static final int T_RPAREN=95;
    public static final int T_RSQPAREN=96;
    public static final int T_SELF=97;
    public static final int T_SEMICOLON=98;
    public static final int T_SEQMOD_MAPOVERRIDE=99;
    public static final int T_SET=100;
    public static final int T_SKIP=101;
    public static final int T_STATIC=102;
    public static final int T_STRINGLITERAL=103;
    public static final int T_SUBSET=104;
    public static final int T_SUM=105;
    public static final int T_SYSTEM=106;
    public static final int T_TAIL=107;
    public static final int T_THEN=108;
    public static final int T_TO=109;
    public static final int T_TRUE=110;
    public static final int T_TYPES=111;
    public static final int T_UNION=112;
    public static final int T_VAR=113;
    public static final int T_WITH=114;
    public static final int T_WS=115;

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

    // delegators


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

    @Override
	public String[] getTokenNames() { return ooaParser.tokenNames; }
    @Override
	public String getGrammarFileName() { return "/home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g"; }



    // $ANTLR start "ooActionSystems"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:158:1: ooActionSystems : ( T_CONSTS namedConstList )? T_TYPES namedTypeList T_SYSTEM comp= asTypeComposition[null] ;
    public final void ooActionSystems() {
        IdentifierList comp =null;


        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:159:2: ( ( T_CONSTS namedConstList )? T_TYPES namedTypeList T_SYSTEM comp= asTypeComposition[null] )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:159:4: ( T_CONSTS namedConstList )? T_TYPES namedTypeList T_SYSTEM comp= asTypeComposition[null]
            {
            initializeTopLevelParserState();

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:161:11: ( T_CONSTS namedConstList )?
            int alt1=2;
            final int LA1_0 = input.LA(1);

            if ( (LA1_0==T_CONSTS) ) {
                alt1=1;
            }
            switch (alt1) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:161:12: T_CONSTS namedConstList
                    {
                    match(input,T_CONSTS,FOLLOW_T_CONSTS_in_ooActionSystems74);

                    pushFollow(FOLLOW_namedConstList_in_ooActionSystems76);
                    namedConstList();

                    state._fsp--;


                    }
                    break;

            }


            match(input,T_TYPES,FOLLOW_T_TYPES_in_ooActionSystems86);

            pushFollow(FOLLOW_namedTypeList_in_ooActionSystems94);
            namedTypeList();

            state._fsp--;


            match(input,T_SYSTEM,FOLLOW_T_SYSTEM_in_ooActionSystems99);

            pushFollow(FOLLOW_asTypeComposition_in_ooActionSystems106);
            comp=asTypeComposition(null);

            state._fsp--;


            fixUpRun(comp);

            }

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

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



    // $ANTLR start "namedConstList"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:176:1: namedConstList : namedConst ( T_SEMICOLON namedConst )* ;
    public final void namedConstList() throws RecognitionException {
        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:177:2: ( namedConst ( T_SEMICOLON namedConst )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:177:4: namedConst ( T_SEMICOLON namedConst )*
            {
            pushFollow(FOLLOW_namedConst_in_namedConstList129);
            namedConst();

            state._fsp--;


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:177:15: ( T_SEMICOLON namedConst )*
            loop2:
            do {
                int alt2=2;
                final int LA2_0 = input.LA(1);

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


                switch (alt2) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:177:16: T_SEMICOLON namedConst
            	    {
            	    match(input,T_SEMICOLON,FOLLOW_T_SEMICOLON_in_namedConstList132);

            	    pushFollow(FOLLOW_namedConst_in_namedConstList134);
            	    namedConst();

            	    state._fsp--;


            	    }
            	    break;

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


            }

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

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



    // $ANTLR start "namedConst"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:180:1: namedConst : aName= T_IDENTIFIER T_EQUAL anExpr= expression ;
    public final void namedConst() throws RecognitionException {
        Token aName=null;
        Expression anExpr =null;


        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:181:2: (aName= T_IDENTIFIER T_EQUAL anExpr= expression )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:181:4: aName= T_IDENTIFIER T_EQUAL anExpr= expression
            {
            aName=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_namedConst150);

            match(input,T_EQUAL,FOLLOW_T_EQUAL_in_namedConst154);

            pushFollow(FOLLOW_expression_in_namedConst160);
            anExpr=expression();

            state._fsp--;


            addNamedConst(aName,anExpr);

            }

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

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



    // $ANTLR start "namedTypeList"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:191:1: namedTypeList : namedType ( T_SEMICOLON namedType )* ;
    public final void namedTypeList() throws RecognitionException {
        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:192:2: ( namedType ( T_SEMICOLON namedType )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:192:4: namedType ( T_SEMICOLON namedType )*
            {
            pushFollow(FOLLOW_namedType_in_namedTypeList180);
            namedType();

            state._fsp--;


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:192:14: ( T_SEMICOLON namedType )*
            loop3:
            do {
                int alt3=2;
                final int LA3_0 = input.LA(1);

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


                switch (alt3) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:192:15: T_SEMICOLON namedType
            	    {
            	    match(input,T_SEMICOLON,FOLLOW_T_SEMICOLON_in_namedTypeList183);

            	    pushFollow(FOLLOW_namedType_in_namedTypeList185);
            	    namedType();

            	    state._fsp--;


            	    }
            	    break;

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


            }

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

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



    // $ANTLR start "namedType"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:195:1: namedType : aName= T_IDENTIFIER T_EQUAL (aType= complexType |anOoaType= ooActionSystem ) ;
    public final void namedType() throws RecognitionException {
        Token aName=null;
        Type aType =null;

        OoActionSystemType anOoaType =null;


        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:196:2: (aName= T_IDENTIFIER T_EQUAL (aType= complexType |anOoaType= ooActionSystem ) )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:196:4: aName= T_IDENTIFIER T_EQUAL (aType= complexType |anOoaType= ooActionSystem )
            {
            aName=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_namedType201);

            match(input,T_EQUAL,FOLLOW_T_EQUAL_in_namedType206);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:198:3: (aType= complexType |anOoaType= ooActionSystem )
            int alt4=2;
            final int LA4_0 = input.LA(1);

            if ( (LA4_0==T_BOOL||LA4_0==T_CBRL||LA4_0==T_CHAR||LA4_0==T_FLOAT||LA4_0==T_IDENTIFIER||LA4_0==T_INT||(LA4_0 >= T_LIST && LA4_0 <= T_MAP)) ) {
                alt4=1;
            }
            else if ( (LA4_0==T_AUTOCONS||LA4_0==T_SYSTEM) ) {
                alt4=2;
            }
            else {
                final NoViableAltException nvae =
                    new NoViableAltException("", 4, 0, input);

                throw nvae;

            }
            switch (alt4) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:199:4: aType= complexType
                    {
                    pushFollow(FOLLOW_complexType_in_namedType218);
                    aType=complexType();

                    state._fsp--;


                    createNamedType(aName,aType);

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:200:5: anOoaType= ooActionSystem
                    {
                    pushFollow(FOLLOW_ooActionSystem_in_namedType230);
                    anOoaType=ooActionSystem();

                    state._fsp--;


                    createNamedType(aName,anOoaType);

                    }
                    break;

            }


            }

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

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



    // $ANTLR start "asTypeComposition"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:206:1: asTypeComposition[IdentifierList top] returns [IdentifierList prioList] : asTypeCompositionParallel[prioList] ( T_PRIO asTypeCompositionParallel[prioList] )* ;
    public final IdentifierList asTypeComposition(IdentifierList top) throws RecognitionException {
        IdentifierList prioList = null;


        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:208:2: ( asTypeCompositionParallel[prioList] ( T_PRIO asTypeCompositionParallel[prioList] )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:208:6: asTypeCompositionParallel[prioList] ( T_PRIO asTypeCompositionParallel[prioList] )*
            {
            prioList = new PrioIdentifierList(top);

            pushFollow(FOLLOW_asTypeCompositionParallel_in_asTypeComposition266);
            asTypeCompositionParallel(prioList);

            state._fsp--;


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:209:40: ( T_PRIO asTypeCompositionParallel[prioList] )*
            loop5:
            do {
                int alt5=2;
                final int LA5_0 = input.LA(1);

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


                switch (alt5) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:209:41: T_PRIO asTypeCompositionParallel[prioList]
            	    {
            	    match(input,T_PRIO,FOLLOW_T_PRIO_in_asTypeComposition271);

            	    pushFollow(FOLLOW_asTypeCompositionParallel_in_asTypeComposition273);
            	    asTypeCompositionParallel(prioList);

            	    state._fsp--;


            	    }
            	    break;

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


            }

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

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



    // $ANTLR start "asTypeCompositionParallel"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:212:1: asTypeCompositionParallel[IdentifierList top] : asTypeCompositionSequential[parList] ( T_NONDET asTypeCompositionSequential[parList] )* ;
    public final void asTypeCompositionParallel(IdentifierList top) throws RecognitionException {
        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:213:2: ( asTypeCompositionSequential[parList] ( T_NONDET asTypeCompositionSequential[parList] )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:213:6: asTypeCompositionSequential[parList] ( T_NONDET asTypeCompositionSequential[parList] )*
            {
            final IdentifierList parList = new NondetIdentifierList(top);

            pushFollow(FOLLOW_asTypeCompositionSequential_in_asTypeCompositionParallel296);
            asTypeCompositionSequential(parList);

            state._fsp--;


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:214:40: ( T_NONDET asTypeCompositionSequential[parList] )*
            loop6:
            do {
                int alt6=2;
                final int LA6_0 = input.LA(1);

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


                switch (alt6) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:214:41: T_NONDET asTypeCompositionSequential[parList]
            	    {
            	    match(input,T_NONDET,FOLLOW_T_NONDET_in_asTypeCompositionParallel300);

            	    pushFollow(FOLLOW_asTypeCompositionSequential_in_asTypeCompositionParallel302);
            	    asTypeCompositionSequential(parList);

            	    state._fsp--;


            	    }
            	    break;

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


            }

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

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



    // $ANTLR start "asTypeCompositionSequential"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:217:1: asTypeCompositionSequential[IdentifierList top] : asTypeCompositionBlockParen[seqList] ;
    public final void asTypeCompositionSequential(IdentifierList top) throws RecognitionException {
        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:218:2: ( asTypeCompositionBlockParen[seqList] )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:218:6: asTypeCompositionBlockParen[seqList]
            {
            final IdentifierList seqList = new SeqIdentifierList(top);

            pushFollow(FOLLOW_asTypeCompositionBlockParen_in_asTypeCompositionSequential324);
            asTypeCompositionBlockParen(seqList);

            state._fsp--;


            }

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

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



    // $ANTLR start "asTypeCompositionBlockParen"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:222:1: asTypeCompositionBlockParen[IdentifierList top] : ( T_LPAREN asTypeComposition[top] T_RPAREN |aName= T_IDENTIFIER );
    public final void asTypeCompositionBlockParen(IdentifierList top) throws RecognitionException {
        Token aName=null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:223:2: ( T_LPAREN asTypeComposition[top] T_RPAREN |aName= T_IDENTIFIER )
            int alt7=2;
            final int LA7_0 = input.LA(1);

            if ( (LA7_0==T_LPAREN) ) {
                alt7=1;
            }
            else if ( (LA7_0==T_IDENTIFIER) ) {
                alt7=2;
            }
            else {
                final NoViableAltException nvae =
                    new NoViableAltException("", 7, 0, input);

                throw nvae;

            }
            switch (alt7) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:223:4: T_LPAREN asTypeComposition[top] T_RPAREN
                    {
                    match(input,T_LPAREN,FOLLOW_T_LPAREN_in_asTypeCompositionBlockParen339);

                    pushFollow(FOLLOW_asTypeComposition_in_asTypeCompositionBlockParen341);
                    asTypeComposition(top);

                    state._fsp--;


                    match(input,T_RPAREN,FOLLOW_T_RPAREN_in_asTypeCompositionBlockParen344);

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:224:4: aName= T_IDENTIFIER
                    {
                    aName=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_asTypeCompositionBlockParen351);

                    addToIdentifierList(top,aName);

                    }
                    break;

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

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



    // $ANTLR start "complexType"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:232:1: complexType returns [Type aTypeSymbol] : ( T_LIST T_LSQPAREN numOfElements= ( T_INTNUMBER | T_IDENTIFIER ) T_RSQPAREN T_OF innertype= complexType | T_LSQPAREN alistelem= T_IDENTIFIER ( T_COMMA otherlistelem= T_IDENTIFIER )* T_RSQPAREN | T_MAP ( T_LSQPAREN numOfElements= ( T_INTNUMBER | T_IDENTIFIER ) T_RSQPAREN )? mapfromtype= simpleType T_TO maptotype= complexType | T_LPAREN aType= complexType ( T_COMMA anotherType= complexType )* T_RPAREN |r= simpleType );
    public final Type complexType() throws RecognitionException {
        Type aTypeSymbol = null;


        Token numOfElements=null;
        Token alistelem=null;
        Token otherlistelem=null;
        Type innertype =null;

        Type mapfromtype =null;

        Type maptotype =null;

        Type aType =null;

        Type anotherType =null;

        Type r =null;



        		aTypeSymbol = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:237:2: ( T_LIST T_LSQPAREN numOfElements= ( T_INTNUMBER | T_IDENTIFIER ) T_RSQPAREN T_OF innertype= complexType | T_LSQPAREN alistelem= T_IDENTIFIER ( T_COMMA otherlistelem= T_IDENTIFIER )* T_RSQPAREN | T_MAP ( T_LSQPAREN numOfElements= ( T_INTNUMBER | T_IDENTIFIER ) T_RSQPAREN )? mapfromtype= simpleType T_TO maptotype= complexType | T_LPAREN aType= complexType ( T_COMMA anotherType= complexType )* T_RPAREN |r= simpleType )
            int alt11=5;
            switch ( input.LA(1) ) {
            case T_LIST:
                {
                alt11=1;
                }
                break;
            case T_LSQPAREN:
                {
                alt11=2;
                }
                break;
            case T_MAP:
                {
                alt11=3;
                }
                break;
            case T_LPAREN:
                {
                alt11=4;
                }
                break;
            case T_BOOL:
            case T_CBRL:
            case T_CHAR:
            case T_FLOAT:
            case T_IDENTIFIER:
            case T_INT:
                {
                alt11=5;
                }
                break;
            default:
                final NoViableAltException nvae =
                    new NoViableAltException("", 11, 0, input);

                throw nvae;

            }

            switch (alt11) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:237:4: T_LIST T_LSQPAREN numOfElements= ( T_INTNUMBER | T_IDENTIFIER ) T_RSQPAREN T_OF innertype= complexType
                    {
                    match(input,T_LIST,FOLLOW_T_LIST_in_complexType382);

                    match(input,T_LSQPAREN,FOLLOW_T_LSQPAREN_in_complexType385);

                    numOfElements=input.LT(1);

                    if ( input.LA(1)==T_IDENTIFIER||input.LA(1)==T_INTNUMBER ) {
                        input.consume();
                        state.errorRecovery=false;
                    }
                    else {
                        final MismatchedSetException mse = new MismatchedSetException(null,input);
                        throw mse;
                    }


                    match(input,T_RSQPAREN,FOLLOW_T_RSQPAREN_in_complexType395);

                    match(input,T_OF,FOLLOW_T_OF_in_complexType397);

                    pushFollow(FOLLOW_complexType_in_complexType402);
                    innertype=complexType();

                    state._fsp--;


                    aTypeSymbol = createListType(numOfElements,innertype);

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:241:4: T_LSQPAREN alistelem= T_IDENTIFIER ( T_COMMA otherlistelem= T_IDENTIFIER )* T_RSQPAREN
                    {
                    match(input,T_LSQPAREN,FOLLOW_T_LSQPAREN_in_complexType417);

                    alistelem=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_complexType421);

                    aTypeSymbol = createListEnumType(alistelem);

                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:242:4: ( T_COMMA otherlistelem= T_IDENTIFIER )*
                    loop8:
                    do {
                        int alt8=2;
                        final int LA8_0 = input.LA(1);

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


                        switch (alt8) {
                    	case 1 :
                    	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:242:5: T_COMMA otherlistelem= T_IDENTIFIER
                    	    {
                    	    match(input,T_COMMA,FOLLOW_T_COMMA_in_complexType430);

                    	    otherlistelem=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_complexType434);

                    	    addToListEnumType(aTypeSymbol,otherlistelem);

                    	    }
                    	    break;

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


                    match(input,T_RSQPAREN,FOLLOW_T_RSQPAREN_in_complexType440);

                    }
                    break;
                case 3 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:245:4: T_MAP ( T_LSQPAREN numOfElements= ( T_INTNUMBER | T_IDENTIFIER ) T_RSQPAREN )? mapfromtype= simpleType T_TO maptotype= complexType
                    {
                    match(input,T_MAP,FOLLOW_T_MAP_in_complexType450);

                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:245:12: ( T_LSQPAREN numOfElements= ( T_INTNUMBER | T_IDENTIFIER ) T_RSQPAREN )?
                    int alt9=2;
                    final int LA9_0 = input.LA(1);

                    if ( (LA9_0==T_LSQPAREN) ) {
                        alt9=1;
                    }
                    switch (alt9) {
                        case 1 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:245:13: T_LSQPAREN numOfElements= ( T_INTNUMBER | T_IDENTIFIER ) T_RSQPAREN
                            {
                            match(input,T_LSQPAREN,FOLLOW_T_LSQPAREN_in_complexType455);

                            numOfElements=input.LT(1);

                            if ( input.LA(1)==T_IDENTIFIER||input.LA(1)==T_INTNUMBER ) {
                                input.consume();
                                state.errorRecovery=false;
                            }
                            else {
                                final MismatchedSetException mse = new MismatchedSetException(null,input);
                                throw mse;
                            }


                            match(input,T_RSQPAREN,FOLLOW_T_RSQPAREN_in_complexType465);

                            }
                            break;

                    }


                    pushFollow(FOLLOW_simpleType_in_complexType471);
                    mapfromtype=simpleType();

                    state._fsp--;


                    match(input,T_TO,FOLLOW_T_TO_in_complexType473);

                    pushFollow(FOLLOW_complexType_in_complexType477);
                    maptotype=complexType();

                    state._fsp--;


                    aTypeSymbol = createMapType(numOfElements,mapfromtype,maptotype);

                    }
                    break;
                case 4 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:248:5: T_LPAREN aType= complexType ( T_COMMA anotherType= complexType )* T_RPAREN
                    {
                    match(input,T_LPAREN,FOLLOW_T_LPAREN_in_complexType492);

                    pushFollow(FOLLOW_complexType_in_complexType496);
                    aType=complexType();

                    state._fsp--;


                    aTypeSymbol = createTupleType(aType);

                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:249:4: ( T_COMMA anotherType= complexType )*
                    loop10:
                    do {
                        int alt10=2;
                        final int LA10_0 = input.LA(1);

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


                        switch (alt10) {
                    	case 1 :
                    	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:249:5: T_COMMA anotherType= complexType
                    	    {
                    	    match(input,T_COMMA,FOLLOW_T_COMMA_in_complexType505);

                    	    pushFollow(FOLLOW_complexType_in_complexType509);
                    	    anotherType=complexType();

                    	    state._fsp--;


                    	    addToTupleType(aTypeSymbol,anotherType);

                    	    }
                    	    break;

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


                    match(input,T_RPAREN,FOLLOW_T_RPAREN_in_complexType516);

                    }
                    break;
                case 5 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:252:4: r= simpleType
                    {
                    pushFollow(FOLLOW_simpleType_in_complexType529);
                    r=simpleType();

                    state._fsp--;


                    aTypeSymbol = r;

                    }
                    break;

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

        finally {
        	// do for sure before leaving
            fixupComplexType(aTypeSymbol);
        }
        return aTypeSymbol;
    }
    // $ANTLR end "complexType"



    // $ANTLR start "simpleType"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:258:1: simpleType returns [Type aTypeSymbol] : ( T_BOOL | T_INT T_LSQPAREN rangeLow= ( T_INTNUMBER | T_INFTY | T_IDENTIFIER ) T_RANGETO rangeHigh= ( T_INTNUMBER | T_INFTY | T_IDENTIFIER ) T_RSQPAREN | T_FLOAT T_LSQPAREN rangeLow= ( T_FLOATNUMBER | T_INFTY | T_IDENTIFIER ) T_RANGETO rangeHigh= ( T_FLOATNUMBER | T_INFTY | T_IDENTIFIER ) T_RSQPAREN | T_CHAR | T_CBRL aRangeValue= T_IDENTIFIER ( T_EQUAL optVal= T_INTNUMBER )? ( T_COMMA otherRangeValue= T_IDENTIFIER ( T_EQUAL otherOptVal= T_INTNUMBER )? )* T_CBRR |aType= T_IDENTIFIER );
    public final Type simpleType() throws RecognitionException {
        Type aTypeSymbol = null;


        Token rangeLow=null;
        Token rangeHigh=null;
        Token aRangeValue=null;
        Token optVal=null;
        Token otherRangeValue=null;
        Token otherOptVal=null;
        Token aType=null;


        		aTypeSymbol = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:263:2: ( T_BOOL | T_INT T_LSQPAREN rangeLow= ( T_INTNUMBER | T_INFTY | T_IDENTIFIER ) T_RANGETO rangeHigh= ( T_INTNUMBER | T_INFTY | T_IDENTIFIER ) T_RSQPAREN | T_FLOAT T_LSQPAREN rangeLow= ( T_FLOATNUMBER | T_INFTY | T_IDENTIFIER ) T_RANGETO rangeHigh= ( T_FLOATNUMBER | T_INFTY | T_IDENTIFIER ) T_RSQPAREN | T_CHAR | T_CBRL aRangeValue= T_IDENTIFIER ( T_EQUAL optVal= T_INTNUMBER )? ( T_COMMA otherRangeValue= T_IDENTIFIER ( T_EQUAL otherOptVal= T_INTNUMBER )? )* T_CBRR |aType= T_IDENTIFIER )
            int alt15=6;
            switch ( input.LA(1) ) {
            case T_BOOL:
                {
                alt15=1;
                }
                break;
            case T_INT:
                {
                alt15=2;
                }
                break;
            case T_FLOAT:
                {
                alt15=3;
                }
                break;
            case T_CHAR:
                {
                alt15=4;
                }
                break;
            case T_CBRL:
                {
                alt15=5;
                }
                break;
            case T_IDENTIFIER:
                {
                alt15=6;
                }
                break;
            default:
                final NoViableAltException nvae =
                    new NoViableAltException("", 15, 0, input);

                throw nvae;

            }

            switch (alt15) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:263:4: T_BOOL
                    {
                    match(input,T_BOOL,FOLLOW_T_BOOL_in_simpleType562);

                    aTypeSymbol = createBoolType();

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:266:4: T_INT T_LSQPAREN rangeLow= ( T_INTNUMBER | T_INFTY | T_IDENTIFIER ) T_RANGETO rangeHigh= ( T_INTNUMBER | T_INFTY | T_IDENTIFIER ) T_RSQPAREN
                    {
                    match(input,T_INT,FOLLOW_T_INT_in_simpleType575);

                    match(input,T_LSQPAREN,FOLLOW_T_LSQPAREN_in_simpleType577);

                    rangeLow=input.LT(1);

                    if ( input.LA(1)==T_IDENTIFIER||input.LA(1)==T_INFTY||input.LA(1)==T_INTNUMBER ) {
                        input.consume();
                        state.errorRecovery=false;
                    }
                    else {
                        final MismatchedSetException mse = new MismatchedSetException(null,input);
                        throw mse;
                    }


                    match(input,T_RANGETO,FOLLOW_T_RANGETO_in_simpleType589);

                    rangeHigh=input.LT(1);

                    if ( input.LA(1)==T_IDENTIFIER||input.LA(1)==T_INFTY||input.LA(1)==T_INTNUMBER ) {
                        input.consume();
                        state.errorRecovery=false;
                    }
                    else {
                        final MismatchedSetException mse = new MismatchedSetException(null,input);
                        throw mse;
                    }


                    match(input,T_RSQPAREN,FOLLOW_T_RSQPAREN_in_simpleType601);

                    aTypeSymbol = createIntType(rangeLow,rangeHigh);

                    }
                    break;
                case 3 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:270:4: T_FLOAT T_LSQPAREN rangeLow= ( T_FLOATNUMBER | T_INFTY | T_IDENTIFIER ) T_RANGETO rangeHigh= ( T_FLOATNUMBER | T_INFTY | T_IDENTIFIER ) T_RSQPAREN
                    {
                    match(input,T_FLOAT,FOLLOW_T_FLOAT_in_simpleType620);

                    match(input,T_LSQPAREN,FOLLOW_T_LSQPAREN_in_simpleType623);

                    rangeLow=input.LT(1);

                    if ( input.LA(1)==T_FLOATNUMBER||input.LA(1)==T_IDENTIFIER||input.LA(1)==T_INFTY ) {
                        input.consume();
                        state.errorRecovery=false;
                    }
                    else {
                        final MismatchedSetException mse = new MismatchedSetException(null,input);
                        throw mse;
                    }


                    match(input,T_RANGETO,FOLLOW_T_RANGETO_in_simpleType635);

                    rangeHigh=input.LT(1);

                    if ( input.LA(1)==T_FLOATNUMBER||input.LA(1)==T_IDENTIFIER||input.LA(1)==T_INFTY ) {
                        input.consume();
                        state.errorRecovery=false;
                    }
                    else {
                        final MismatchedSetException mse = new MismatchedSetException(null,input);
                        throw mse;
                    }


                    match(input,T_RSQPAREN,FOLLOW_T_RSQPAREN_in_simpleType647);

                    aTypeSymbol = createFloatType(rangeLow,rangeHigh);

                    }
                    break;
                case 4 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:274:4: T_CHAR
                    {
                    match(input,T_CHAR,FOLLOW_T_CHAR_in_simpleType665);

                    aTypeSymbol = createCharType();

                    }
                    break;
                case 5 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:278:4: T_CBRL aRangeValue= T_IDENTIFIER ( T_EQUAL optVal= T_INTNUMBER )? ( T_COMMA otherRangeValue= T_IDENTIFIER ( T_EQUAL otherOptVal= T_INTNUMBER )? )* T_CBRR
                    {
                    match(input,T_CBRL,FOLLOW_T_CBRL_in_simpleType681);

                    aRangeValue=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_simpleType685);

                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:278:36: ( T_EQUAL optVal= T_INTNUMBER )?
                    int alt12=2;
                    final int LA12_0 = input.LA(1);

                    if ( (LA12_0==T_EQUAL) ) {
                        alt12=1;
                    }
                    switch (alt12) {
                        case 1 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:278:37: T_EQUAL optVal= T_INTNUMBER
                            {
                            match(input,T_EQUAL,FOLLOW_T_EQUAL_in_simpleType688);

                            optVal=(Token)match(input,T_INTNUMBER,FOLLOW_T_INTNUMBER_in_simpleType692);

                            }
                            break;

                    }


                    aTypeSymbol = createEnumType(aRangeValue, optVal);

                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:279:4: ( T_COMMA otherRangeValue= T_IDENTIFIER ( T_EQUAL otherOptVal= T_INTNUMBER )? )*
                    loop14:
                    do {
                        int alt14=2;
                        final int LA14_0 = input.LA(1);

                        if ( (LA14_0==T_COMMA) ) {
                            alt14=1;
                        }


                        switch (alt14) {
                    	case 1 :
                    	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:279:5: T_COMMA otherRangeValue= T_IDENTIFIER ( T_EQUAL otherOptVal= T_INTNUMBER )?
                    	    {
                    	    match(input,T_COMMA,FOLLOW_T_COMMA_in_simpleType703);

                    	    otherRangeValue=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_simpleType707);

                    	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:279:42: ( T_EQUAL otherOptVal= T_INTNUMBER )?
                    	    int alt13=2;
                    	    final int LA13_0 = input.LA(1);

                    	    if ( (LA13_0==T_EQUAL) ) {
                    	        alt13=1;
                    	    }
                    	    switch (alt13) {
                    	        case 1 :
                    	            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:279:43: T_EQUAL otherOptVal= T_INTNUMBER
                    	            {
                    	            match(input,T_EQUAL,FOLLOW_T_EQUAL_in_simpleType710);

                    	            otherOptVal=(Token)match(input,T_INTNUMBER,FOLLOW_T_INTNUMBER_in_simpleType714);

                    	            }
                    	            break;

                    	    }


                    	    addToEnumType(aTypeSymbol,otherRangeValue,otherOptVal); otherOptVal=null;

                    	    }
                    	    break;

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


                    match(input,T_CBRR,FOLLOW_T_CBRR_in_simpleType722);

                    }
                    break;
                case 6 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:281:4: aType= T_IDENTIFIER
                    {
                    aType=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_simpleType733);

                    aTypeSymbol = getNamedType(aType);

                    }
                    break;

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

        finally {
        	// do for sure before leaving
            fixupSimpleType(aTypeSymbol);
        }
        return aTypeSymbol;
    }
    // $ANTLR end "simpleType"



    // $ANTLR start "ooActionSystem"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:291:1: ooActionSystem returns [OoActionSystemType aTypeSymbol] : ( T_AUTOCONS )? T_SYSTEM ( T_LPAREN refinesSystemName= T_IDENTIFIER T_RPAREN )? '|[' ( T_VAR attrList )? ( T_METHODS methodList )? ( T_ACTIONS namedActionList )? ( T_DO (bl= actionBlock[null] )? T_OD )? ']|' ;
    public final OoActionSystemType ooActionSystem() throws RecognitionException {
        OoActionSystemType aTypeSymbol = null;


        Token refinesSystemName=null;
        Block bl =null;



        		boolean autoCons = false;
        		aTypeSymbol = null;
        		refinesSystemName = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:298:2: ( ( T_AUTOCONS )? T_SYSTEM ( T_LPAREN refinesSystemName= T_IDENTIFIER T_RPAREN )? '|[' ( T_VAR attrList )? ( T_METHODS methodList )? ( T_ACTIONS namedActionList )? ( T_DO (bl= actionBlock[null] )? T_OD )? ']|' )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:298:9: ( T_AUTOCONS )? T_SYSTEM ( T_LPAREN refinesSystemName= T_IDENTIFIER T_RPAREN )? '|[' ( T_VAR attrList )? ( T_METHODS methodList )? ( T_ACTIONS namedActionList )? ( T_DO (bl= actionBlock[null] )? T_OD )? ']|'
            {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:298:9: ( T_AUTOCONS )?
            int alt16=2;
            final int LA16_0 = input.LA(1);

            if ( (LA16_0==T_AUTOCONS) ) {
                alt16=1;
            }
            switch (alt16) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:298:10: T_AUTOCONS
                    {
                    match(input,T_AUTOCONS,FOLLOW_T_AUTOCONS_in_ooActionSystem776);

                    autoCons = true;

                    }
                    break;

            }


            match(input,T_SYSTEM,FOLLOW_T_SYSTEM_in_ooActionSystem785);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:299:12: ( T_LPAREN refinesSystemName= T_IDENTIFIER T_RPAREN )?
            int alt17=2;
            final int LA17_0 = input.LA(1);

            if ( (LA17_0==T_LPAREN) ) {
                alt17=1;
            }
            switch (alt17) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:299:13: T_LPAREN refinesSystemName= T_IDENTIFIER T_RPAREN
                    {
                    match(input,T_LPAREN,FOLLOW_T_LPAREN_in_ooActionSystem788);

                    refinesSystemName=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_ooActionSystem792);

                    match(input,T_RPAREN,FOLLOW_T_RPAREN_in_ooActionSystem794);

                    }
                    break;

            }


            aTypeSymbol = createOoaType(refinesSystemName,autoCons);

            match(input,121,FOLLOW_121_in_ooActionSystem807);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:302:4: ( T_VAR attrList )?
            int alt18=2;
            final int LA18_0 = input.LA(1);

            if ( (LA18_0==T_VAR) ) {
                alt18=1;
            }
            switch (alt18) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:302:5: T_VAR attrList
                    {
                    match(input,T_VAR,FOLLOW_T_VAR_in_ooActionSystem813);

                    pushFollow(FOLLOW_attrList_in_ooActionSystem815);
                    attrList();

                    state._fsp--;


                    }
                    break;

            }


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:303:4: ( T_METHODS methodList )?
            int alt19=2;
            final int LA19_0 = input.LA(1);

            if ( (LA19_0==T_METHODS) ) {
                alt19=1;
            }
            switch (alt19) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:303:5: T_METHODS methodList
                    {
                    match(input,T_METHODS,FOLLOW_T_METHODS_in_ooActionSystem823);

                    pushFollow(FOLLOW_methodList_in_ooActionSystem825);
                    methodList();

                    state._fsp--;


                    }
                    break;

            }


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:304:4: ( T_ACTIONS namedActionList )?
            int alt20=2;
            final int LA20_0 = input.LA(1);

            if ( (LA20_0==T_ACTIONS) ) {
                alt20=1;
            }
            switch (alt20) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:304:5: T_ACTIONS namedActionList
                    {
                    match(input,T_ACTIONS,FOLLOW_T_ACTIONS_in_ooActionSystem833);

                    pushFollow(FOLLOW_namedActionList_in_ooActionSystem835);
                    namedActionList();

                    state._fsp--;


                    }
                    break;

            }


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:305:4: ( T_DO (bl= actionBlock[null] )? T_OD )?
            int alt22=2;
            final int LA22_0 = input.LA(1);

            if ( (LA22_0==T_DO) ) {
                alt22=1;
            }
            switch (alt22) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:305:5: T_DO (bl= actionBlock[null] )? T_OD
                    {
                    match(input,T_DO,FOLLOW_T_DO_in_ooActionSystem843);

                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:305:10: (bl= actionBlock[null] )?
                    int alt21=2;
                    final int LA21_0 = input.LA(1);

                    if ( (LA21_0==T_IDENTIFIER||LA21_0==T_LPAREN||LA21_0==T_REQUIRES||LA21_0==T_SKIP||LA21_0==T_VAR) ) {
                        alt21=1;
                    }
                    switch (alt21) {
                        case 1 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:305:11: bl= actionBlock[null]
                            {
                            pushFollow(FOLLOW_actionBlock_in_ooActionSystem848);
                            bl=actionBlock(null);

                            state._fsp--;


                            addActionBlock(aTypeSymbol,bl);

                            }
                            break;

                    }


                    match(input,T_OD,FOLLOW_T_OD_in_ooActionSystem855);

                    }
                    break;

            }


            match(input,118,FOLLOW_118_in_ooActionSystem861);

            }

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

        finally {
        	// do for sure before leaving
            fixupOoaType(aTypeSymbol);
        }
        return aTypeSymbol;
    }
    // $ANTLR end "ooActionSystem"



    // $ANTLR start "attrList"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:317:1: attrList : attr ( T_SEMICOLON attr )* ;
    public final void attrList() throws RecognitionException {
        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:318:2: ( attr ( T_SEMICOLON attr )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:318:4: attr ( T_SEMICOLON attr )*
            {
            BeginParsingAttributes();

            pushFollow(FOLLOW_attr_in_attrList892);
            attr();

            state._fsp--;


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:319:9: ( T_SEMICOLON attr )*
            loop23:
            do {
                int alt23=2;
                final int LA23_0 = input.LA(1);

                if ( (LA23_0==T_SEMICOLON) ) {
                    alt23=1;
                }


                switch (alt23) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:319:10: T_SEMICOLON attr
            	    {
            	    match(input,T_SEMICOLON,FOLLOW_T_SEMICOLON_in_attrList895);

            	    pushFollow(FOLLOW_attr_in_attrList897);
            	    attr();

            	    state._fsp--;


            	    }
            	    break;

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


            }

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

        finally {
        	// do for sure before leaving

            		EndParsingAttributes();

        }
        return ;
    }
    // $ANTLR end "attrList"



    // $ANTLR start "attr"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:325:1: attr : ( T_STATIC )? ( T_OBS | T_CTRL )? varname= T_IDENTIFIER T_COLON aType= complexType ( T_EQUAL anExpr= expression )? ;
    public final void attr() throws RecognitionException {
        Token varname=null;
        Type aType =null;

        Expression anExpr =null;



        		boolean isStatic = false;
        		boolean isCtr = false;
        		boolean isObs = false;


        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:332:2: ( ( T_STATIC )? ( T_OBS | T_CTRL )? varname= T_IDENTIFIER T_COLON aType= complexType ( T_EQUAL anExpr= expression )? )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:332:5: ( T_STATIC )? ( T_OBS | T_CTRL )? varname= T_IDENTIFIER T_COLON aType= complexType ( T_EQUAL anExpr= expression )?
            {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:332:5: ( T_STATIC )?
            int alt24=2;
            final int LA24_0 = input.LA(1);

            if ( (LA24_0==T_STATIC) ) {
                alt24=1;
            }
            switch (alt24) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:332:6: T_STATIC
                    {
                    match(input,T_STATIC,FOLLOW_T_STATIC_in_attr922);

                    isStatic = true;

                    }
                    break;

            }


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:332:36: ( T_OBS | T_CTRL )?
            int alt25=3;
            final int LA25_0 = input.LA(1);

            if ( (LA25_0==T_OBS) ) {
                alt25=1;
            }
            else if ( (LA25_0==T_CTRL) ) {
                alt25=2;
            }
            switch (alt25) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:332:37: T_OBS
                    {
                    match(input,T_OBS,FOLLOW_T_OBS_in_attr929);

                    isObs = true;

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:332:61: T_CTRL
                    {
                    match(input,T_CTRL,FOLLOW_T_CTRL_in_attr935);

                    isCtr = true;

                    }
                    break;

            }


            varname=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_attr946);

            match(input,T_COLON,FOLLOW_T_COLON_in_attr949);

            pushFollow(FOLLOW_complexType_in_attr953);
            aType=complexType();

            state._fsp--;


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:333:51: ( T_EQUAL anExpr= expression )?
            int alt26=2;
            final int LA26_0 = input.LA(1);

            if ( (LA26_0==T_EQUAL) ) {
                alt26=1;
            }
            switch (alt26) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:333:52: T_EQUAL anExpr= expression
                    {
                    match(input,T_EQUAL,FOLLOW_T_EQUAL_in_attr956);

                    pushFollow(FOLLOW_expression_in_attr960);
                    anExpr=expression();

                    state._fsp--;


                    }
                    break;

            }


            createAttribute(varname, isStatic, isObs, isCtr, aType, anExpr);

            }

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

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



    // $ANTLR start "methodList"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:340:1: methodList : method ( T_SEMICOLON method )* ;
    public final void methodList() throws RecognitionException {
        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:341:2: ( method ( T_SEMICOLON method )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:341:5: method ( T_SEMICOLON method )*
            {
            pushFollow(FOLLOW_method_in_methodList982);
            method();

            state._fsp--;


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:341:12: ( T_SEMICOLON method )*
            loop27:
            do {
                int alt27=2;
                final int LA27_0 = input.LA(1);

                if ( (LA27_0==T_SEMICOLON) ) {
                    alt27=1;
                }


                switch (alt27) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:341:13: T_SEMICOLON method
            	    {
            	    match(input,T_SEMICOLON,FOLLOW_T_SEMICOLON_in_methodList985);

            	    pushFollow(FOLLOW_method_in_methodList987);
            	    method();

            	    state._fsp--;


            	    }
            	    break;

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


            }

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

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



    // $ANTLR start "method"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:344:1: method : mname= T_IDENTIFIER ( T_LPAREN methodParameterList[newMethod] T_RPAREN )? ( T_COLON rt= complexType )? T_EQUAL ( T_VAR localActionVars[newMethod] 'begin' )? statements= actionBody[null] T_END ;
    public final void method() throws RecognitionException {
        Token mname=null;
        Type rt =null;

        Block statements =null;



        		FunctionIdentifier newMethod = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:348:2: (mname= T_IDENTIFIER ( T_LPAREN methodParameterList[newMethod] T_RPAREN )? ( T_COLON rt= complexType )? T_EQUAL ( T_VAR localActionVars[newMethod] 'begin' )? statements= actionBody[null] T_END )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:348:4: mname= T_IDENTIFIER ( T_LPAREN methodParameterList[newMethod] T_RPAREN )? ( T_COLON rt= complexType )? T_EQUAL ( T_VAR localActionVars[newMethod] 'begin' )? statements= actionBody[null] T_END
            {
            mname=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_method1009);

            newMethod = createMethodSymbol(mname);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:349:3: ( T_LPAREN methodParameterList[newMethod] T_RPAREN )?
            int alt28=2;
            final int LA28_0 = input.LA(1);

            if ( (LA28_0==T_LPAREN) ) {
                alt28=1;
            }
            switch (alt28) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:349:4: T_LPAREN methodParameterList[newMethod] T_RPAREN
                    {
                    match(input,T_LPAREN,FOLLOW_T_LPAREN_in_method1017);

                    pushFollow(FOLLOW_methodParameterList_in_method1019);
                    methodParameterList(newMethod);

                    state._fsp--;


                    match(input,T_RPAREN,FOLLOW_T_RPAREN_in_method1023);

                    }
                    break;

            }


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:350:3: ( T_COLON rt= complexType )?
            int alt29=2;
            final int LA29_0 = input.LA(1);

            if ( (LA29_0==T_COLON) ) {
                alt29=1;
            }
            switch (alt29) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:350:4: T_COLON rt= complexType
                    {
                    match(input,T_COLON,FOLLOW_T_COLON_in_method1031);

                    pushFollow(FOLLOW_complexType_in_method1035);
                    rt=complexType();

                    state._fsp--;


                    setMethodReturnType(newMethod,rt);

                    }
                    break;

            }


            match(input,T_EQUAL,FOLLOW_T_EQUAL_in_method1045);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:352:4: ( T_VAR localActionVars[newMethod] 'begin' )?
            int alt30=2;
            final int LA30_0 = input.LA(1);

            if ( (LA30_0==T_VAR) ) {
                final int LA30_1 = input.LA(2);

                if ( (LA30_1==T_IDENTIFIER) ) {
                    alt30=1;
                }
            }
            switch (alt30) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:352:6: T_VAR localActionVars[newMethod] 'begin'
                    {
                    match(input,T_VAR,FOLLOW_T_VAR_in_method1053);

                    pushFollow(FOLLOW_localActionVars_in_method1055);
                    localActionVars(newMethod);

                    state._fsp--;


                    match(input,120,FOLLOW_120_in_method1058);

                    }
                    break;

            }


            pushFollow(FOLLOW_actionBody_in_method1333);
            statements=actionBody(null);

            state._fsp--;


            addMethodBody(newMethod,statements);

            match(input,T_END,FOLLOW_T_END_in_method1341);

            }

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

        finally {
        	// do for sure before leaving
            popResolveStack(newMethod);
        }
        return ;
    }
    // $ANTLR end "method"



    // $ANTLR start "methodParameterList"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:361:1: methodParameterList[FunctionIdentifier newMethod] : paramName= T_IDENTIFIER T_COLON atype= complexType ( T_COMMA otherparam= T_IDENTIFIER T_COLON othertype= complexType )* ;
    public final void methodParameterList(FunctionIdentifier newMethod) throws RecognitionException {
        Token paramName=null;
        Token otherparam=null;
        Type atype =null;

        Type othertype =null;


        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:362:2: (paramName= T_IDENTIFIER T_COLON atype= complexType ( T_COMMA otherparam= T_IDENTIFIER T_COLON othertype= complexType )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:362:5: paramName= T_IDENTIFIER T_COLON atype= complexType ( T_COMMA otherparam= T_IDENTIFIER T_COLON othertype= complexType )*
            {
            paramName=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_methodParameterList1365);

            match(input,T_COLON,FOLLOW_T_COLON_in_methodParameterList1367);

            pushFollow(FOLLOW_complexType_in_methodParameterList1371);
            atype=complexType();

            state._fsp--;


            addMethodParameter(newMethod,paramName,atype);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:363:4: ( T_COMMA otherparam= T_IDENTIFIER T_COLON othertype= complexType )*
            loop31:
            do {
                int alt31=2;
                final int LA31_0 = input.LA(1);

                if ( (LA31_0==T_COMMA) ) {
                    alt31=1;
                }


                switch (alt31) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:363:5: T_COMMA otherparam= T_IDENTIFIER T_COLON othertype= complexType
            	    {
            	    match(input,T_COMMA,FOLLOW_T_COMMA_in_methodParameterList1379);

            	    otherparam=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_methodParameterList1383);

            	    match(input,T_COLON,FOLLOW_T_COLON_in_methodParameterList1385);

            	    pushFollow(FOLLOW_complexType_in_methodParameterList1389);
            	    othertype=complexType();

            	    state._fsp--;


            	    addMethodParameter(newMethod,otherparam,othertype);

            	    }
            	    break;

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


            }

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

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



    // $ANTLR start "namedActionList"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:372:1: namedActionList : namedAction ( T_SEMICOLON namedAction )* ;
    public final void namedActionList() throws RecognitionException {
        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:373:2: ( namedAction ( T_SEMICOLON namedAction )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:373:4: namedAction ( T_SEMICOLON namedAction )*
            {
            pushFollow(FOLLOW_namedAction_in_namedActionList1416);
            namedAction();

            state._fsp--;


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:373:16: ( T_SEMICOLON namedAction )*
            loop32:
            do {
                int alt32=2;
                final int LA32_0 = input.LA(1);

                if ( (LA32_0==T_SEMICOLON) ) {
                    alt32=1;
                }


                switch (alt32) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:373:17: T_SEMICOLON namedAction
            	    {
            	    match(input,T_SEMICOLON,FOLLOW_T_SEMICOLON_in_namedActionList1419);

            	    pushFollow(FOLLOW_namedAction_in_namedActionList1421);
            	    namedAction();

            	    state._fsp--;


            	    }
            	    break;

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


            }

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

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



    // $ANTLR start "namedAction"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:376:1: namedAction : ( T_CTRL | T_OBS |) actionname= T_IDENTIFIER ( T_LPAREN ( methodParameterList[newAction] )? T_RPAREN )? T_EQUAL ( T_VAR localActionVars[newAction] )? body= discreteActionBody ;
    public final void namedAction() throws RecognitionException {
        Token actionname=null;
        GuardedCommand body =null;



        		FunctionTypeEnum actionType;
        		FunctionIdentifier newAction = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:381:2: ( ( T_CTRL | T_OBS |) actionname= T_IDENTIFIER ( T_LPAREN ( methodParameterList[newAction] )? T_RPAREN )? T_EQUAL ( T_VAR localActionVars[newAction] )? body= discreteActionBody )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:381:4: ( T_CTRL | T_OBS |) actionname= T_IDENTIFIER ( T_LPAREN ( methodParameterList[newAction] )? T_RPAREN )? T_EQUAL ( T_VAR localActionVars[newAction] )? body= discreteActionBody
            {
            actionType = FunctionTypeEnum.Internal;

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:382:3: ( T_CTRL | T_OBS |)
            int alt33=3;
            switch ( input.LA(1) ) {
            case T_CTRL:
                {
                alt33=1;
                }
                break;
            case T_OBS:
                {
                alt33=2;
                }
                break;
            case T_IDENTIFIER:
                {
                alt33=3;
                }
                break;
            default:
                final NoViableAltException nvae =
                    new NoViableAltException("", 33, 0, input);

                throw nvae;

            }

            switch (alt33) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:382:4: T_CTRL
                    {
                    match(input,T_CTRL,FOLLOW_T_CTRL_in_namedAction1446);

                    actionType = FunctionTypeEnum.Controllable;

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:382:58: T_OBS
                    {
                    match(input,T_OBS,FOLLOW_T_OBS_in_namedAction1451);

                    actionType = FunctionTypeEnum.Observable;

                    }
                    break;
                case 3 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:382:109:
                    {
                    }
                    break;

            }


            actionname=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_namedAction1463);

            newAction = createNamedAction(actionname,actionType);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:384:3: ( T_LPAREN ( methodParameterList[newAction] )? T_RPAREN )?
            int alt35=2;
            final int LA35_0 = input.LA(1);

            if ( (LA35_0==T_LPAREN) ) {
                alt35=1;
            }
            switch (alt35) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:384:4: T_LPAREN ( methodParameterList[newAction] )? T_RPAREN
                    {
                    match(input,T_LPAREN,FOLLOW_T_LPAREN_in_namedAction1471);

                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:384:13: ( methodParameterList[newAction] )?
                    int alt34=2;
                    final int LA34_0 = input.LA(1);

                    if ( (LA34_0==T_IDENTIFIER) ) {
                        alt34=1;
                    }
                    switch (alt34) {
                        case 1 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:384:13: methodParameterList[newAction]
                            {
                            pushFollow(FOLLOW_methodParameterList_in_namedAction1473);
                            methodParameterList(newAction);

                            state._fsp--;


                            }
                            break;

                    }


                    match(input,T_RPAREN,FOLLOW_T_RPAREN_in_namedAction1478);

                    }
                    break;

            }


            match(input,T_EQUAL,FOLLOW_T_EQUAL_in_namedAction1485);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:386:3: ( T_VAR localActionVars[newAction] )?
            int alt36=2;
            final int LA36_0 = input.LA(1);

            if ( (LA36_0==T_VAR) ) {
                alt36=1;
            }
            switch (alt36) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:386:4: T_VAR localActionVars[newAction]
                    {
                    match(input,T_VAR,FOLLOW_T_VAR_in_namedAction1491);

                    pushFollow(FOLLOW_localActionVars_in_namedAction1493);
                    localActionVars(newAction);

                    state._fsp--;


                    }
                    break;

            }


            pushFollow(FOLLOW_discreteActionBody_in_namedAction1504);
            body=discreteActionBody();

            state._fsp--;


            addActionBody(newAction,body);

            }

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

        finally {
        	// do for sure before leaving
            popResolveStack(newAction);
        }
        return ;
    }
    // $ANTLR end "namedAction"



    // $ANTLR start "localActionVars"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:394:1: localActionVars[FunctionIdentifier newMethod] : id1= T_IDENTIFIER T_COLON t1= complexType ( T_SEMICOLON id2= T_IDENTIFIER T_COLON t2= complexType )* ;
    public final void localActionVars(FunctionIdentifier newMethod) throws RecognitionException {
        Token id1=null;
        Token id2=null;
        Type t1 =null;

        Type t2 =null;


        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:395:2: (id1= T_IDENTIFIER T_COLON t1= complexType ( T_SEMICOLON id2= T_IDENTIFIER T_COLON t2= complexType )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:396:3: id1= T_IDENTIFIER T_COLON t1= complexType ( T_SEMICOLON id2= T_IDENTIFIER T_COLON t2= complexType )*
            {
            id1=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_localActionVars1536);

            match(input,T_COLON,FOLLOW_T_COLON_in_localActionVars1538);

            pushFollow(FOLLOW_complexType_in_localActionVars1542);
            t1=complexType();

            state._fsp--;


            addLocalVariableToNamedAction(newMethod,id1,t1);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:397:4: ( T_SEMICOLON id2= T_IDENTIFIER T_COLON t2= complexType )*
            loop37:
            do {
                int alt37=2;
                final int LA37_0 = input.LA(1);

                if ( (LA37_0==T_SEMICOLON) ) {
                    alt37=1;
                }


                switch (alt37) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:397:5: T_SEMICOLON id2= T_IDENTIFIER T_COLON t2= complexType
            	    {
            	    match(input,T_SEMICOLON,FOLLOW_T_SEMICOLON_in_localActionVars1551);

            	    id2=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_localActionVars1555);

            	    match(input,T_COLON,FOLLOW_T_COLON_in_localActionVars1557);

            	    pushFollow(FOLLOW_complexType_in_localActionVars1561);
            	    t2=complexType();

            	    state._fsp--;


            	    addLocalVariableToNamedAction(newMethod,id2,t2);

            	    }
            	    break;

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


            }

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

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



    // $ANTLR start "anonymousAction"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:403:1: anonymousAction returns [GuardedCommand result] : b= discreteActionBody ;
    public final GuardedCommand anonymousAction() throws RecognitionException {
        GuardedCommand result = null;


        GuardedCommand b =null;


        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:405:2: (b= discreteActionBody )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:406:3: b= discreteActionBody
            {
            pushFollow(FOLLOW_discreteActionBody_in_anonymousAction1594);
            b=discreteActionBody();

            state._fsp--;


            result = b;

            }

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

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



    // $ANTLR start "discreteActionBody"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:409:1: discreteActionBody returns [GuardedCommand result] : T_REQUIRES expr= expression T_COLON bdy= actionBody[null] T_END ;
    public final GuardedCommand discreteActionBody() throws RecognitionException {
        GuardedCommand result = null;


        Expression expr =null;

        Block bdy =null;



        		result = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:414:2: ( T_REQUIRES expr= expression T_COLON bdy= actionBody[null] T_END )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:415:3: T_REQUIRES expr= expression T_COLON bdy= actionBody[null] T_END
            {
            result = createGuardedCommandStatement(); pushBlockToResolveStack(result);

            match(input,T_REQUIRES,FOLLOW_T_REQUIRES_in_discreteActionBody1625);

            pushFollow(FOLLOW_expression_in_discreteActionBody1629);
            expr=expression();

            state._fsp--;


            match(input,T_COLON,FOLLOW_T_COLON_in_discreteActionBody1631);

            pushFollow(FOLLOW_actionBody_in_discreteActionBody1638);
            bdy=actionBody(null);

            state._fsp--;


            match(input,T_END,FOLLOW_T_END_in_discreteActionBody1643);

            addExprAndBlockToGuardedCommand(result,expr,bdy);

            }

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

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



    // $ANTLR start "actionBlock"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:429:1: actionBlock[Block top] returns [Block prioList] : actionBlockParallel[prioList] ( T_PRIO actionBlockParallel[prioList] )* ;
    public final Block actionBlock(Block top) throws RecognitionException {
        Block prioList = null;


        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:431:2: ( actionBlockParallel[prioList] ( T_PRIO actionBlockParallel[prioList] )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:431:6: actionBlockParallel[prioList] ( T_PRIO actionBlockParallel[prioList] )*
            {
            prioList = createPrioBlock(top);  pushBlockToResolveStack(prioList);

            pushFollow(FOLLOW_actionBlockParallel_in_actionBlock1686);
            actionBlockParallel(prioList);

            state._fsp--;


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:432:34: ( T_PRIO actionBlockParallel[prioList] )*
            loop38:
            do {
                int alt38=2;
                final int LA38_0 = input.LA(1);

                if ( (LA38_0==T_PRIO) ) {
                    alt38=1;
                }


                switch (alt38) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:432:35: T_PRIO actionBlockParallel[prioList]
            	    {
            	    match(input,T_PRIO,FOLLOW_T_PRIO_in_actionBlock1690);

            	    pushFollow(FOLLOW_actionBlockParallel_in_actionBlock1692);
            	    actionBlockParallel(prioList);

            	    state._fsp--;


            	    }
            	    break;

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


            }

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

        finally {
        	// do for sure before leaving
            popBlockFromResolveStack(prioList);
        }
        return prioList;
    }
    // $ANTLR end "actionBlock"



    // $ANTLR start "actionBlockParallel"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:437:1: actionBlockParallel[Block top] : actionBlockSequential[parList] ( T_NONDET actionBlockSequential[parList] )* ;
    public final void actionBlockParallel(Block top) throws RecognitionException {
        	final Block parList = createNondetBlock(top);
        		 	pushBlockToResolveStack(parList);

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:441:2: ( actionBlockSequential[parList] ( T_NONDET actionBlockSequential[parList] )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:441:4: actionBlockSequential[parList] ( T_NONDET actionBlockSequential[parList] )*
            {
            pushFollow(FOLLOW_actionBlockSequential_in_actionBlockParallel1725);
            actionBlockSequential(parList);

            state._fsp--;


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:441:35: ( T_NONDET actionBlockSequential[parList] )*
            loop39:
            do {
                int alt39=2;
                final int LA39_0 = input.LA(1);

                if ( (LA39_0==T_NONDET) ) {
                    alt39=1;
                }


                switch (alt39) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:441:36: T_NONDET actionBlockSequential[parList]
            	    {
            	    match(input,T_NONDET,FOLLOW_T_NONDET_in_actionBlockParallel1729);

            	    pushFollow(FOLLOW_actionBlockSequential_in_actionBlockParallel1731);
            	    actionBlockSequential(parList);

            	    state._fsp--;


            	    }
            	    break;

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


            }

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

        finally {
        	// do for sure before leaving
            popBlockFromResolveStack(parList);
        }
        return ;
    }
    // $ANTLR end "actionBlockParallel"



    // $ANTLR start "actionBlockSequential"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:446:1: actionBlockSequential[Block top] : ( T_VAR syms= blockvarlist[seqList] ( '&' sexpr= expression )? T_COLON )? actionBlockParen[seqList] ( T_SEMICOLON actionBlockParen[seqList] )* ;
    public final void actionBlockSequential(Block top) throws RecognitionException {
        Expression sexpr =null;



        			final Block seqList = createSeqBlock(top);
        			pushBlockToResolveStack(seqList);

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:451:2: ( ( T_VAR syms= blockvarlist[seqList] ( '&' sexpr= expression )? T_COLON )? actionBlockParen[seqList] ( T_SEMICOLON actionBlockParen[seqList] )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:451:5: ( T_VAR syms= blockvarlist[seqList] ( '&' sexpr= expression )? T_COLON )? actionBlockParen[seqList] ( T_SEMICOLON actionBlockParen[seqList] )*
            {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:451:5: ( T_VAR syms= blockvarlist[seqList] ( '&' sexpr= expression )? T_COLON )?
            int alt41=2;
            final int LA41_0 = input.LA(1);

            if ( (LA41_0==T_VAR) ) {
                alt41=1;
            }
            switch (alt41) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:451:6: T_VAR syms= blockvarlist[seqList] ( '&' sexpr= expression )? T_COLON
                    {
                    match(input,T_VAR,FOLLOW_T_VAR_in_actionBlockSequential1765);

                    pushFollow(FOLLOW_blockvarlist_in_actionBlockSequential1769);
                    blockvarlist(seqList);

                    state._fsp--;


                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:451:39: ( '&' sexpr= expression )?
                    int alt40=2;
                    final int LA40_0 = input.LA(1);

                    if ( (LA40_0==116) ) {
                        alt40=1;
                    }
                    switch (alt40) {
                        case 1 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:451:40: '&' sexpr= expression
                            {
                            match(input,116,FOLLOW_116_in_actionBlockSequential1773);

                            pushFollow(FOLLOW_expression_in_actionBlockSequential1777);
                            sexpr=expression();

                            state._fsp--;


                            addSeqBlockExpression(seqList,sexpr);

                            }
                            break;

                    }


                    match(input,T_COLON,FOLLOW_T_COLON_in_actionBlockSequential1784);

                    }
                    break;

            }


            pushFollow(FOLLOW_actionBlockParen_in_actionBlockSequential1793);
            actionBlockParen(seqList);

            state._fsp--;


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:452:30: ( T_SEMICOLON actionBlockParen[seqList] )*
            loop42:
            do {
                int alt42=2;
                final int LA42_0 = input.LA(1);

                if ( (LA42_0==T_SEMICOLON) ) {
                    alt42=1;
                }


                switch (alt42) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:452:31: T_SEMICOLON actionBlockParen[seqList]
            	    {
            	    match(input,T_SEMICOLON,FOLLOW_T_SEMICOLON_in_actionBlockSequential1797);

            	    pushFollow(FOLLOW_actionBlockParen_in_actionBlockSequential1799);
            	    actionBlockParen(seqList);

            	    state._fsp--;


            	    }
            	    break;

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


            }

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

        finally {
        	// do for sure before leaving
            popBlockFromResolveStack(seqList);
        }
        return ;
    }
    // $ANTLR end "actionBlockSequential"



    // $ANTLR start "actionBlockParen"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:457:1: actionBlockParen[Block top] : ( T_LPAREN actionBlock[top] T_RPAREN | anonymousOrNamedAction[top] );
    public final void actionBlockParen(Block top) throws RecognitionException {
        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:458:2: ( T_LPAREN actionBlock[top] T_RPAREN | anonymousOrNamedAction[top] )
            int alt43=2;
            final int LA43_0 = input.LA(1);

            if ( (LA43_0==T_LPAREN) ) {
                alt43=1;
            }
            else if ( (LA43_0==T_IDENTIFIER||LA43_0==T_REQUIRES||LA43_0==T_SKIP) ) {
                alt43=2;
            }
            else {
                final NoViableAltException nvae =
                    new NoViableAltException("", 43, 0, input);

                throw nvae;

            }
            switch (alt43) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:458:4: T_LPAREN actionBlock[top] T_RPAREN
                    {
                    match(input,T_LPAREN,FOLLOW_T_LPAREN_in_actionBlockParen1823);

                    pushFollow(FOLLOW_actionBlock_in_actionBlockParen1825);
                    actionBlock(top);

                    state._fsp--;


                    match(input,T_RPAREN,FOLLOW_T_RPAREN_in_actionBlockParen1828);

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:459:4: anonymousOrNamedAction[top]
                    {
                    pushFollow(FOLLOW_anonymousOrNamedAction_in_actionBlockParen1833);
                    anonymousOrNamedAction(top);

                    state._fsp--;


                    }
                    break;

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

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



    // $ANTLR start "anonymousOrNamedAction"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:462:1: anonymousOrNamedAction[Block top] : (gcmd= anonymousAction |aname= T_IDENTIFIER ( T_LPAREN m_params= methodCallParams T_RPAREN )? (amap= ( T_FOLDLR | T_FOLDRL ) '(' amapexpr= expression ')' )? | T_SKIP );
    public final void anonymousOrNamedAction(Block top) throws RecognitionException {
        Token aname=null;
        Token amap=null;
        GuardedCommand gcmd =null;

        ArrayList<Expression> m_params =null;

        Expression amapexpr =null;


        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:463:2: (gcmd= anonymousAction |aname= T_IDENTIFIER ( T_LPAREN m_params= methodCallParams T_RPAREN )? (amap= ( T_FOLDLR | T_FOLDRL ) '(' amapexpr= expression ')' )? | T_SKIP )
            int alt46=3;
            switch ( input.LA(1) ) {
            case T_REQUIRES:
                {
                alt46=1;
                }
                break;
            case T_IDENTIFIER:
                {
                alt46=2;
                }
                break;
            case T_SKIP:
                {
                alt46=3;
                }
                break;
            default:
                final NoViableAltException nvae =
                    new NoViableAltException("", 46, 0, input);

                throw nvae;

            }

            switch (alt46) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:463:4: gcmd= anonymousAction
                    {
                    pushFollow(FOLLOW_anonymousAction_in_anonymousOrNamedAction1850);
                    gcmd=anonymousAction();

                    state._fsp--;


                    addToBlockList(top,gcmd);

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:464:4: aname= T_IDENTIFIER ( T_LPAREN m_params= methodCallParams T_RPAREN )? (amap= ( T_FOLDLR | T_FOLDRL ) '(' amapexpr= expression ')' )?
                    {
                    aname=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_anonymousOrNamedAction1859);

                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:465:11: ( T_LPAREN m_params= methodCallParams T_RPAREN )?
                    int alt44=2;
                    final int LA44_0 = input.LA(1);

                    if ( (LA44_0==T_LPAREN) ) {
                        alt44=1;
                    }
                    switch (alt44) {
                        case 1 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:465:12: T_LPAREN m_params= methodCallParams T_RPAREN
                            {
                            match(input,T_LPAREN,FOLLOW_T_LPAREN_in_anonymousOrNamedAction1873);

                            pushFollow(FOLLOW_methodCallParams_in_anonymousOrNamedAction1878);
                            m_params=methodCallParams();

                            state._fsp--;


                            match(input,T_RPAREN,FOLLOW_T_RPAREN_in_anonymousOrNamedAction1880);

                            }
                            break;

                    }


                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:466:11: (amap= ( T_FOLDLR | T_FOLDRL ) '(' amapexpr= expression ')' )?
                    int alt45=2;
                    final int LA45_0 = input.LA(1);

                    if ( ((LA45_0 >= T_FOLDLR && LA45_0 <= T_FOLDRL)) ) {
                        alt45=1;
                    }
                    switch (alt45) {
                        case 1 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:466:12: amap= ( T_FOLDLR | T_FOLDRL ) '(' amapexpr= expression ')'
                            {
                            amap=input.LT(1);

                            if ( (input.LA(1) >= T_FOLDLR && input.LA(1) <= T_FOLDRL) ) {
                                input.consume();
                                state.errorRecovery=false;
                            }
                            else {
                                final MismatchedSetException mse = new MismatchedSetException(null,input);
                                throw mse;
                            }


                            match(input,T_LPAREN,FOLLOW_T_LPAREN_in_anonymousOrNamedAction1904);

                            pushFollow(FOLLOW_expression_in_anonymousOrNamedAction1908);
                            amapexpr=expression();

                            state._fsp--;


                            match(input,T_RPAREN,FOLLOW_T_RPAREN_in_anonymousOrNamedAction1910);

                            }
                            break;

                    }


                    addNamedActionCallToBlockList(top,aname,m_params,amap,amapexpr);

                    }
                    break;
                case 3 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:468:4: T_SKIP
                    {
                    match(input,T_SKIP,FOLLOW_T_SKIP_in_anonymousOrNamedAction1921);

                    addSkipStatementToBlockList(top);

                    }
                    break;

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

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



    // $ANTLR start "blockvarlist"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:472:1: blockvarlist[Block seqList] : blockvar[seqList] ( T_SEMICOLON blockvar[seqList] )* ;
    public final void blockvarlist(Block seqList) throws RecognitionException {
        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:473:2: ( blockvar[seqList] ( T_SEMICOLON blockvar[seqList] )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:473:4: blockvar[seqList] ( T_SEMICOLON blockvar[seqList] )*
            {
            pushFollow(FOLLOW_blockvar_in_blockvarlist1937);
            blockvar(seqList);

            state._fsp--;


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:473:23: ( T_SEMICOLON blockvar[seqList] )*
            loop47:
            do {
                int alt47=2;
                final int LA47_0 = input.LA(1);

                if ( (LA47_0==T_SEMICOLON) ) {
                    alt47=1;
                }


                switch (alt47) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:473:24: T_SEMICOLON blockvar[seqList]
            	    {
            	    match(input,T_SEMICOLON,FOLLOW_T_SEMICOLON_in_blockvarlist1942);

            	    pushFollow(FOLLOW_blockvar_in_blockvarlist1944);
            	    blockvar(seqList);

            	    state._fsp--;


            	    }
            	    break;

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


            }

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

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



    // $ANTLR start "blockvar"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:476:1: blockvar[Block seqList] : varname= T_IDENTIFIER T_COLON aType= complexType ;
    public final void blockvar(Block seqList) throws RecognitionException {
        Token varname=null;
        Type aType =null;


        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:477:2: (varname= T_IDENTIFIER T_COLON aType= complexType )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:477:5: varname= T_IDENTIFIER T_COLON aType= complexType
            {
            varname=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_blockvar1964);

            match(input,T_COLON,FOLLOW_T_COLON_in_blockvar1967);

            pushFollow(FOLLOW_complexType_in_blockvar1971);
            aType=complexType();

            state._fsp--;


            addBlockVariable(seqList,varname,aType);

            }

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

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



    // $ANTLR start "actionBody"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:487:1: actionBody[Block top] returns [Block result] : actionBodyParallel[result] ( T_PRIO actionBodyParallel[result] )* ;
    public final Block actionBody(Block top) throws RecognitionException {
        Block result = null;


        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:489:2: ( actionBodyParallel[result] ( T_PRIO actionBodyParallel[result] )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:489:4: actionBodyParallel[result] ( T_PRIO actionBodyParallel[result] )*
            {
            result = createPrioBlock(top); pushBlockToResolveStack(result);

            pushFollow(FOLLOW_actionBodyParallel_in_actionBody2006);
            actionBodyParallel(result);

            state._fsp--;


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:490:30: ( T_PRIO actionBodyParallel[result] )*
            loop48:
            do {
                int alt48=2;
                final int LA48_0 = input.LA(1);

                if ( (LA48_0==T_PRIO) ) {
                    alt48=1;
                }


                switch (alt48) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:490:31: T_PRIO actionBodyParallel[result]
            	    {
            	    match(input,T_PRIO,FOLLOW_T_PRIO_in_actionBody2010);

            	    pushFollow(FOLLOW_actionBodyParallel_in_actionBody2012);
            	    actionBodyParallel(result);

            	    state._fsp--;


            	    }
            	    break;

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


            }

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

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



    // $ANTLR start "actionBodyParallel"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:495:1: actionBodyParallel[Block top] returns [Block result] : actionBodySequential[result] ( T_NONDET olst= actionBodySequential[result] )* ;
    public final Block actionBodyParallel(Block top) throws RecognitionException {
        Block result = null;


        SeqBlock olst =null;


        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:497:2: ( actionBodySequential[result] ( T_NONDET olst= actionBodySequential[result] )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:497:4: actionBodySequential[result] ( T_NONDET olst= actionBodySequential[result] )*
            {
            result = createNondetBlock(top); pushBlockToResolveStack(result);

            pushFollow(FOLLOW_actionBodySequential_in_actionBodyParallel2046);
            actionBodySequential(result);

            state._fsp--;


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:499:3: ( T_NONDET olst= actionBodySequential[result] )*
            loop49:
            do {
                int alt49=2;
                final int LA49_0 = input.LA(1);

                if ( (LA49_0==T_NONDET) ) {
                    alt49=1;
                }


                switch (alt49) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:499:4: T_NONDET olst= actionBodySequential[result]
            	    {
            	    match(input,T_NONDET,FOLLOW_T_NONDET_in_actionBodyParallel2052);

            	    pushFollow(FOLLOW_actionBodySequential_in_actionBodyParallel2056);
            	    olst=actionBodySequential(result);

            	    state._fsp--;


            	    }
            	    break;

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


            }

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

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



    // $ANTLR start "actionBodySequential"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:506:1: actionBodySequential[Block top] returns [SeqBlock result] : ( T_VAR syms= blockvarlist[result] ( '&' sexpr= expression )? T_COLON )? actionBodyParen[result] ( T_SEMICOLON actionBodyParen[result] )* ;
    public final SeqBlock actionBodySequential(Block top) throws RecognitionException {
        SeqBlock result = null;


        Expression sexpr =null;


        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:508:2: ( ( T_VAR syms= blockvarlist[result] ( '&' sexpr= expression )? T_COLON )? actionBodyParen[result] ( T_SEMICOLON actionBodyParen[result] )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:508:4: ( T_VAR syms= blockvarlist[result] ( '&' sexpr= expression )? T_COLON )? actionBodyParen[result] ( T_SEMICOLON actionBodyParen[result] )*
            {
            result = createSeqBlock(top); pushBlockToResolveStack(result);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:509:3: ( T_VAR syms= blockvarlist[result] ( '&' sexpr= expression )? T_COLON )?
            int alt51=2;
            final int LA51_0 = input.LA(1);

            if ( (LA51_0==T_VAR) ) {
                alt51=1;
            }
            switch (alt51) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:509:4: T_VAR syms= blockvarlist[result] ( '&' sexpr= expression )? T_COLON
                    {
                    match(input,T_VAR,FOLLOW_T_VAR_in_actionBodySequential2092);

                    pushFollow(FOLLOW_blockvarlist_in_actionBodySequential2096);
                    blockvarlist(result);

                    state._fsp--;


                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:509:36: ( '&' sexpr= expression )?
                    int alt50=2;
                    final int LA50_0 = input.LA(1);

                    if ( (LA50_0==116) ) {
                        alt50=1;
                    }
                    switch (alt50) {
                        case 1 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:509:37: '&' sexpr= expression
                            {
                            match(input,116,FOLLOW_116_in_actionBodySequential2100);

                            pushFollow(FOLLOW_expression_in_actionBodySequential2104);
                            sexpr=expression();

                            state._fsp--;


                            addSeqBlockExpression(result,sexpr);

                            }
                            break;

                    }


                    match(input,T_COLON,FOLLOW_T_COLON_in_actionBodySequential2111);

                    }
                    break;

            }


            pushFollow(FOLLOW_actionBodyParen_in_actionBodySequential2119);
            actionBodyParen(result);

            state._fsp--;


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:510:28: ( T_SEMICOLON actionBodyParen[result] )*
            loop52:
            do {
                int alt52=2;
                final int LA52_0 = input.LA(1);

                if ( (LA52_0==T_SEMICOLON) ) {
                    alt52=1;
                }


                switch (alt52) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:510:29: T_SEMICOLON actionBodyParen[result]
            	    {
            	    match(input,T_SEMICOLON,FOLLOW_T_SEMICOLON_in_actionBodySequential2123);

            	    pushFollow(FOLLOW_actionBodyParen_in_actionBodySequential2125);
            	    actionBodyParen(result);

            	    state._fsp--;


            	    }
            	    break;

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


            }

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

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



    // $ANTLR start "actionBodyParen"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:516:1: actionBodyParen[SeqBlock top] : ( T_LPAREN actionBody[top] T_RPAREN |stmt= statement );
    public final void actionBodyParen(SeqBlock top) throws RecognitionException {
        Statement stmt =null;


        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:517:2: ( T_LPAREN actionBody[top] T_RPAREN |stmt= statement )
            int alt53=2;
            final int LA53_0 = input.LA(1);

            if ( (LA53_0==T_LPAREN) ) {
                alt53=1;
            }
            else if ( (LA53_0==T_ABORT||LA53_0==T_BREAK||LA53_0==T_IDENTIFIER||LA53_0==T_KILL||LA53_0==T_REQUIRES||LA53_0==T_SELF||LA53_0==T_SKIP) ) {
                alt53=2;
            }
            else {
                final NoViableAltException nvae =
                    new NoViableAltException("", 53, 0, input);

                throw nvae;

            }
            switch (alt53) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:517:5: T_LPAREN actionBody[top] T_RPAREN
                    {
                    match(input,T_LPAREN,FOLLOW_T_LPAREN_in_actionBodyParen2153);

                    pushFollow(FOLLOW_actionBody_in_actionBodyParen2155);
                    actionBody(top);

                    state._fsp--;


                    match(input,T_RPAREN,FOLLOW_T_RPAREN_in_actionBodyParen2159);

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:518:4: stmt= statement
                    {
                    pushFollow(FOLLOW_statement_in_actionBodyParen2166);
                    stmt=statement();

                    state._fsp--;


                    addToStatementList(top,stmt);

                    }
                    break;

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

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



    // $ANTLR start "statement"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:523:1: statement returns [Statement result] : ( T_ABORT | T_SKIP | T_BREAK | T_KILL T_LPAREN aname= ( T_IDENTIFIER | T_SELF ) T_RPAREN |gc= discreteActionBody |aqname= reference ( T_ASSIGNMENT aexp= expression ( T_WITH ndexp= expression )? | ( T_COMMA malhs= reference )+ T_ASSIGNMENT mexp= expression ( T_COMMA mexp2= expression )+ ( T_WITH ndex2= expression )? |) );
    public final Statement statement() throws RecognitionException {
        Statement result = null;


        Token aname=null;
        GuardedCommand gc =null;

        Expression aqname =null;

        Expression aexp =null;

        Expression ndexp =null;

        Expression malhs =null;

        Expression mexp =null;

        Expression mexp2 =null;

        Expression ndex2 =null;



        		boolean popFromResolveStack = false;
        		result = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:529:2: ( T_ABORT | T_SKIP | T_BREAK | T_KILL T_LPAREN aname= ( T_IDENTIFIER | T_SELF ) T_RPAREN |gc= discreteActionBody |aqname= reference ( T_ASSIGNMENT aexp= expression ( T_WITH ndexp= expression )? | ( T_COMMA malhs= reference )+ T_ASSIGNMENT mexp= expression ( T_COMMA mexp2= expression )+ ( T_WITH ndex2= expression )? |) )
            int alt59=6;
            switch ( input.LA(1) ) {
            case T_ABORT:
                {
                alt59=1;
                }
                break;
            case T_SKIP:
                {
                alt59=2;
                }
                break;
            case T_BREAK:
                {
                alt59=3;
                }
                break;
            case T_KILL:
                {
                alt59=4;
                }
                break;
            case T_REQUIRES:
                {
                alt59=5;
                }
                break;
            case T_IDENTIFIER:
            case T_SELF:
                {
                alt59=6;
                }
                break;
            default:
                final NoViableAltException nvae =
                    new NoViableAltException("", 59, 0, input);

                throw nvae;

            }

            switch (alt59) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:529:4: T_ABORT
                    {
                    match(input,T_ABORT,FOLLOW_T_ABORT_in_statement2194);

                    result = createAbortStatement();

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:530:4: T_SKIP
                    {
                    match(input,T_SKIP,FOLLOW_T_SKIP_in_statement2201);

                    result = createSkipStatement();

                    }
                    break;
                case 3 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:531:4: T_BREAK
                    {
                    match(input,T_BREAK,FOLLOW_T_BREAK_in_statement2208);

                    result = createBreakStatement();

                    }
                    break;
                case 4 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:532:4: T_KILL T_LPAREN aname= ( T_IDENTIFIER | T_SELF ) T_RPAREN
                    {
                    match(input,T_KILL,FOLLOW_T_KILL_in_statement2215);

                    match(input,T_LPAREN,FOLLOW_T_LPAREN_in_statement2217);

                    aname=input.LT(1);

                    if ( input.LA(1)==T_IDENTIFIER||input.LA(1)==T_SELF ) {
                        input.consume();
                        state.errorRecovery=false;
                    }
                    else {
                        final MismatchedSetException mse = new MismatchedSetException(null,input);
                        throw mse;
                    }


                    match(input,T_RPAREN,FOLLOW_T_RPAREN_in_statement2229);

                    result = createKillStatement(aname);

                    }
                    break;
                case 5 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:533:5: gc= discreteActionBody
                    {
                    pushFollow(FOLLOW_discreteActionBody_in_statement2239);
                    gc=discreteActionBody();

                    state._fsp--;


                    result = gc;

                    }
                    break;
                case 6 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:534:4: aqname= reference ( T_ASSIGNMENT aexp= expression ( T_WITH ndexp= expression )? | ( T_COMMA malhs= reference )+ T_ASSIGNMENT mexp= expression ( T_COMMA mexp2= expression )+ ( T_WITH ndex2= expression )? |)
                    {
                    pushFollow(FOLLOW_reference_in_statement2248);
                    aqname=reference();

                    state._fsp--;


                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:535:7: ( T_ASSIGNMENT aexp= expression ( T_WITH ndexp= expression )? | ( T_COMMA malhs= reference )+ T_ASSIGNMENT mexp= expression ( T_COMMA mexp2= expression )+ ( T_WITH ndex2= expression )? |)
                    int alt58=3;
                    switch ( input.LA(1) ) {
                    case T_ASSIGNMENT:
                        {
                        alt58=1;
                        }
                        break;
                    case T_COMMA:
                        {
                        alt58=2;
                        }
                        break;
                    case T_END:
                    case T_NONDET:
                    case T_PRIO:
                    case T_RPAREN:
                    case T_SEMICOLON:
                        {
                        alt58=3;
                        }
                        break;
                    default:
                        final NoViableAltException nvae =
                            new NoViableAltException("", 58, 0, input);

                        throw nvae;

                    }

                    switch (alt58) {
                        case 1 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:536:12: T_ASSIGNMENT aexp= expression ( T_WITH ndexp= expression )?
                            {
                            match(input,T_ASSIGNMENT,FOLLOW_T_ASSIGNMENT_in_statement2276);

                            pushFollow(FOLLOW_expression_in_statement2281);
                            aexp=expression();

                            state._fsp--;


                            result = createSingleAssignmentStatement(aqname,aexp);

                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:537:15: ( T_WITH ndexp= expression )?
                            int alt54=2;
                            final int LA54_0 = input.LA(1);

                            if ( (LA54_0==T_WITH) ) {
                                alt54=1;
                            }
                            switch (alt54) {
                                case 1 :
                                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:537:16: T_WITH ndexp= expression
                                    {
                                    match(input,T_WITH,FOLLOW_T_WITH_in_statement2301);

                                    pushFollow(FOLLOW_expression_in_statement2305);
                                    ndexp=expression();

                                    state._fsp--;


                                    addConstraintToAssignment(result,ndexp);

                                    }
                                    break;

                            }


                            }
                            break;
                        case 2 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:540:8: ( T_COMMA malhs= reference )+ T_ASSIGNMENT mexp= expression ( T_COMMA mexp2= expression )+ ( T_WITH ndex2= expression )?
                            {
                            result = createMultipleAssignmentStatementLHS(aqname);

                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:541:7: ( T_COMMA malhs= reference )+
                            int cnt55=0;
                            loop55:
                            do {
                                int alt55=2;
                                final int LA55_0 = input.LA(1);

                                if ( (LA55_0==T_COMMA) ) {
                                    alt55=1;
                                }


                                switch (alt55) {
                            	case 1 :
                            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:541:8: T_COMMA malhs= reference
                            	    {
                            	    match(input,T_COMMA,FOLLOW_T_COMMA_in_statement2358);

                            	    pushFollow(FOLLOW_reference_in_statement2362);
                            	    malhs=reference();

                            	    state._fsp--;


                            	    addMultipleAssignmentStatementLHS(result,malhs);

                            	    }
                            	    break;

                            	default :
                            	    if ( cnt55 >= 1 ) break loop55;
                                        final EarlyExitException eee =
                                            new EarlyExitException(55, input);
                                        throw eee;
                                }
                                cnt55++;
                            } while (true);


                            match(input,T_ASSIGNMENT,FOLLOW_T_ASSIGNMENT_in_statement2377);

                            pushAssignmentOnResolveStack(result); popFromResolveStack = true;

                            pushFollow(FOLLOW_expression_in_statement2399);
                            mexp=expression();

                            state._fsp--;


                            addMutlipleAssignmentStatementRHS(result,mexp);

                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:546:8: ( T_COMMA mexp2= expression )+
                            int cnt56=0;
                            loop56:
                            do {
                                int alt56=2;
                                final int LA56_0 = input.LA(1);

                                if ( (LA56_0==T_COMMA) ) {
                                    alt56=1;
                                }


                                switch (alt56) {
                            	case 1 :
                            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:546:9: T_COMMA mexp2= expression
                            	    {
                            	    match(input,T_COMMA,FOLLOW_T_COMMA_in_statement2418);

                            	    pushFollow(FOLLOW_expression_in_statement2422);
                            	    mexp2=expression();

                            	    state._fsp--;


                            	    addMutlipleAssignmentStatementRHS(result,mexp2);

                            	    }
                            	    break;

                            	default :
                            	    if ( cnt56 >= 1 ) break loop56;
                                        final EarlyExitException eee =
                                            new EarlyExitException(56, input);
                                        throw eee;
                                }
                                cnt56++;
                            } while (true);


                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:547:8: ( T_WITH ndex2= expression )?
                            int alt57=2;
                            final int LA57_0 = input.LA(1);

                            if ( (LA57_0==T_WITH) ) {
                                alt57=1;
                            }
                            switch (alt57) {
                                case 1 :
                                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:547:9: T_WITH ndex2= expression
                                    {
                                    match(input,T_WITH,FOLLOW_T_WITH_in_statement2436);

                                    pushFollow(FOLLOW_expression_in_statement2440);
                                    ndex2=expression();

                                    state._fsp--;


                                    addConstraintToAssignment(result,ndex2);

                                    }
                                    break;

                            }


                            }
                            break;
                        case 3 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:550:7:
                            {
                            result = createCallStatement(aqname);

                            }
                            break;

                    }


                    }
                    break;

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

        finally {
        	// do for sure before leaving

            	       if (popFromResolveStack == true)
            	            popAssignmentOffResolveStack(result);

        }
        return result;
    }
    // $ANTLR end "statement"



    // $ANTLR start "expression"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:561:1: expression returns [Expression expr] : left= atomExpression (op= binoperator right= atomExpression )* ;
    public final Expression expression() throws RecognitionException {
        Expression expr = null;


        Expression left =null;

        BinaryOperator op =null;

        Expression right =null;



        		final ArrayList<BinaryOperator> operators = new ArrayList<BinaryOperator>();
        		final ArrayList<Expression> expressions = new ArrayList<Expression>();

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:567:2: (left= atomExpression (op= binoperator right= atomExpression )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:567:4: left= atomExpression (op= binoperator right= atomExpression )*
            {
            pushFollow(FOLLOW_atomExpression_in_expression2515);
            left=atomExpression();

            state._fsp--;


            expressions.add(left);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:569:3: (op= binoperator right= atomExpression )*
            loop60:
            do {
                int alt60=2;
                final int LA60_0 = input.LA(1);

                if ( (LA60_0==T_AND||LA60_0==T_BIIMPLIES||LA60_0==T_CONC||LA60_0==T_DIFF||LA60_0==T_DIV||(LA60_0 >= T_DOMRESBY && LA60_0 <= T_DOMRESTO)||LA60_0==T_EQUAL||(LA60_0 >= T_GREATER && LA60_0 <= T_GREATEREQUAL)||LA60_0==T_IDIV||(LA60_0 >= T_IMPLIES && LA60_0 <= T_IN)||LA60_0==T_INTER||(LA60_0 >= T_LESS && LA60_0 <= T_LESSEQUAL)||(LA60_0 >= T_MINUS && LA60_0 <= T_MUNION)||(LA60_0 >= T_NOT && LA60_0 <= T_NOTEQUAL)||LA60_0==T_OR||LA60_0==T_POW||LA60_0==T_PROD||(LA60_0 >= T_RNGRESBY && LA60_0 <= T_RNGRESTO)||LA60_0==T_SEQMOD_MAPOVERRIDE||(LA60_0 >= T_SUBSET && LA60_0 <= T_SUM)||LA60_0==T_UNION) ) {
                    alt60=1;
                }


                switch (alt60) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:569:5: op= binoperator right= atomExpression
            	    {
            	    pushFollow(FOLLOW_binoperator_in_expression2528);
            	    op=binoperator();

            	    state._fsp--;


            	    pushFollow(FOLLOW_atomExpression_in_expression2536);
            	    right=atomExpression();

            	    state._fsp--;



            	    		  	if (op != null) {
            	    		  		operators.add(op);
            	    		  		expressions.add(right);
            	    		  	}


            	    }
            	    break;

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


            expr = createPrecedenceTree(expressions,operators);

            }

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

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



    // $ANTLR start "binoperator"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:582:1: binoperator returns [BinaryOperator binop] : ( T_BIIMPLIES | T_GREATER | T_GREATEREQUAL | T_LESS | T_LESSEQUAL | T_EQUAL | T_NOTEQUAL | T_IMPLIES | T_MINUS | T_SUM | T_IN ( T_SET )? | T_NOT T_IN ( T_SET )? | T_SUBSET | T_OR | T_DIV | T_PROD | T_IDIV | T_MOD | T_UNION | T_DIFF | T_INTER | T_AND | T_POW | T_CONC | T_DOMRESBY | T_DOMRESTO | T_RNGRESBY | T_RNGRESTO | T_MUNION | T_SEQMOD_MAPOVERRIDE );
    public final BinaryOperator binoperator() throws RecognitionException {
        BinaryOperator binop = null;


        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:584:2: ( T_BIIMPLIES | T_GREATER | T_GREATEREQUAL | T_LESS | T_LESSEQUAL | T_EQUAL | T_NOTEQUAL | T_IMPLIES | T_MINUS | T_SUM | T_IN ( T_SET )? | T_NOT T_IN ( T_SET )? | T_SUBSET | T_OR | T_DIV | T_PROD | T_IDIV | T_MOD | T_UNION | T_DIFF | T_INTER | T_AND | T_POW | T_CONC | T_DOMRESBY | T_DOMRESTO | T_RNGRESBY | T_RNGRESTO | T_MUNION | T_SEQMOD_MAPOVERRIDE )
            int alt63=30;
            switch ( input.LA(1) ) {
            case T_BIIMPLIES:
                {
                alt63=1;
                }
                break;
            case T_GREATER:
                {
                alt63=2;
                }
                break;
            case T_GREATEREQUAL:
                {
                alt63=3;
                }
                break;
            case T_LESS:
                {
                alt63=4;
                }
                break;
            case T_LESSEQUAL:
                {
                alt63=5;
                }
                break;
            case T_EQUAL:
                {
                alt63=6;
                }
                break;
            case T_NOTEQUAL:
                {
                alt63=7;
                }
                break;
            case T_IMPLIES:
                {
                alt63=8;
                }
                break;
            case T_MINUS:
                {
                alt63=9;
                }
                break;
            case T_SUM:
                {
                alt63=10;
                }
                break;
            case T_IN:
                {
                alt63=11;
                }
                break;
            case T_NOT:
                {
                alt63=12;
                }
                break;
            case T_SUBSET:
                {
                alt63=13;
                }
                break;
            case T_OR:
                {
                alt63=14;
                }
                break;
            case T_DIV:
                {
                alt63=15;
                }
                break;
            case T_PROD:
                {
                alt63=16;
                }
                break;
            case T_IDIV:
                {
                alt63=17;
                }
                break;
            case T_MOD:
                {
                alt63=18;
                }
                break;
            case T_UNION:
                {
                alt63=19;
                }
                break;
            case T_DIFF:
                {
                alt63=20;
                }
                break;
            case T_INTER:
                {
                alt63=21;
                }
                break;
            case T_AND:
                {
                alt63=22;
                }
                break;
            case T_POW:
                {
                alt63=23;
                }
                break;
            case T_CONC:
                {
                alt63=24;
                }
                break;
            case T_DOMRESBY:
                {
                alt63=25;
                }
                break;
            case T_DOMRESTO:
                {
                alt63=26;
                }
                break;
            case T_RNGRESBY:
                {
                alt63=27;
                }
                break;
            case T_RNGRESTO:
                {
                alt63=28;
                }
                break;
            case T_MUNION:
                {
                alt63=29;
                }
                break;
            case T_SEQMOD_MAPOVERRIDE:
                {
                alt63=30;
                }
                break;
            default:
                final NoViableAltException nvae =
                    new NoViableAltException("", 63, 0, input);

                throw nvae;

            }

            switch (alt63) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:584:4: T_BIIMPLIES
                    {
                    match(input,T_BIIMPLIES,FOLLOW_T_BIIMPLIES_in_binoperator2569);

                    binop = createBinaryOperator(ExpressionKind.biimplies);

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:586:4: T_GREATER
                    {
                    match(input,T_GREATER,FOLLOW_T_GREATER_in_binoperator2578);

                    binop = createBinaryOperator(ExpressionKind.greater);

                    }
                    break;
                case 3 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:588:4: T_GREATEREQUAL
                    {
                    match(input,T_GREATEREQUAL,FOLLOW_T_GREATEREQUAL_in_binoperator2588);

                    binop = createBinaryOperator(ExpressionKind.greaterequal);

                    }
                    break;
                case 4 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:590:4: T_LESS
                    {
                    match(input,T_LESS,FOLLOW_T_LESS_in_binoperator2597);

                    binop = createBinaryOperator(ExpressionKind.less);

                    }
                    break;
                case 5 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:592:4: T_LESSEQUAL
                    {
                    match(input,T_LESSEQUAL,FOLLOW_T_LESSEQUAL_in_binoperator2607);

                    binop = createBinaryOperator(ExpressionKind.lessequal);

                    }
                    break;
                case 6 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:594:4: T_EQUAL
                    {
                    match(input,T_EQUAL,FOLLOW_T_EQUAL_in_binoperator2616);

                    binop = createBinaryOperator(ExpressionKind.equal);

                    }
                    break;
                case 7 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:596:4: T_NOTEQUAL
                    {
                    match(input,T_NOTEQUAL,FOLLOW_T_NOTEQUAL_in_binoperator2628);

                    binop = createBinaryOperator(ExpressionKind.notequal);

                    }
                    break;
                case 8 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:598:4: T_IMPLIES
                    {
                    match(input,T_IMPLIES,FOLLOW_T_IMPLIES_in_binoperator2639);

                    binop = createBinaryOperator(ExpressionKind.implies);

                    }
                    break;
                case 9 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:600:4: T_MINUS
                    {
                    match(input,T_MINUS,FOLLOW_T_MINUS_in_binoperator2648);

                    binop = createBinaryOperator(ExpressionKind.minus);

                    }
                    break;
                case 10 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:602:4: T_SUM
                    {
                    match(input,T_SUM,FOLLOW_T_SUM_in_binoperator2658);

                    binop = createBinaryOperator(ExpressionKind.sum);

                    }
                    break;
                case 11 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:604:4: T_IN ( T_SET )?
                    {
                    match(input,T_IN,FOLLOW_T_IN_in_binoperator2668);

                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:604:9: ( T_SET )?
                    int alt61=2;
                    final int LA61_0 = input.LA(1);

                    if ( (LA61_0==T_SET) ) {
                        alt61=1;
                    }
                    switch (alt61) {
                        case 1 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:604:9: T_SET
                            {
                            match(input,T_SET,FOLLOW_T_SET_in_binoperator2670);

                            }
                            break;

                    }


                    binop = createBinaryOperator(ExpressionKind.elemin);

                    }
                    break;
                case 12 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:606:4: T_NOT T_IN ( T_SET )?
                    {
                    match(input,T_NOT,FOLLOW_T_NOT_in_binoperator2681);

                    match(input,T_IN,FOLLOW_T_IN_in_binoperator2683);

                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:606:15: ( T_SET )?
                    int alt62=2;
                    final int LA62_0 = input.LA(1);

                    if ( (LA62_0==T_SET) ) {
                        alt62=1;
                    }
                    switch (alt62) {
                        case 1 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:606:15: T_SET
                            {
                            match(input,T_SET,FOLLOW_T_SET_in_binoperator2685);

                            }
                            break;

                    }


                    binop = createBinaryOperator(ExpressionKind.notelemin);

                    }
                    break;
                case 13 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:608:4: T_SUBSET
                    {
                    match(input,T_SUBSET,FOLLOW_T_SUBSET_in_binoperator2696);

                    binop = createBinaryOperator(ExpressionKind.subset);

                    }
                    break;
                case 14 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:610:4: T_OR
                    {
                    match(input,T_OR,FOLLOW_T_OR_in_binoperator2706);

                    binop = createBinaryOperator(ExpressionKind.or);

                    }
                    break;
                case 15 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:612:4: T_DIV
                    {
                    match(input,T_DIV,FOLLOW_T_DIV_in_binoperator2715);

                    binop = createBinaryOperator(ExpressionKind.div);

                    }
                    break;
                case 16 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:614:4: T_PROD
                    {
                    match(input,T_PROD,FOLLOW_T_PROD_in_binoperator2724);

                    binop = createBinaryOperator(ExpressionKind.prod);

                    }
                    break;
                case 17 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:616:4: T_IDIV
                    {
                    match(input,T_IDIV,FOLLOW_T_IDIV_in_binoperator2734);

                    binop = createBinaryOperator(ExpressionKind.idiv);

                    }
                    break;
                case 18 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:618:4: T_MOD
                    {
                    match(input,T_MOD,FOLLOW_T_MOD_in_binoperator2744);

                    binop = createBinaryOperator(ExpressionKind.mod);

                    }
                    break;
                case 19 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:620:4: T_UNION
                    {
                    match(input,T_UNION,FOLLOW_T_UNION_in_binoperator2754);

                    binop = createBinaryOperator(ExpressionKind.union);

                    }
                    break;
                case 20 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:622:4: T_DIFF
                    {
                    match(input,T_DIFF,FOLLOW_T_DIFF_in_binoperator2765);

                    binop = createBinaryOperator(ExpressionKind.diff);

                    }
                    break;
                case 21 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:624:4: T_INTER
                    {
                    match(input,T_INTER,FOLLOW_T_INTER_in_binoperator2776);

                    binop = createBinaryOperator(ExpressionKind.inter);

                    }
                    break;
                case 22 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:626:4: T_AND
                    {
                    match(input,T_AND,FOLLOW_T_AND_in_binoperator2787);

                    binop = createBinaryOperator(ExpressionKind.and);

                    }
                    break;
                case 23 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:628:4: T_POW
                    {
                    match(input,T_POW,FOLLOW_T_POW_in_binoperator2802);

                    binop = createBinaryOperator(ExpressionKind.pow);

                    }
                    break;
                case 24 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:630:4: T_CONC
                    {
                    match(input,T_CONC,FOLLOW_T_CONC_in_binoperator2817);

                    binop = createBinaryOperator(ExpressionKind.conc);

                    }
                    break;
                case 25 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:632:4: T_DOMRESBY
                    {
                    match(input,T_DOMRESBY,FOLLOW_T_DOMRESBY_in_binoperator2830);

                    binop = createBinaryOperator(ExpressionKind.domresby);

                    }
                    break;
                case 26 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:634:4: T_DOMRESTO
                    {
                    match(input,T_DOMRESTO,FOLLOW_T_DOMRESTO_in_binoperator2840);

                    binop = createBinaryOperator(ExpressionKind.domresto);

                    }
                    break;
                case 27 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:636:4: T_RNGRESBY
                    {
                    match(input,T_RNGRESBY,FOLLOW_T_RNGRESBY_in_binoperator2850);

                    binop = createBinaryOperator(ExpressionKind.rngresby);

                    }
                    break;
                case 28 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:638:4: T_RNGRESTO
                    {
                    match(input,T_RNGRESTO,FOLLOW_T_RNGRESTO_in_binoperator2860);

                    binop = createBinaryOperator(ExpressionKind.rngresto);

                    }
                    break;
                case 29 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:640:4: T_MUNION
                    {
                    match(input,T_MUNION,FOLLOW_T_MUNION_in_binoperator2870);

                    binop = createBinaryOperator(ExpressionKind.munion);

                    }
                    break;
                case 30 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:642:4: T_SEQMOD_MAPOVERRIDE
                    {
                    match(input,T_SEQMOD_MAPOVERRIDE,FOLLOW_T_SEQMOD_MAPOVERRIDE_in_binoperator2880);

                    binop = createBinaryOperator(ExpressionKind.seqmod_mapoverride);

                    }
                    break;

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

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



    // $ANTLR start "atomExpression"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:648:1: atomExpression returns [Expression expr] : ( ( (unexpr= op_un )? (e= identifierExpression |e= constant |e= initializedComplexType |e= quantifierExpression | T_LPAREN e= expression T_RPAREN ( ( T_POINT idn= T_IDENTIFIER )+ (res= accessExpression[e] )? |e= accessExpression[e] )? ) ( 'as' cid= T_IDENTIFIER )? ) |ie= T_IF ce= expression T_THEN te= expression T_ELSE ee= expression T_END );
    public final Expression atomExpression() throws RecognitionException {
        Expression expr = null;


        Token idn=null;
        Token cid=null;
        Token ie=null;
        UnaryOperator unexpr =null;

        Expression e =null;

        Expression res =null;

        Expression ce =null;

        Expression te =null;

        Expression ee =null;



        		expr = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:653:2: ( ( (unexpr= op_un )? (e= identifierExpression |e= constant |e= initializedComplexType |e= quantifierExpression | T_LPAREN e= expression T_RPAREN ( ( T_POINT idn= T_IDENTIFIER )+ (res= accessExpression[e] )? |e= accessExpression[e] )? ) ( 'as' cid= T_IDENTIFIER )? ) |ie= T_IF ce= expression T_THEN te= expression T_ELSE ee= expression T_END )
            int alt70=2;
            final int LA70_0 = input.LA(1);

            if ( (LA70_0==T_ABS||(LA70_0 >= T_CARD && LA70_0 <= T_CBRL)||LA70_0==T_DCONC||LA70_0==T_DINTER||LA70_0==T_DOM||(LA70_0 >= T_DUNION && LA70_0 <= T_ELEMS)||(LA70_0 >= T_EXISTS && LA70_0 <= T_FALSE)||LA70_0==T_FLOATNUMBER||LA70_0==T_FORALL||(LA70_0 >= T_HEAD && LA70_0 <= T_IDENTIFIER)||LA70_0==T_INDS||LA70_0==T_INTNUMBER||LA70_0==T_LEN||(LA70_0 >= T_LPAREN && LA70_0 <= T_LSQPAREN)||LA70_0==T_MERGE||LA70_0==T_MINUS||(LA70_0 >= T_NEW && LA70_0 <= T_NIL)||LA70_0==T_NOT||LA70_0==T_RNG||LA70_0==T_SELF||LA70_0==T_STRINGLITERAL||LA70_0==T_TAIL||LA70_0==T_TRUE) ) {
                alt70=1;
            }
            else if ( (LA70_0==T_IF) ) {
                alt70=2;
            }
            else {
                final NoViableAltException nvae =
                    new NoViableAltException("", 70, 0, input);

                throw nvae;

            }
            switch (alt70) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:653:4: ( (unexpr= op_un )? (e= identifierExpression |e= constant |e= initializedComplexType |e= quantifierExpression | T_LPAREN e= expression T_RPAREN ( ( T_POINT idn= T_IDENTIFIER )+ (res= accessExpression[e] )? |e= accessExpression[e] )? ) ( 'as' cid= T_IDENTIFIER )? )
                    {
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:653:4: ( (unexpr= op_un )? (e= identifierExpression |e= constant |e= initializedComplexType |e= quantifierExpression | T_LPAREN e= expression T_RPAREN ( ( T_POINT idn= T_IDENTIFIER )+ (res= accessExpression[e] )? |e= accessExpression[e] )? ) ( 'as' cid= T_IDENTIFIER )? )
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:653:5: (unexpr= op_un )? (e= identifierExpression |e= constant |e= initializedComplexType |e= quantifierExpression | T_LPAREN e= expression T_RPAREN ( ( T_POINT idn= T_IDENTIFIER )+ (res= accessExpression[e] )? |e= accessExpression[e] )? ) ( 'as' cid= T_IDENTIFIER )?
                    {
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:653:11: (unexpr= op_un )?
                    int alt64=2;
                    final int LA64_0 = input.LA(1);

                    if ( (LA64_0==T_ABS||LA64_0==T_CARD||LA64_0==T_DCONC||LA64_0==T_DINTER||LA64_0==T_DOM||(LA64_0 >= T_DUNION && LA64_0 <= T_ELEMS)||LA64_0==T_HEAD||LA64_0==T_INDS||LA64_0==T_LEN||LA64_0==T_MERGE||LA64_0==T_MINUS||LA64_0==T_NOT||LA64_0==T_RNG||LA64_0==T_TAIL) ) {
                        alt64=1;
                    }
                    switch (alt64) {
                        case 1 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:653:11: unexpr= op_un
                            {
                            pushFollow(FOLLOW_op_un_in_atomExpression2918);
                            unexpr=op_un();

                            state._fsp--;


                            }
                            break;

                    }


                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:653:19: (e= identifierExpression |e= constant |e= initializedComplexType |e= quantifierExpression | T_LPAREN e= expression T_RPAREN ( ( T_POINT idn= T_IDENTIFIER )+ (res= accessExpression[e] )? |e= accessExpression[e] )? )
                    int alt68=5;
                    alt68 = dfa68.predict(input);
                    switch (alt68) {
                        case 1 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:654:8: e= identifierExpression
                            {
                            pushFollow(FOLLOW_identifierExpression_in_atomExpression2935);
                            e=identifierExpression();

                            state._fsp--;


                            }
                            break;
                        case 2 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:655:8: e= constant
                            {
                            pushFollow(FOLLOW_constant_in_atomExpression2946);
                            e=constant();

                            state._fsp--;


                            }
                            break;
                        case 3 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:656:8: e= initializedComplexType
                            {
                            pushFollow(FOLLOW_initializedComplexType_in_atomExpression2957);
                            e=initializedComplexType();

                            state._fsp--;


                            }
                            break;
                        case 4 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:657:8: e= quantifierExpression
                            {
                            pushFollow(FOLLOW_quantifierExpression_in_atomExpression2969);
                            e=quantifierExpression();

                            state._fsp--;


                            }
                            break;
                        case 5 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:658:8: T_LPAREN e= expression T_RPAREN ( ( T_POINT idn= T_IDENTIFIER )+ (res= accessExpression[e] )? |e= accessExpression[e] )?
                            {
                            match(input,T_LPAREN,FOLLOW_T_LPAREN_in_atomExpression2978);

                            pushFollow(FOLLOW_expression_in_atomExpression2982);
                            e=expression();

                            state._fsp--;


                            match(input,T_RPAREN,FOLLOW_T_RPAREN_in_atomExpression2984);

                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:659:8: ( ( T_POINT idn= T_IDENTIFIER )+ (res= accessExpression[e] )? |e= accessExpression[e] )?
                            int alt67=3;
                            final int LA67_0 = input.LA(1);

                            if ( (LA67_0==T_POINT) ) {
                                alt67=1;
                            }
                            else if ( ((LA67_0 >= T_LPAREN && LA67_0 <= T_LSQPAREN)) ) {
                                alt67=2;
                            }
                            switch (alt67) {
                                case 1 :
                                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:660:6: ( T_POINT idn= T_IDENTIFIER )+ (res= accessExpression[e] )?
                                    {
                                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:660:6: ( T_POINT idn= T_IDENTIFIER )+
                                    int cnt65=0;
                                    loop65:
                                    do {
                                        int alt65=2;
                                        final int LA65_0 = input.LA(1);

                                        if ( (LA65_0==T_POINT) ) {
                                            alt65=1;
                                        }


                                        switch (alt65) {
                                    	case 1 :
                                    	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:660:7: T_POINT idn= T_IDENTIFIER
                                    	    {
                                    	    match(input,T_POINT,FOLLOW_T_POINT_in_atomExpression3007);

                                    	    idn=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_atomExpression3019);

                                    	    e = addIdentifierAccessExpression(e,idn);

                                    	    }
                                    	    break;

                                    	default :
                                    	    if ( cnt65 >= 1 ) break loop65;
                                                final EarlyExitException eee =
                                                    new EarlyExitException(65, input);
                                                throw eee;
                                        }
                                        cnt65++;
                                    } while (true);


                                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:663:8: (res= accessExpression[e] )?
                                    int alt66=2;
                                    final int LA66_0 = input.LA(1);

                                    if ( ((LA66_0 >= T_LPAREN && LA66_0 <= T_LSQPAREN)) ) {
                                        alt66=1;
                                    }
                                    switch (alt66) {
                                        case 1 :
                                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:663:9: res= accessExpression[e]
                                            {
                                            pushFollow(FOLLOW_accessExpression_in_atomExpression3043);
                                            res=accessExpression(e);

                                            state._fsp--;


                                            e=res;

                                            }
                                            break;

                                    }


                                    }
                                    break;
                                case 2 :
                                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:665:6: e= accessExpression[e]
                                    {
                                    pushFollow(FOLLOW_accessExpression_in_atomExpression3063);
                                    e=accessExpression(e);

                                    state._fsp--;


                                    }
                                    break;

                            }


                            }
                            break;

                    }


                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:667:5: ( 'as' cid= T_IDENTIFIER )?
                    int alt69=2;
                    final int LA69_0 = input.LA(1);

                    if ( (LA69_0==119) ) {
                        alt69=1;
                    }
                    switch (alt69) {
                        case 1 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:667:6: 'as' cid= T_IDENTIFIER
                            {
                            match(input,119,FOLLOW_119_in_atomExpression3082);

                            cid=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_atomExpression3086);

                            e=addCastExpression(e,cid);

                            }
                            break;

                    }


                    expr = addUnaryExpression(unexpr,e);

                    }


                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:670:6: ie= T_IF ce= expression T_THEN te= expression T_ELSE ee= expression T_END
                    {
                    ie=(Token)match(input,T_IF,FOLLOW_T_IF_in_atomExpression3107);

                    pushFollow(FOLLOW_expression_in_atomExpression3111);
                    ce=expression();

                    state._fsp--;


                    match(input,T_THEN,FOLLOW_T_THEN_in_atomExpression3113);

                    pushFollow(FOLLOW_expression_in_atomExpression3117);
                    te=expression();

                    state._fsp--;


                    match(input,T_ELSE,FOLLOW_T_ELSE_in_atomExpression3119);

                    pushFollow(FOLLOW_expression_in_atomExpression3123);
                    ee=expression();

                    state._fsp--;


                    match(input,T_END,FOLLOW_T_END_in_atomExpression3125);

                    expr = createConditionalExpression(ce,te,ee,ie);

                    }
                    break;

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

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



    // $ANTLR start "quantifierExpression"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:675:1: quantifierExpression returns [Quantifier result] : t= ( T_FORALL | T_EXISTS ) (id= T_IDENTIFIER ( T_COLON id_type= simpleType ) ( T_COMMA id2= T_IDENTIFIER ( T_COLON id_type2= simpleType ) )* ) T_COLON T_LPAREN e= expression T_RPAREN ;
    public final Quantifier quantifierExpression() throws RecognitionException {
        Quantifier result = null;


        Token t=null;
        Token id=null;
        Token id2=null;
        Type id_type =null;

        Type id_type2 =null;

        Expression e =null;



        		result = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:680:2: (t= ( T_FORALL | T_EXISTS ) (id= T_IDENTIFIER ( T_COLON id_type= simpleType ) ( T_COMMA id2= T_IDENTIFIER ( T_COLON id_type2= simpleType ) )* ) T_COLON T_LPAREN e= expression T_RPAREN )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:680:5: t= ( T_FORALL | T_EXISTS ) (id= T_IDENTIFIER ( T_COLON id_type= simpleType ) ( T_COMMA id2= T_IDENTIFIER ( T_COLON id_type2= simpleType ) )* ) T_COLON T_LPAREN e= expression T_RPAREN
            {
            t=input.LT(1);

            if ( input.LA(1)==T_EXISTS||input.LA(1)==T_FORALL ) {
                input.consume();
                state.errorRecovery=false;
            }
            else {
                final MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            result = createQuantifierExpression(t);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:682:3: (id= T_IDENTIFIER ( T_COLON id_type= simpleType ) ( T_COMMA id2= T_IDENTIFIER ( T_COLON id_type2= simpleType ) )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:682:4: id= T_IDENTIFIER ( T_COLON id_type= simpleType ) ( T_COMMA id2= T_IDENTIFIER ( T_COLON id_type2= simpleType ) )*
            {
            id=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_quantifierExpression3174);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:682:20: ( T_COLON id_type= simpleType )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:682:21: T_COLON id_type= simpleType
            {
            match(input,T_COLON,FOLLOW_T_COLON_in_quantifierExpression3177);

            pushFollow(FOLLOW_simpleType_in_quantifierExpression3181);
            id_type=simpleType();

            state._fsp--;


            addBoundVarToQuantifierExpression(result,id,id_type);

            }


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:683:5: ( T_COMMA id2= T_IDENTIFIER ( T_COLON id_type2= simpleType ) )*
            loop71:
            do {
                int alt71=2;
                final int LA71_0 = input.LA(1);

                if ( (LA71_0==T_COMMA) ) {
                    alt71=1;
                }


                switch (alt71) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:683:6: T_COMMA id2= T_IDENTIFIER ( T_COLON id_type2= simpleType )
            	    {
            	    match(input,T_COMMA,FOLLOW_T_COMMA_in_quantifierExpression3192);

            	    id2=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_quantifierExpression3196);

            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:683:31: ( T_COLON id_type2= simpleType )
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:683:32: T_COLON id_type2= simpleType
            	    {
            	    match(input,T_COLON,FOLLOW_T_COLON_in_quantifierExpression3199);

            	    pushFollow(FOLLOW_simpleType_in_quantifierExpression3203);
            	    id_type2=simpleType();

            	    state._fsp--;


            	    }


            	    addBoundVarToQuantifierExpression(result,id2,id_type2);

            	    }
            	    break;

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


            }


            match(input,T_COLON,FOLLOW_T_COLON_in_quantifierExpression3213);

            match(input,T_LPAREN,FOLLOW_T_LPAREN_in_quantifierExpression3215);

            pushFollow(FOLLOW_expression_in_quantifierExpression3219);
            e=expression();

            state._fsp--;


            match(input,T_RPAREN,FOLLOW_T_RPAREN_in_quantifierExpression3221);

            addExpressionToQuantifier(result,e);

            }

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

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



    // $ANTLR start "constant"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:690:1: constant returns [LeafExpression result] : ( T_TRUE | T_FALSE | T_NIL | T_SELF |t_fl= T_FLOATNUMBER |t_in= T_INTNUMBER |t_l= T_STRINGLITERAL );
    public final LeafExpression constant() throws RecognitionException {
        LeafExpression result = null;


        Token t_fl=null;
        Token t_in=null;
        Token t_l=null;


        		result = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:695:2: ( T_TRUE | T_FALSE | T_NIL | T_SELF |t_fl= T_FLOATNUMBER |t_in= T_INTNUMBER |t_l= T_STRINGLITERAL )
            int alt72=7;
            switch ( input.LA(1) ) {
            case T_TRUE:
                {
                alt72=1;
                }
                break;
            case T_FALSE:
                {
                alt72=2;
                }
                break;
            case T_NIL:
                {
                alt72=3;
                }
                break;
            case T_SELF:
                {
                alt72=4;
                }
                break;
            case T_FLOATNUMBER:
                {
                alt72=5;
                }
                break;
            case T_INTNUMBER:
                {
                alt72=6;
                }
                break;
            case T_STRINGLITERAL:
                {
                alt72=7;
                }
                break;
            default:
                final NoViableAltException nvae =
                    new NoViableAltException("", 72, 0, input);

                throw nvae;

            }

            switch (alt72) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:695:5: T_TRUE
                    {
                    match(input,T_TRUE,FOLLOW_T_TRUE_in_constant3255);

                    result = createBoolConstant(true);

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:696:4: T_FALSE
                    {
                    match(input,T_FALSE,FOLLOW_T_FALSE_in_constant3263);

                    result = createBoolConstant(false);

                    }
                    break;
                case 3 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:697:4: T_NIL
                    {
                    match(input,T_NIL,FOLLOW_T_NIL_in_constant3270);

                    result = createNullPointerConstant();

                    }
                    break;
                case 4 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:698:4: T_SELF
                    {
                    match(input,T_SELF,FOLLOW_T_SELF_in_constant3278);

                    result = createSelfPointer();

                    }
                    break;
                case 5 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:699:5: t_fl= T_FLOATNUMBER
                    {
                    t_fl=(Token)match(input,T_FLOATNUMBER,FOLLOW_T_FLOATNUMBER_in_constant3289);

                    result = createFloatConstant(t_fl);

                    }
                    break;
                case 6 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:700:4: t_in= T_INTNUMBER
                    {
                    t_in=(Token)match(input,T_INTNUMBER,FOLLOW_T_INTNUMBER_in_constant3298);

                    result = createIntConstant(t_in);

                    }
                    break;
                case 7 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:701:4: t_l= T_STRINGLITERAL
                    {
                    t_l=(Token)match(input,T_STRINGLITERAL,FOLLOW_T_STRINGLITERAL_in_constant3307);

                    result = createStringConstant(t_l);

                    }
                    break;

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

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



    // $ANTLR start "initializedComplexType"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:704:1: initializedComplexType returns [Expression result] : (res= initializedListType |res= initializedSetType | T_NEW T_LPAREN anid= T_IDENTIFIER ( T_COMMA aname= T_STRINGLITERAL T_RPAREN | T_RPAREN ) );
    public final Expression initializedComplexType() throws RecognitionException {
        Expression result = null;


        Token anid=null;
        Token aname=null;
        Expression res =null;



        		result = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:709:2: (res= initializedListType |res= initializedSetType | T_NEW T_LPAREN anid= T_IDENTIFIER ( T_COMMA aname= T_STRINGLITERAL T_RPAREN | T_RPAREN ) )
            int alt74=3;
            switch ( input.LA(1) ) {
            case T_LSQPAREN:
                {
                alt74=1;
                }
                break;
            case T_CBRL:
                {
                alt74=2;
                }
                break;
            case T_NEW:
                {
                alt74=3;
                }
                break;
            default:
                final NoViableAltException nvae =
                    new NoViableAltException("", 74, 0, input);

                throw nvae;

            }

            switch (alt74) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:709:4: res= initializedListType
                    {
                    pushFollow(FOLLOW_initializedListType_in_initializedComplexType3334);
                    res=initializedListType();

                    state._fsp--;


                    result = res;

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:710:4: res= initializedSetType
                    {
                    pushFollow(FOLLOW_initializedSetType_in_initializedComplexType3343);
                    res=initializedSetType();

                    state._fsp--;


                    result = res;

                    }
                    break;
                case 3 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:711:5: T_NEW T_LPAREN anid= T_IDENTIFIER ( T_COMMA aname= T_STRINGLITERAL T_RPAREN | T_RPAREN )
                    {
                    match(input,T_NEW,FOLLOW_T_NEW_in_initializedComplexType3351);

                    match(input,T_LPAREN,FOLLOW_T_LPAREN_in_initializedComplexType3353);

                    anid=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_initializedComplexType3357);

                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:712:4: ( T_COMMA aname= T_STRINGLITERAL T_RPAREN | T_RPAREN )
                    int alt73=2;
                    final int LA73_0 = input.LA(1);

                    if ( (LA73_0==T_COMMA) ) {
                        alt73=1;
                    }
                    else if ( (LA73_0==T_RPAREN) ) {
                        alt73=2;
                    }
                    else {
                        final NoViableAltException nvae =
                            new NoViableAltException("", 73, 0, input);

                        throw nvae;

                    }
                    switch (alt73) {
                        case 1 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:713:5: T_COMMA aname= T_STRINGLITERAL T_RPAREN
                            {
                            match(input,T_COMMA,FOLLOW_T_COMMA_in_initializedComplexType3369);

                            aname=(Token)match(input,T_STRINGLITERAL,FOLLOW_T_STRINGLITERAL_in_initializedComplexType3374);

                            match(input,T_RPAREN,FOLLOW_T_RPAREN_in_initializedComplexType3376);

                            result = createNamedObject(anid, aname);

                            }
                            break;
                        case 2 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:714:6: T_RPAREN
                            {
                            match(input,T_RPAREN,FOLLOW_T_RPAREN_in_initializedComplexType3385);

                            result = createObject(anid);

                            }
                            break;

                    }


                    }
                    break;

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

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



    // $ANTLR start "initializedListType"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:718:1: initializedListType returns [ListConstructor result] : T_LSQPAREN e= expression ( ( T_COMMA e2= expression )+ | listComprehension[result] )? T_RSQPAREN ;
    public final ListConstructor initializedListType() throws RecognitionException {
        ListConstructor result = null;


        Expression e =null;

        Expression e2 =null;



        		result = createInitializedList();
        		pushListVarsOnResolveStack(result); // need this here for list comprehension

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:724:2: ( T_LSQPAREN e= expression ( ( T_COMMA e2= expression )+ | listComprehension[result] )? T_RSQPAREN )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:724:4: T_LSQPAREN e= expression ( ( T_COMMA e2= expression )+ | listComprehension[result] )? T_RSQPAREN
            {
            match(input,T_LSQPAREN,FOLLOW_T_LSQPAREN_in_initializedListType3416);

            pushFollow(FOLLOW_expression_in_initializedListType3420);
            e=expression();

            state._fsp--;


            addListElement(result,e);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:724:56: ( ( T_COMMA e2= expression )+ | listComprehension[result] )?
            int alt76=3;
            final int LA76_0 = input.LA(1);

            if ( (LA76_0==T_COMMA) ) {
                alt76=1;
            }
            else if ( (LA76_0==T_BAR) ) {
                alt76=2;
            }
            switch (alt76) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:725:4: ( T_COMMA e2= expression )+
                    {
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:725:4: ( T_COMMA e2= expression )+
                    int cnt75=0;
                    loop75:
                    do {
                        int alt75=2;
                        final int LA75_0 = input.LA(1);

                        if ( (LA75_0==T_COMMA) ) {
                            alt75=1;
                        }


                        switch (alt75) {
                    	case 1 :
                    	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:725:5: T_COMMA e2= expression
                    	    {
                    	    match(input,T_COMMA,FOLLOW_T_COMMA_in_initializedListType3431);

                    	    pushFollow(FOLLOW_expression_in_initializedListType3435);
                    	    e2=expression();

                    	    state._fsp--;


                    	    addListElement(result,e2);

                    	    }
                    	    break;

                    	default :
                    	    if ( cnt75 >= 1 ) break loop75;
                                final EarlyExitException eee =
                                    new EarlyExitException(75, input);
                                throw eee;
                        }
                        cnt75++;
                    } while (true);


                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:726:6: listComprehension[result]
                    {
                    pushFollow(FOLLOW_listComprehension_in_initializedListType3447);
                    listComprehension(result);

                    state._fsp--;


                    }
                    break;

            }


            match(input,T_RSQPAREN,FOLLOW_T_RSQPAREN_in_initializedListType3455);

            }

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

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



    // $ANTLR start "listComprehension"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:732:1: listComprehension[ListConstructor result] : T_BAR T_VAR id= T_IDENTIFIER T_COLON t1= complexType ( T_SEMICOLON id2= T_IDENTIFIER t2= complexType )* ( '&' e= expression )? ;
    public final void listComprehension(ListConstructor result) throws RecognitionException {
        Token id=null;
        Token id2=null;
        Type t1 =null;

        Type t2 =null;

        Expression e =null;



        		result.SetHasComprehension(true);

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:736:2: ( T_BAR T_VAR id= T_IDENTIFIER T_COLON t1= complexType ( T_SEMICOLON id2= T_IDENTIFIER t2= complexType )* ( '&' e= expression )? )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:737:3: T_BAR T_VAR id= T_IDENTIFIER T_COLON t1= complexType ( T_SEMICOLON id2= T_IDENTIFIER t2= complexType )* ( '&' e= expression )?
            {
            match(input,T_BAR,FOLLOW_T_BAR_in_listComprehension3486);

            match(input,T_VAR,FOLLOW_T_VAR_in_listComprehension3488);

            id=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_listComprehension3494);

            match(input,T_COLON,FOLLOW_T_COLON_in_listComprehension3497);

            pushFollow(FOLLOW_complexType_in_listComprehension3501);
            t1=complexType();

            state._fsp--;


            addListComprVar(result,id,t1);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:739:4: ( T_SEMICOLON id2= T_IDENTIFIER t2= complexType )*
            loop77:
            do {
                int alt77=2;
                final int LA77_0 = input.LA(1);

                if ( (LA77_0==T_SEMICOLON) ) {
                    alt77=1;
                }


                switch (alt77) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:739:5: T_SEMICOLON id2= T_IDENTIFIER t2= complexType
            	    {
            	    match(input,T_SEMICOLON,FOLLOW_T_SEMICOLON_in_listComprehension3510);

            	    id2=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_listComprehension3514);

            	    pushFollow(FOLLOW_complexType_in_listComprehension3519);
            	    t2=complexType();

            	    state._fsp--;


            	    addListComprVar(result,id2,t2);

            	    }
            	    break;

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


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:740:3: ( '&' e= expression )?
            int alt78=2;
            final int LA78_0 = input.LA(1);

            if ( (LA78_0==116) ) {
                alt78=1;
            }
            switch (alt78) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:740:4: '&' e= expression
                    {
                    match(input,116,FOLLOW_116_in_listComprehension3529);

                    pushFollow(FOLLOW_expression_in_listComprehension3535);
                    e=expression();

                    state._fsp--;


                    addListComprExpr(result,e);

                    }
                    break;

            }


            }

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

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



    // $ANTLR start "initializedSetType"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:744:1: initializedSetType returns [Expression result] : ( T_CBRL T_MAPS T_CBRR |res= initializedSet );
    public final Expression initializedSetType() throws RecognitionException {
        Expression result = null;


        Expression res =null;



        		result = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:749:2: ( T_CBRL T_MAPS T_CBRR |res= initializedSet )
            int alt79=2;
            final int LA79_0 = input.LA(1);

            if ( (LA79_0==T_CBRL) ) {
                final int LA79_1 = input.LA(2);

                if ( (LA79_1==T_MAPS) ) {
                    alt79=1;
                }
                else if ( (LA79_1==T_ABS||(LA79_1 >= T_CARD && LA79_1 <= T_CBRL)||LA79_1==T_DCONC||LA79_1==T_DINTER||LA79_1==T_DOM||(LA79_1 >= T_DUNION && LA79_1 <= T_ELEMS)||(LA79_1 >= T_EXISTS && LA79_1 <= T_FALSE)||LA79_1==T_FLOATNUMBER||LA79_1==T_FORALL||(LA79_1 >= T_HEAD && LA79_1 <= T_IDENTIFIER)||LA79_1==T_IF||LA79_1==T_INDS||LA79_1==T_INTNUMBER||LA79_1==T_LEN||(LA79_1 >= T_LPAREN && LA79_1 <= T_LSQPAREN)||LA79_1==T_MERGE||LA79_1==T_MINUS||(LA79_1 >= T_NEW && LA79_1 <= T_NIL)||LA79_1==T_NOT||LA79_1==T_RNG||LA79_1==T_SELF||LA79_1==T_STRINGLITERAL||LA79_1==T_TAIL||LA79_1==T_TRUE) ) {
                    alt79=2;
                }
                else {
                    final NoViableAltException nvae =
                        new NoViableAltException("", 79, 1, input);

                    throw nvae;

                }
            }
            else {
                final NoViableAltException nvae =
                    new NoViableAltException("", 79, 0, input);

                throw nvae;

            }
            switch (alt79) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:749:4: T_CBRL T_MAPS T_CBRR
                    {
                    match(input,T_CBRL,FOLLOW_T_CBRL_in_initializedSetType3561);

                    match(input,T_MAPS,FOLLOW_T_MAPS_in_initializedSetType3563);

                    match(input,T_CBRR,FOLLOW_T_CBRR_in_initializedSetType3565);

                    result = createEmptyMap();

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:750:4: res= initializedSet
                    {
                    pushFollow(FOLLOW_initializedSet_in_initializedSetType3576);
                    res=initializedSet();

                    state._fsp--;


                    result = res;

                    }
                    break;

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

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



    // $ANTLR start "initializedSet"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:753:1: initializedSet returns [Expression result] : T_CBRL e1= expression ( ( T_COMMA e2= expression )* |m= map[result, e1] | setComprehension[(SetConstructor)result] ) T_CBRR ;
    public final Expression initializedSet() throws RecognitionException {
        Expression result = null;


        Expression e1 =null;

        Expression e2 =null;

        Expression m =null;



        		final SetConstructor theset = createSet();
        		pushSetVarsOnResolveStack(theset); // need this here for set comprehension
        		result = theset;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:760:2: ( T_CBRL e1= expression ( ( T_COMMA e2= expression )* |m= map[result, e1] | setComprehension[(SetConstructor)result] ) T_CBRR )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:760:4: T_CBRL e1= expression ( ( T_COMMA e2= expression )* |m= map[result, e1] | setComprehension[(SetConstructor)result] ) T_CBRR
            {
            match(input,T_CBRL,FOLLOW_T_CBRL_in_initializedSet3602);

            pushFollow(FOLLOW_expression_in_initializedSet3606);
            e1=expression();

            state._fsp--;


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:761:10: ( ( T_COMMA e2= expression )* |m= map[result, e1] | setComprehension[(SetConstructor)result] )
            int alt81=3;
            switch ( input.LA(1) ) {
            case T_CBRR:
            case T_COMMA:
                {
                alt81=1;
                }
                break;
            case T_MAPS:
                {
                alt81=2;
                }
                break;
            case T_BAR:
                {
                alt81=3;
                }
                break;
            default:
                final NoViableAltException nvae =
                    new NoViableAltException("", 81, 0, input);

                throw nvae;

            }

            switch (alt81) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:762:4: ( T_COMMA e2= expression )*
                    {
                    addToSet(result,e1);

                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:763:4: ( T_COMMA e2= expression )*
                    loop80:
                    do {
                        int alt80=2;
                        final int LA80_0 = input.LA(1);

                        if ( (LA80_0==T_COMMA) ) {
                            alt80=1;
                        }


                        switch (alt80) {
                    	case 1 :
                    	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:763:5: T_COMMA e2= expression
                    	    {
                    	    match(input,T_COMMA,FOLLOW_T_COMMA_in_initializedSet3636);

                    	    pushFollow(FOLLOW_expression_in_initializedSet3640);
                    	    e2=expression();

                    	    state._fsp--;


                    	    addToSet(result,e2);

                    	    }
                    	    break;

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


                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:764:6: m= map[result, e1]
                    {
                    pushFollow(FOLLOW_map_in_initializedSet3658);
                    m=map(result, e1);

                    state._fsp--;


                    result = m;

                    }
                    break;
                case 3 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:765:5: setComprehension[(SetConstructor)result]
                    {
                    addToSet(result,e1);

                    pushFollow(FOLLOW_setComprehension_in_initializedSet3671);
                    setComprehension((SetConstructor)result);

                    state._fsp--;


                    }
                    break;

            }


            match(input,T_CBRR,FOLLOW_T_CBRR_in_initializedSet3681);

            }

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

        finally {
        	// do for sure before leaving
            popSetVarsFromResolveStack(theset);
        }
        return result;
    }
    // $ANTLR end "initializedSet"



    // $ANTLR start "map"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:771:1: map[Expression _map, Expression e1] returns [Expression result] : am= T_MAPS e2= expression ( T_COMMA e3= expression T_MAPS e4= expression )* ;
    public final Expression map(Expression _map, Expression e1) throws RecognitionException {
        Expression result = null;


        Token am=null;
        Expression e2 =null;

        Expression e3 =null;

        Expression e4 =null;



        		result = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:776:2: (am= T_MAPS e2= expression ( T_COMMA e3= expression T_MAPS e4= expression )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:776:4: am= T_MAPS e2= expression ( T_COMMA e3= expression T_MAPS e4= expression )*
            {
            am=(Token)match(input,T_MAPS,FOLLOW_T_MAPS_in_map3717);

            pushFollow(FOLLOW_expression_in_map3721);
            e2=expression();

            state._fsp--;


            result = createMap(e1,e2,am);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:776:63: ( T_COMMA e3= expression T_MAPS e4= expression )*
            loop82:
            do {
                int alt82=2;
                final int LA82_0 = input.LA(1);

                if ( (LA82_0==T_COMMA) ) {
                    alt82=1;
                }


                switch (alt82) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:776:64: T_COMMA e3= expression T_MAPS e4= expression
            	    {
            	    match(input,T_COMMA,FOLLOW_T_COMMA_in_map3729);

            	    pushFollow(FOLLOW_expression_in_map3733);
            	    e3=expression();

            	    state._fsp--;


            	    match(input,T_MAPS,FOLLOW_T_MAPS_in_map3735);

            	    pushFollow(FOLLOW_expression_in_map3739);
            	    e4=expression();

            	    state._fsp--;


            	    addToMap(result,e3,e4);

            	    }
            	    break;

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


            }

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

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



    // $ANTLR start "setComprehension"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:779:1: setComprehension[SetConstructor _set] : T_BAR T_VAR id1= T_IDENTIFIER T_COLON t1= complexType ( T_SEMICOLON id2= T_IDENTIFIER T_COLON t2= complexType )* ( '&' epx= expression )? ;
    public final void setComprehension(SetConstructor _set) throws RecognitionException {
        Token id1=null;
        Token id2=null;
        Type t1 =null;

        Type t2 =null;

        Expression epx =null;



        		_set.SetHasComprehension(true);

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:783:2: ( T_BAR T_VAR id1= T_IDENTIFIER T_COLON t1= complexType ( T_SEMICOLON id2= T_IDENTIFIER T_COLON t2= complexType )* ( '&' epx= expression )? )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:783:4: T_BAR T_VAR id1= T_IDENTIFIER T_COLON t1= complexType ( T_SEMICOLON id2= T_IDENTIFIER T_COLON t2= complexType )* ( '&' epx= expression )?
            {
            match(input,T_BAR,FOLLOW_T_BAR_in_setComprehension3761);

            match(input,T_VAR,FOLLOW_T_VAR_in_setComprehension3763);

            id1=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_setComprehension3767);

            match(input,T_COLON,FOLLOW_T_COLON_in_setComprehension3770);

            pushFollow(FOLLOW_complexType_in_setComprehension3774);
            t1=complexType();

            state._fsp--;


             addSetComprVar(_set, id1, t1);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:785:3: ( T_SEMICOLON id2= T_IDENTIFIER T_COLON t2= complexType )*
            loop83:
            do {
                int alt83=2;
                final int LA83_0 = input.LA(1);

                if ( (LA83_0==T_SEMICOLON) ) {
                    alt83=1;
                }


                switch (alt83) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:785:4: T_SEMICOLON id2= T_IDENTIFIER T_COLON t2= complexType
            	    {
            	    match(input,T_SEMICOLON,FOLLOW_T_SEMICOLON_in_setComprehension3784);

            	    id2=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_setComprehension3788);

            	    match(input,T_COLON,FOLLOW_T_COLON_in_setComprehension3790);

            	    pushFollow(FOLLOW_complexType_in_setComprehension3794);
            	    t2=complexType();

            	    state._fsp--;


            	     addSetComprVar(_set, id2, t2);

            	    }
            	    break;

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


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:787:3: ( '&' epx= expression )?
            int alt84=2;
            final int LA84_0 = input.LA(1);

            if ( (LA84_0==116) ) {
                alt84=1;
            }
            switch (alt84) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:787:4: '&' epx= expression
                    {
                    match(input,116,FOLLOW_116_in_setComprehension3808);

                    pushFollow(FOLLOW_expression_in_setComprehension3814);
                    epx=expression();

                    state._fsp--;


                     addSetComprExpr(_set,epx);

                    }
                    break;

            }


            }

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

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



    // $ANTLR start "identifierExpression"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:792:1: identifierExpression returns [Expression result] : ({...}?aName= T_IDENTIFIER T_LPAREN m_params= methodCallParams T_RPAREN |res= reference );
    public final Expression identifierExpression() throws RecognitionException {
        Expression result = null;


        Token aName=null;
        ArrayList<Expression> m_params =null;

        Expression res =null;


        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:794:2: ({...}?aName= T_IDENTIFIER T_LPAREN m_params= methodCallParams T_RPAREN |res= reference )
            int alt85=2;
            alt85 = dfa85.predict(input);
            switch (alt85) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:795:3: {...}?aName= T_IDENTIFIER T_LPAREN m_params= methodCallParams T_RPAREN
                    {
                    if ( !((isTuple(input.LT(1).getText()))) ) {
                        throw new FailedPredicateException(input, "identifierExpression", "isTuple(input.LT(1).getText())");
                    }

                    aName=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_identifierExpression3850);

                    match(input,T_LPAREN,FOLLOW_T_LPAREN_in_identifierExpression3852);

                    pushFollow(FOLLOW_methodCallParams_in_identifierExpression3856);
                    m_params=methodCallParams();

                    state._fsp--;


                    match(input,T_RPAREN,FOLLOW_T_RPAREN_in_identifierExpression3858);

                    result = createInitializedTuple(aName,m_params);

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:799:3: res= reference
                    {
                    pushFollow(FOLLOW_reference_in_identifierExpression3873);
                    res=reference();

                    state._fsp--;


                    result = res;

                    }
                    break;

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

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



    // $ANTLR start "reference"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:804:1: reference returns [Expression result] :{...}?aName= qualifiedIdentifier (output= accessExpression[result] |) (pr= T_PRIMED | ( '::' T_LPAREN init= expression T_RPAREN )? afold= ( T_FOLDLR | T_FOLDRL ) T_LPAREN anexpr= expression T_RPAREN )? ;
    public final Expression reference() throws RecognitionException {
        Expression result = null;


        Token pr=null;
        Token afold=null;
        Expression aName =null;

        Expression output =null;

        Expression init =null;

        Expression anexpr =null;



        		result = null;
        		init = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:810:2: ({...}?aName= qualifiedIdentifier (output= accessExpression[result] |) (pr= T_PRIMED | ( '::' T_LPAREN init= expression T_RPAREN )? afold= ( T_FOLDLR | T_FOLDRL ) T_LPAREN anexpr= expression T_RPAREN )? )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:810:4: {...}?aName= qualifiedIdentifier (output= accessExpression[result] |) (pr= T_PRIMED | ( '::' T_LPAREN init= expression T_RPAREN )? afold= ( T_FOLDLR | T_FOLDRL ) T_LPAREN anexpr= expression T_RPAREN )?
            {
            if ( !((!isTuple(input.LT(1).getText()))) ) {
                throw new FailedPredicateException(input, "reference", "!isTuple(input.LT(1).getText())");
            }

            pushFollow(FOLLOW_qualifiedIdentifier_in_reference3911);
            aName=qualifiedIdentifier();

            state._fsp--;


            result = aName;

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:812:3: (output= accessExpression[result] |)
            int alt86=2;
            final int LA86_0 = input.LA(1);

            if ( ((LA86_0 >= T_LPAREN && LA86_0 <= T_LSQPAREN)) ) {
                alt86=1;
            }
            else if ( ((LA86_0 >= T_ACTIONS && LA86_0 <= T_ASSIGNMENT)||(LA86_0 >= T_BAR && LA86_0 <= T_BIIMPLIES)||LA86_0==T_CBRR||(LA86_0 >= T_COLON && LA86_0 <= T_COMMA)||LA86_0==T_CONC||LA86_0==T_DIFF||(LA86_0 >= T_DIV && LA86_0 <= T_DO)||(LA86_0 >= T_DOMRESBY && LA86_0 <= T_DOMRESTO)||(LA86_0 >= T_ELSE && LA86_0 <= T_EQUAL)||(LA86_0 >= T_FOLDLR && LA86_0 <= T_FOLDRL)||(LA86_0 >= T_GREATER && LA86_0 <= T_GREATEREQUAL)||LA86_0==T_IDIV||(LA86_0 >= T_IMPLIES && LA86_0 <= T_IN)||LA86_0==T_INTER||(LA86_0 >= T_LESS && LA86_0 <= T_LESSEQUAL)||LA86_0==T_MAPS||(LA86_0 >= T_METHODS && LA86_0 <= T_MUNION)||(LA86_0 >= T_NONDET && LA86_0 <= T_NOTEQUAL)||LA86_0==T_OR||(LA86_0 >= T_POW && LA86_0 <= T_PROD)||(LA86_0 >= T_RNGRESBY && LA86_0 <= T_RSQPAREN)||(LA86_0 >= T_SEMICOLON && LA86_0 <= T_SEQMOD_MAPOVERRIDE)||(LA86_0 >= T_SUBSET && LA86_0 <= T_SUM)||LA86_0==T_THEN||(LA86_0 >= T_TYPES && LA86_0 <= T_UNION)||LA86_0==T_WITH||(LA86_0 >= 117 && LA86_0 <= 119)) ) {
                alt86=2;
            }
            else {
                final NoViableAltException nvae =
                    new NoViableAltException("", 86, 0, input);

                throw nvae;

            }
            switch (alt86) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:812:5: output= accessExpression[result]
                    {
                    pushFollow(FOLLOW_accessExpression_in_reference3923);
                    output=accessExpression(result);

                    state._fsp--;


                    result = output;

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:815:3:
                    {
                    }
                    break;

            }


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:816:3: (pr= T_PRIMED | ( '::' T_LPAREN init= expression T_RPAREN )? afold= ( T_FOLDLR | T_FOLDRL ) T_LPAREN anexpr= expression T_RPAREN )?
            int alt88=3;
            final int LA88_0 = input.LA(1);

            if ( (LA88_0==T_PRIMED) ) {
                alt88=1;
            }
            else if ( ((LA88_0 >= T_FOLDLR && LA88_0 <= T_FOLDRL)||LA88_0==117) ) {
                alt88=2;
            }
            switch (alt88) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:816:6: pr= T_PRIMED
                    {
                    pr=(Token)match(input,T_PRIMED,FOLLOW_T_PRIMED_in_reference3948);

                    result = setIdentifierExpressionPrimed(result,pr);

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:818:5: ( '::' T_LPAREN init= expression T_RPAREN )? afold= ( T_FOLDLR | T_FOLDRL ) T_LPAREN anexpr= expression T_RPAREN
                    {
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:818:5: ( '::' T_LPAREN init= expression T_RPAREN )?
                    int alt87=2;
                    final int LA87_0 = input.LA(1);

                    if ( (LA87_0==117) ) {
                        alt87=1;
                    }
                    switch (alt87) {
                        case 1 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:818:6: '::' T_LPAREN init= expression T_RPAREN
                            {
                            match(input,117,FOLLOW_117_in_reference3964);

                            match(input,T_LPAREN,FOLLOW_T_LPAREN_in_reference3966);

                            pushFollow(FOLLOW_expression_in_reference3970);
                            init=expression();

                            state._fsp--;


                            match(input,T_RPAREN,FOLLOW_T_RPAREN_in_reference3972);

                            }
                            break;

                    }


                    afold=input.LT(1);

                    if ( (input.LA(1) >= T_FOLDLR && input.LA(1) <= T_FOLDRL) ) {
                        input.consume();
                        state.errorRecovery=false;
                    }
                    else {
                        final MismatchedSetException mse = new MismatchedSetException(null,input);
                        throw mse;
                    }


                    match(input,T_LPAREN,FOLLOW_T_LPAREN_in_reference3984);

                    pushFollow(FOLLOW_expression_in_reference3988);
                    anexpr=expression();

                    state._fsp--;


                    match(input,T_RPAREN,FOLLOW_T_RPAREN_in_reference3990);

                    result = createFoldExpression(result,afold,init,anexpr);

                    }
                    break;

            }


            }

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

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



    // $ANTLR start "accessExpression"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:823:1: accessExpression[Expression subexpr] returns [Expression result] : (tcall= T_LSQPAREN ac= expression T_RSQPAREN |bcall= T_LPAREN m_params= methodCallParams T_RPAREN )+ ( ( T_POINT idn= T_IDENTIFIER )+ (res= accessExpression[result] )? )? ;
    public final Expression accessExpression(Expression subexpr) throws RecognitionException {
        Expression result = null;


        Token tcall=null;
        Token bcall=null;
        Token idn=null;
        Expression ac =null;

        ArrayList<Expression> m_params =null;

        Expression res =null;



        		final UnaryOperator newExpr = null;
        		result = subexpr;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:829:2: ( (tcall= T_LSQPAREN ac= expression T_RSQPAREN |bcall= T_LPAREN m_params= methodCallParams T_RPAREN )+ ( ( T_POINT idn= T_IDENTIFIER )+ (res= accessExpression[result] )? )? )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:830:7: (tcall= T_LSQPAREN ac= expression T_RSQPAREN |bcall= T_LPAREN m_params= methodCallParams T_RPAREN )+ ( ( T_POINT idn= T_IDENTIFIER )+ (res= accessExpression[result] )? )?
            {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:830:7: (tcall= T_LSQPAREN ac= expression T_RSQPAREN |bcall= T_LPAREN m_params= methodCallParams T_RPAREN )+
            int cnt89=0;
            loop89:
            do {
                int alt89=3;
                final int LA89_0 = input.LA(1);

                if ( (LA89_0==T_LSQPAREN) ) {
                    alt89=1;
                }
                else if ( (LA89_0==T_LPAREN) ) {
                    alt89=2;
                }


                switch (alt89) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:830:9: tcall= T_LSQPAREN ac= expression T_RSQPAREN
            	    {
            	    tcall=(Token)match(input,T_LSQPAREN,FOLLOW_T_LSQPAREN_in_accessExpression4035);

            	    pushFollow(FOLLOW_expression_in_accessExpression4039);
            	    ac=expression();

            	    state._fsp--;


            	    match(input,T_RSQPAREN,FOLLOW_T_RSQPAREN_in_accessExpression4041);

            	     result = createTupleMapAccessExpression(result,ac,tcall);

            	    }
            	    break;
            	case 2 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:832:10: bcall= T_LPAREN m_params= methodCallParams T_RPAREN
            	    {
            	    bcall=(Token)match(input,T_LPAREN,FOLLOW_T_LPAREN_in_accessExpression4068);

            	    pushFollow(FOLLOW_methodCallParams_in_accessExpression4072);
            	    m_params=methodCallParams();

            	    state._fsp--;


            	    match(input,T_RPAREN,FOLLOW_T_RPAREN_in_accessExpression4074);

            	     result = createMethodAccessExpression(result,m_params,bcall);

            	    }
            	    break;

            	default :
            	    if ( cnt89 >= 1 ) break loop89;
                        final EarlyExitException eee =
                            new EarlyExitException(89, input);
                        throw eee;
                }
                cnt89++;
            } while (true);


            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:835:3: ( ( T_POINT idn= T_IDENTIFIER )+ (res= accessExpression[result] )? )?
            int alt92=2;
            final int LA92_0 = input.LA(1);

            if ( (LA92_0==T_POINT) ) {
                alt92=1;
            }
            switch (alt92) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:836:4: ( T_POINT idn= T_IDENTIFIER )+ (res= accessExpression[result] )?
                    {
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:836:4: ( T_POINT idn= T_IDENTIFIER )+
                    int cnt90=0;
                    loop90:
                    do {
                        int alt90=2;
                        final int LA90_0 = input.LA(1);

                        if ( (LA90_0==T_POINT) ) {
                            alt90=1;
                        }


                        switch (alt90) {
                    	case 1 :
                    	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:836:5: T_POINT idn= T_IDENTIFIER
                    	    {
                    	    match(input,T_POINT,FOLLOW_T_POINT_in_accessExpression4096);

                    	    idn=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_accessExpression4104);

                    	    result = addIdentifierAccessExpression(result,idn);

                    	    }
                    	    break;

                    	default :
                    	    if ( cnt90 >= 1 ) break loop90;
                                final EarlyExitException eee =
                                    new EarlyExitException(90, input);
                                throw eee;
                        }
                        cnt90++;
                    } while (true);


                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:839:4: (res= accessExpression[result] )?
                    int alt91=2;
                    final int LA91_0 = input.LA(1);

                    if ( ((LA91_0 >= T_LPAREN && LA91_0 <= T_LSQPAREN)) ) {
                        alt91=1;
                    }
                    switch (alt91) {
                        case 1 :
                            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:839:5: res= accessExpression[result]
                            {
                            pushFollow(FOLLOW_accessExpression_in_accessExpression4120);
                            res=accessExpression(result);

                            state._fsp--;


                            result=res;

                            }
                            break;

                    }


                    }
                    break;

            }


            }

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

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



    // $ANTLR start "qualifiedIdentifier"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:843:1: qualifiedIdentifier returns [Expression top] : (self= T_SELF T_POINT )? idb= T_IDENTIFIER ( T_POINT idd= T_IDENTIFIER )* ;
    public final Expression qualifiedIdentifier() throws RecognitionException {
        Expression top = null;


        Token self=null;
        Token idb=null;
        Token idd=null;


        		IdentifierExpression selfexpr = null;
        		top = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:849:2: ( (self= T_SELF T_POINT )? idb= T_IDENTIFIER ( T_POINT idd= T_IDENTIFIER )* )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:850:3: (self= T_SELF T_POINT )? idb= T_IDENTIFIER ( T_POINT idd= T_IDENTIFIER )*
            {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:850:3: (self= T_SELF T_POINT )?
            int alt93=2;
            final int LA93_0 = input.LA(1);

            if ( (LA93_0==T_SELF) ) {
                alt93=1;
            }
            switch (alt93) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:850:4: self= T_SELF T_POINT
                    {
                    self=(Token)match(input,T_SELF,FOLLOW_T_SELF_in_qualifiedIdentifier4159);

                    match(input,T_POINT,FOLLOW_T_POINT_in_qualifiedIdentifier4161);

                    selfexpr = createSelfIdentifierExpression(self);

                    }
                    break;

            }


            idb=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_qualifiedIdentifier4173);

            top = createIdentifierAccessExpression(selfexpr,idb);

            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:852:3: ( T_POINT idd= T_IDENTIFIER )*
            loop94:
            do {
                int alt94=2;
                final int LA94_0 = input.LA(1);

                if ( (LA94_0==T_POINT) ) {
                    alt94=1;
                }


                switch (alt94) {
            	case 1 :
            	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:852:4: T_POINT idd= T_IDENTIFIER
            	    {
            	    match(input,T_POINT,FOLLOW_T_POINT_in_qualifiedIdentifier4182);

            	    idd=(Token)match(input,T_IDENTIFIER,FOLLOW_T_IDENTIFIER_in_qualifiedIdentifier4186);

            	    top = addIdentifierAccessExpression(top,idd);

            	    }
            	    break;

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


            }

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

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



    // $ANTLR start "methodCallParams"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:856:1: methodCallParams returns [ArrayList<Expression> result] : (expa= expression ( T_COMMA expb= expression )* )? ;
    public final ArrayList<Expression> methodCallParams() throws RecognitionException {
        ArrayList<Expression> result = null;


        Expression expa =null;

        Expression expb =null;



        		result = new ArrayList<Expression>();

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:861:2: ( (expa= expression ( T_COMMA expb= expression )* )? )
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:861:4: (expa= expression ( T_COMMA expb= expression )* )?
            {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:861:4: (expa= expression ( T_COMMA expb= expression )* )?
            int alt96=2;
            final int LA96_0 = input.LA(1);

            if ( (LA96_0==T_ABS||(LA96_0 >= T_CARD && LA96_0 <= T_CBRL)||LA96_0==T_DCONC||LA96_0==T_DINTER||LA96_0==T_DOM||(LA96_0 >= T_DUNION && LA96_0 <= T_ELEMS)||(LA96_0 >= T_EXISTS && LA96_0 <= T_FALSE)||LA96_0==T_FLOATNUMBER||LA96_0==T_FORALL||(LA96_0 >= T_HEAD && LA96_0 <= T_IDENTIFIER)||LA96_0==T_IF||LA96_0==T_INDS||LA96_0==T_INTNUMBER||LA96_0==T_LEN||(LA96_0 >= T_LPAREN && LA96_0 <= T_LSQPAREN)||LA96_0==T_MERGE||LA96_0==T_MINUS||(LA96_0 >= T_NEW && LA96_0 <= T_NIL)||LA96_0==T_NOT||LA96_0==T_RNG||LA96_0==T_SELF||LA96_0==T_STRINGLITERAL||LA96_0==T_TAIL||LA96_0==T_TRUE) ) {
                alt96=1;
            }
            switch (alt96) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:861:5: expa= expression ( T_COMMA expb= expression )*
                    {
                    pushFollow(FOLLOW_expression_in_methodCallParams4219);
                    expa=expression();

                    state._fsp--;


                    result.add(expa);

                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:861:41: ( T_COMMA expb= expression )*
                    loop95:
                    do {
                        int alt95=2;
                        final int LA95_0 = input.LA(1);

                        if ( (LA95_0==T_COMMA) ) {
                            alt95=1;
                        }


                        switch (alt95) {
                    	case 1 :
                    	    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:861:42: T_COMMA expb= expression
                    	    {
                    	    match(input,T_COMMA,FOLLOW_T_COMMA_in_methodCallParams4224);

                    	    pushFollow(FOLLOW_expression_in_methodCallParams4228);
                    	    expb=expression();

                    	    state._fsp--;


                    	    result.add(expb);

                    	    }
                    	    break;

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


                    }
                    break;

            }


            }

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

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



    // $ANTLR start "op_un"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:871:1: op_un returns [UnaryOperator expr] : (r= op_un_set_list |r2= op_un_map | T_MINUS | T_NOT | T_ABS );
    public final UnaryOperator op_un() throws RecognitionException {
        UnaryOperator expr = null;


        UnaryOperator r =null;

        UnaryOperator r2 =null;



        		expr = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:876:2: (r= op_un_set_list |r2= op_un_map | T_MINUS | T_NOT | T_ABS )
            int alt97=5;
            switch ( input.LA(1) ) {
            case T_CARD:
            case T_DCONC:
            case T_DINTER:
            case T_DUNION:
            case T_ELEMS:
            case T_HEAD:
            case T_INDS:
            case T_LEN:
            case T_TAIL:
                {
                alt97=1;
                }
                break;
            case T_DOM:
            case T_MERGE:
            case T_RNG:
                {
                alt97=2;
                }
                break;
            case T_MINUS:
                {
                alt97=3;
                }
                break;
            case T_NOT:
                {
                alt97=4;
                }
                break;
            case T_ABS:
                {
                alt97=5;
                }
                break;
            default:
                final NoViableAltException nvae =
                    new NoViableAltException("", 97, 0, input);

                throw nvae;

            }

            switch (alt97) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:876:4: r= op_un_set_list
                    {
                    pushFollow(FOLLOW_op_un_set_list_in_op_un4267);
                    r=op_un_set_list();

                    state._fsp--;


                    expr = r;

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:877:4: r2= op_un_map
                    {
                    pushFollow(FOLLOW_op_un_map_in_op_un4276);
                    r2=op_un_map();

                    state._fsp--;


                    expr = r2;

                    }
                    break;
                case 3 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:878:4: T_MINUS
                    {
                    match(input,T_MINUS,FOLLOW_T_MINUS_in_op_un4284);

                    expr = createUnaryOperator(ExpressionKind.unminus);

                    }
                    break;
                case 4 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:879:4: T_NOT
                    {
                    match(input,T_NOT,FOLLOW_T_NOT_in_op_un4292);

                    expr = createUnaryOperator(ExpressionKind.not);

                    }
                    break;
                case 5 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:880:4: T_ABS
                    {
                    match(input,T_ABS,FOLLOW_T_ABS_in_op_un4300);

                    expr = createUnaryOperator(ExpressionKind.abs);

                    }
                    break;

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

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



    // $ANTLR start "op_un_set_list"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:884:1: op_un_set_list returns [UnaryOperator expr] : ( T_CARD | T_DCONC | T_DINTER | T_DUNION | T_ELEMS | T_HEAD | T_INDS | T_LEN | T_TAIL );
    public final UnaryOperator op_un_set_list() throws RecognitionException {
        UnaryOperator expr = null;



        		expr = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:889:2: ( T_CARD | T_DCONC | T_DINTER | T_DUNION | T_ELEMS | T_HEAD | T_INDS | T_LEN | T_TAIL )
            int alt98=9;
            switch ( input.LA(1) ) {
            case T_CARD:
                {
                alt98=1;
                }
                break;
            case T_DCONC:
                {
                alt98=2;
                }
                break;
            case T_DINTER:
                {
                alt98=3;
                }
                break;
            case T_DUNION:
                {
                alt98=4;
                }
                break;
            case T_ELEMS:
                {
                alt98=5;
                }
                break;
            case T_HEAD:
                {
                alt98=6;
                }
                break;
            case T_INDS:
                {
                alt98=7;
                }
                break;
            case T_LEN:
                {
                alt98=8;
                }
                break;
            case T_TAIL:
                {
                alt98=9;
                }
                break;
            default:
                final NoViableAltException nvae =
                    new NoViableAltException("", 98, 0, input);

                throw nvae;

            }

            switch (alt98) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:889:4: T_CARD
                    {
                    match(input,T_CARD,FOLLOW_T_CARD_in_op_un_set_list4327);

                    expr = createUnaryOperator(ExpressionKind.card);

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:891:4: T_DCONC
                    {
                    match(input,T_DCONC,FOLLOW_T_DCONC_in_op_un_set_list4338);

                    expr = createUnaryOperator(ExpressionKind.dconc);

                    }
                    break;
                case 3 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:893:4: T_DINTER
                    {
                    match(input,T_DINTER,FOLLOW_T_DINTER_in_op_un_set_list4349);

                    expr = createUnaryOperator(ExpressionKind.dinter);

                    }
                    break;
                case 4 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:895:4: T_DUNION
                    {
                    match(input,T_DUNION,FOLLOW_T_DUNION_in_op_un_set_list4359);

                    expr = createUnaryOperator(ExpressionKind.dunion);

                    }
                    break;
                case 5 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:897:4: T_ELEMS
                    {
                    match(input,T_ELEMS,FOLLOW_T_ELEMS_in_op_un_set_list4369);

                    expr = createUnaryOperator(ExpressionKind.elems);

                    }
                    break;
                case 6 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:899:4: T_HEAD
                    {
                    match(input,T_HEAD,FOLLOW_T_HEAD_in_op_un_set_list4380);

                    expr = createUnaryOperator(ExpressionKind.head);

                    }
                    break;
                case 7 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:901:4: T_INDS
                    {
                    match(input,T_INDS,FOLLOW_T_INDS_in_op_un_set_list4391);

                    expr = createUnaryOperator(ExpressionKind.inds);

                    }
                    break;
                case 8 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:903:4: T_LEN
                    {
                    match(input,T_LEN,FOLLOW_T_LEN_in_op_un_set_list4402);

                    expr = createUnaryOperator(ExpressionKind.len);

                    }
                    break;
                case 9 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:905:4: T_TAIL
                    {
                    match(input,T_TAIL,FOLLOW_T_TAIL_in_op_un_set_list4413);

                    expr = createUnaryOperator(ExpressionKind.tail);

                    }
                    break;

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

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



    // $ANTLR start "op_un_map"
    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:910:1: op_un_map returns [UnaryOperator expr] : ( T_DOM | T_RNG | T_MERGE );
    public final UnaryOperator op_un_map() throws RecognitionException {
        UnaryOperator expr = null;



        		expr = null;

        try {
            // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:915:2: ( T_DOM | T_RNG | T_MERGE )
            int alt99=3;
            switch ( input.LA(1) ) {
            case T_DOM:
                {
                alt99=1;
                }
                break;
            case T_RNG:
                {
                alt99=2;
                }
                break;
            case T_MERGE:
                {
                alt99=3;
                }
                break;
            default:
                final NoViableAltException nvae =
                    new NoViableAltException("", 99, 0, input);

                throw nvae;

            }

            switch (alt99) {
                case 1 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:915:4: T_DOM
                    {
                    match(input,T_DOM,FOLLOW_T_DOM_in_op_un_map4442);

                    expr = createUnaryOperator(ExpressionKind.dom);

                    }
                    break;
                case 2 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:917:4: T_RNG
                    {
                    match(input,T_RNG,FOLLOW_T_RNG_in_op_un_map4453);

                    expr = createUnaryOperator(ExpressionKind.range);

                    }
                    break;
                case 3 :
                    // /home/willi/svn/trunk/ooascompiler/ooasCompiler/src/org/momut/ooas/parser/ooa.g:919:4: T_MERGE
                    {
                    match(input,T_MERGE,FOLLOW_T_MERGE_in_op_un_map4464);

                    expr = createUnaryOperator(ExpressionKind.merge);

                    }
                    break;

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

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

    // Delegated rules


    protected DFA68 dfa68 = new DFA68(this);
    protected DFA85 dfa85 = new DFA85(this);
    static final String DFA68_eotS =
        "\101\uffff";
    static final String DFA68_eofS =
        "\101\uffff";
    static final String DFA68_minS =
        "\1\21\1\uffff\1\10\76\uffff";
    static final String DFA68_maxS =
        "\1\156\1\uffff\1\167\76\uffff";
    static final String DFA68_acceptS =
        "\1\uffff\1\1\1\uffff\1\2\5\uffff\1\3\2\uffff\1\4\1\5\63\uffff";
    static final String DFA68_specialS =
        "\101\uffff}>";
    static final String[] DFA68_transitionS = {
            "\1\11\27\uffff\1\14\1\3\1\uffff\1\3\2\uffff\1\14\3\uffff\1\1"+
            "\10\uffff\1\3\6\uffff\1\15\1\11\7\uffff\1\11\1\3\23\uffff\1"+
            "\2\5\uffff\1\3\6\uffff\1\3",
            "",
            "\2\3\2\uffff\2\3\4\uffff\1\3\1\uffff\2\3\1\uffff\1\3\4\uffff"+
            "\1\3\2\uffff\2\3\1\uffff\2\3\2\uffff\3\3\7\uffff\2\3\2\uffff"+
            "\1\3\1\uffff\2\3\3\uffff\1\3\3\uffff\2\3\5\uffff\1\3\1\uffff"+
            "\4\3\2\uffff\3\3\3\uffff\1\3\1\1\1\3\1\uffff\2\3\3\uffff\4\3"+
            "\1\uffff\2\3\4\uffff\2\3\2\uffff\1\3\2\uffff\2\3\1\uffff\1\3"+
            "\3\uffff\2\3",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA68_eot = DFA.unpackEncodedString(DFA68_eotS);
    static final short[] DFA68_eof = DFA.unpackEncodedString(DFA68_eofS);
    static final char[] DFA68_min = DFA.unpackEncodedStringToUnsignedChars(DFA68_minS);
    static final char[] DFA68_max = DFA.unpackEncodedStringToUnsignedChars(DFA68_maxS);
    static final short[] DFA68_accept = DFA.unpackEncodedString(DFA68_acceptS);
    static final short[] DFA68_special = DFA.unpackEncodedString(DFA68_specialS);
    static final short[][] DFA68_transition;

    static {
        final int numStates = DFA68_transitionS.length;
        DFA68_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA68_transition[i] = DFA.unpackEncodedString(DFA68_transitionS[i]);
        }
    }

    class DFA68 extends DFA {

        public DFA68(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 68;
            this.eot = DFA68_eot;
            this.eof = DFA68_eof;
            this.min = DFA68_min;
            this.max = DFA68_max;
            this.accept = DFA68_accept;
            this.special = DFA68_special;
            this.transition = DFA68_transition;
        }
        @Override
		public String getDescription() {
            return "653:19: (e= identifierExpression |e= constant |e= initializedComplexType |e= quantifierExpression | T_LPAREN e= expression T_RPAREN ( ( T_POINT idn= T_IDENTIFIER )+ (res= accessExpression[e] )? |e= accessExpression[e] )? )";
        }
    }
    static final String DFA85_eotS =
        "\74\uffff";
    static final String DFA85_eofS =
        "\74\uffff";
    static final String DFA85_minS =
        "\1\63\1\10\1\uffff\1\0\70\uffff";
    static final String DFA85_maxS =
        "\1\141\1\167\1\uffff\1\0\70\uffff";
    static final String DFA85_acceptS =
        "\2\uffff\1\2\70\uffff\1\1";
    static final String DFA85_specialS =
        "\3\uffff\1\0\70\uffff}>";
    static final String[] DFA85_transitionS = {
            "\1\1\55\uffff\1\2",
            "\2\2\2\uffff\2\2\4\uffff\1\2\1\uffff\2\2\1\uffff\1\2\4\uffff"+
            "\1\2\2\uffff\2\2\1\uffff\2\2\2\uffff\3\2\4\uffff\2\2\1\uffff"+
            "\2\2\2\uffff\1\2\1\uffff\2\2\3\uffff\1\2\3\uffff\2\2\2\uffff"+
            "\1\3\1\2\1\uffff\1\2\1\uffff\4\2\2\uffff\3\2\3\uffff\6\2\3\uffff"+
            "\4\2\1\uffff\2\2\4\uffff\2\2\2\uffff\1\2\2\uffff\2\2\1\uffff"+
            "\1\2\2\uffff\3\2",
            "",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA85_eot = DFA.unpackEncodedString(DFA85_eotS);
    static final short[] DFA85_eof = DFA.unpackEncodedString(DFA85_eofS);
    static final char[] DFA85_min = DFA.unpackEncodedStringToUnsignedChars(DFA85_minS);
    static final char[] DFA85_max = DFA.unpackEncodedStringToUnsignedChars(DFA85_maxS);
    static final short[] DFA85_accept = DFA.unpackEncodedString(DFA85_acceptS);
    static final short[] DFA85_special = DFA.unpackEncodedString(DFA85_specialS);
    static final short[][] DFA85_transition;

    static {
        final int numStates = DFA85_transitionS.length;
        DFA85_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA85_transition[i] = DFA.unpackEncodedString(DFA85_transitionS[i]);
        }
    }

    class DFA85 extends DFA {

        public DFA85(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 85;
            this.eot = DFA85_eot;
            this.eof = DFA85_eof;
            this.min = DFA85_min;
            this.max = DFA85_max;
            this.accept = DFA85_accept;
            this.special = DFA85_special;
            this.transition = DFA85_transition;
        }
        @Override
		public String getDescription() {
            return "792:1: identifierExpression returns [Expression result] : ({...}?aName= T_IDENTIFIER T_LPAREN m_params= methodCallParams T_RPAREN |res= reference );";
        }
        @Override
		public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            final TokenStream input = (TokenStream)_input;
        	final int _s = s;
            switch ( s ) {
                    case 0 :
                        final int LA85_3 = input.LA(1);


                        final int index85_3 = input.index();
                        input.rewind();

                        s = -1;
                        if ( ((isTuple(input.LT(1).getText()))) ) {s = 59;}

                        else if ( ((!isTuple(input.LT(1).getText()))) ) {s = 2;}


                        input.seek(index85_3);

                        if ( s>=0 ) return s;
                        break;
            }
            final NoViableAltException nvae =
                new NoViableAltException(getDescription(), 85, _s, input);
            error(nvae);
            throw nvae;
        }

    }


    public static final BitSet FOLLOW_T_CONSTS_in_ooActionSystems74 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_namedConstList_in_ooActionSystems76 = new BitSet(new long[]{0x0000000000000000L,0x0000800000000000L});
    public static final BitSet FOLLOW_T_TYPES_in_ooActionSystems86 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_namedTypeList_in_ooActionSystems94 = new BitSet(new long[]{0x0000000000000000L,0x0000040000000000L});
    public static final BitSet FOLLOW_T_SYSTEM_in_ooActionSystems99 = new BitSet(new long[]{0x0008000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_asTypeComposition_in_ooActionSystems106 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_namedConst_in_namedConstList129 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_T_SEMICOLON_in_namedConstList132 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_namedConst_in_namedConstList134 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_namedConst150 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_T_EQUAL_in_namedConst154 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_namedConst160 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_namedType_in_namedTypeList180 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_T_SEMICOLON_in_namedTypeList183 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_namedType_in_namedTypeList185 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_namedType201 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_T_EQUAL_in_namedType206 = new BitSet(new long[]{0x04080800000A4800L,0x000004000000003CL});
    public static final BitSet FOLLOW_complexType_in_namedType218 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ooActionSystem_in_namedType230 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_asTypeCompositionParallel_in_asTypeComposition266 = new BitSet(new long[]{0x0000000000000002L,0x0000000001000000L});
    public static final BitSet FOLLOW_T_PRIO_in_asTypeComposition271 = new BitSet(new long[]{0x0008000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_asTypeCompositionParallel_in_asTypeComposition273 = new BitSet(new long[]{0x0000000000000002L,0x0000000001000000L});
    public static final BitSet FOLLOW_asTypeCompositionSequential_in_asTypeCompositionParallel296 = new BitSet(new long[]{0x0000000000000002L,0x0000000000004000L});
    public static final BitSet FOLLOW_T_NONDET_in_asTypeCompositionParallel300 = new BitSet(new long[]{0x0008000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_asTypeCompositionSequential_in_asTypeCompositionParallel302 = new BitSet(new long[]{0x0000000000000002L,0x0000000000004000L});
    public static final BitSet FOLLOW_asTypeCompositionBlockParen_in_asTypeCompositionSequential324 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_LPAREN_in_asTypeCompositionBlockParen339 = new BitSet(new long[]{0x0008000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_asTypeComposition_in_asTypeCompositionBlockParen341 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_RPAREN_in_asTypeCompositionBlockParen344 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_asTypeCompositionBlockParen351 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_LIST_in_complexType382 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
    public static final BitSet FOLLOW_T_LSQPAREN_in_complexType385 = new BitSet(new long[]{0x1008000000000000L});
    public static final BitSet FOLLOW_set_in_complexType389 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
    public static final BitSet FOLLOW_T_RSQPAREN_in_complexType395 = new BitSet(new long[]{0x0000000000000000L,0x0000000000080000L});
    public static final BitSet FOLLOW_T_OF_in_complexType397 = new BitSet(new long[]{0x04080800000A4000L,0x000000000000003CL});
    public static final BitSet FOLLOW_complexType_in_complexType402 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_LSQPAREN_in_complexType417 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_complexType421 = new BitSet(new long[]{0x0000000000200000L,0x0000000100000000L});
    public static final BitSet FOLLOW_T_COMMA_in_complexType430 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_complexType434 = new BitSet(new long[]{0x0000000000200000L,0x0000000100000000L});
    public static final BitSet FOLLOW_T_RSQPAREN_in_complexType440 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_MAP_in_complexType450 = new BitSet(new long[]{0x04080800000A4000L,0x0000000000000010L});
    public static final BitSet FOLLOW_T_LSQPAREN_in_complexType455 = new BitSet(new long[]{0x1008000000000000L});
    public static final BitSet FOLLOW_set_in_complexType459 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
    public static final BitSet FOLLOW_T_RSQPAREN_in_complexType465 = new BitSet(new long[]{0x04080800000A4000L});
    public static final BitSet FOLLOW_simpleType_in_complexType471 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
    public static final BitSet FOLLOW_T_TO_in_complexType473 = new BitSet(new long[]{0x04080800000A4000L,0x000000000000003CL});
    public static final BitSet FOLLOW_complexType_in_complexType477 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_LPAREN_in_complexType492 = new BitSet(new long[]{0x04080800000A4000L,0x000000000000003CL});
    public static final BitSet FOLLOW_complexType_in_complexType496 = new BitSet(new long[]{0x0000000000200000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_COMMA_in_complexType505 = new BitSet(new long[]{0x04080800000A4000L,0x000000000000003CL});
    public static final BitSet FOLLOW_complexType_in_complexType509 = new BitSet(new long[]{0x0000000000200000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_RPAREN_in_complexType516 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_simpleType_in_complexType529 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_BOOL_in_simpleType562 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_INT_in_simpleType575 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
    public static final BitSet FOLLOW_T_LSQPAREN_in_simpleType577 = new BitSet(new long[]{0x1208000000000000L});
    public static final BitSet FOLLOW_set_in_simpleType581 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
    public static final BitSet FOLLOW_T_RANGETO_in_simpleType589 = new BitSet(new long[]{0x1208000000000000L});
    public static final BitSet FOLLOW_set_in_simpleType593 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
    public static final BitSet FOLLOW_T_RSQPAREN_in_simpleType601 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_FLOAT_in_simpleType620 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
    public static final BitSet FOLLOW_T_LSQPAREN_in_simpleType623 = new BitSet(new long[]{0x0208100000000000L});
    public static final BitSet FOLLOW_set_in_simpleType627 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
    public static final BitSet FOLLOW_T_RANGETO_in_simpleType635 = new BitSet(new long[]{0x0208100000000000L});
    public static final BitSet FOLLOW_set_in_simpleType639 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
    public static final BitSet FOLLOW_T_RSQPAREN_in_simpleType647 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_CHAR_in_simpleType665 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_CBRL_in_simpleType681 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_simpleType685 = new BitSet(new long[]{0x0000010000240000L});
    public static final BitSet FOLLOW_T_EQUAL_in_simpleType688 = new BitSet(new long[]{0x1000000000000000L});
    public static final BitSet FOLLOW_T_INTNUMBER_in_simpleType692 = new BitSet(new long[]{0x0000000000240000L});
    public static final BitSet FOLLOW_T_COMMA_in_simpleType703 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_simpleType707 = new BitSet(new long[]{0x0000010000240000L});
    public static final BitSet FOLLOW_T_EQUAL_in_simpleType710 = new BitSet(new long[]{0x1000000000000000L});
    public static final BitSet FOLLOW_T_INTNUMBER_in_simpleType714 = new BitSet(new long[]{0x0000000000240000L});
    public static final BitSet FOLLOW_T_CBRR_in_simpleType722 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_simpleType733 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_AUTOCONS_in_ooActionSystem776 = new BitSet(new long[]{0x0000000000000000L,0x0000040000000000L});
    public static final BitSet FOLLOW_T_SYSTEM_in_ooActionSystem785 = new BitSet(new long[]{0x0000000000000000L,0x0200000000000008L});
    public static final BitSet FOLLOW_T_LPAREN_in_ooActionSystem788 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_ooActionSystem792 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_RPAREN_in_ooActionSystem794 = new BitSet(new long[]{0x0000000000000000L,0x0200000000000000L});
    public static final BitSet FOLLOW_121_in_ooActionSystem807 = new BitSet(new long[]{0x0000000100000100L,0x0042000000000100L});
    public static final BitSet FOLLOW_T_VAR_in_ooActionSystem813 = new BitSet(new long[]{0x0008000002000000L,0x0000004000020000L});
    public static final BitSet FOLLOW_attrList_in_ooActionSystem815 = new BitSet(new long[]{0x0000000100000100L,0x0040000000000100L});
    public static final BitSet FOLLOW_T_METHODS_in_ooActionSystem823 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_methodList_in_ooActionSystem825 = new BitSet(new long[]{0x0000000100000100L,0x0040000000000000L});
    public static final BitSet FOLLOW_T_ACTIONS_in_ooActionSystem833 = new BitSet(new long[]{0x0008000002000000L,0x0000000000020000L});
    public static final BitSet FOLLOW_namedActionList_in_ooActionSystem835 = new BitSet(new long[]{0x0000000100000000L,0x0040000000000000L});
    public static final BitSet FOLLOW_T_DO_in_ooActionSystem843 = new BitSet(new long[]{0x0008000000000000L,0x0002002008040008L});
    public static final BitSet FOLLOW_actionBlock_in_ooActionSystem848 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
    public static final BitSet FOLLOW_T_OD_in_ooActionSystem855 = new BitSet(new long[]{0x0000000000000000L,0x0040000000000000L});
    public static final BitSet FOLLOW_118_in_ooActionSystem861 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_attr_in_attrList892 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_T_SEMICOLON_in_attrList895 = new BitSet(new long[]{0x0008000002000000L,0x0000004000020000L});
    public static final BitSet FOLLOW_attr_in_attrList897 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_T_STATIC_in_attr922 = new BitSet(new long[]{0x0008000002000000L,0x0000000000020000L});
    public static final BitSet FOLLOW_T_OBS_in_attr929 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_CTRL_in_attr935 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_attr946 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_T_COLON_in_attr949 = new BitSet(new long[]{0x04080800000A4000L,0x000000000000003CL});
    public static final BitSet FOLLOW_complexType_in_attr953 = new BitSet(new long[]{0x0000010000000002L});
    public static final BitSet FOLLOW_T_EQUAL_in_attr956 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_attr960 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_method_in_methodList982 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_T_SEMICOLON_in_methodList985 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_method_in_methodList987 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_method1009 = new BitSet(new long[]{0x0000010000100000L,0x0000000000000008L});
    public static final BitSet FOLLOW_T_LPAREN_in_method1017 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_methodParameterList_in_method1019 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_RPAREN_in_method1023 = new BitSet(new long[]{0x0000010000100000L});
    public static final BitSet FOLLOW_T_COLON_in_method1031 = new BitSet(new long[]{0x04080800000A4000L,0x000000000000003CL});
    public static final BitSet FOLLOW_complexType_in_method1035 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_T_EQUAL_in_method1045 = new BitSet(new long[]{0x2008000000008040L,0x0002002208000008L});
    public static final BitSet FOLLOW_T_VAR_in_method1053 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_localActionVars_in_method1055 = new BitSet(new long[]{0x0000000000000000L,0x0100000000000000L});
    public static final BitSet FOLLOW_120_in_method1058 = new BitSet(new long[]{0x2008000000008040L,0x0002002208000008L});
    public static final BitSet FOLLOW_actionBody_in_method1333 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_T_END_in_method1341 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_methodParameterList1365 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_T_COLON_in_methodParameterList1367 = new BitSet(new long[]{0x04080800000A4000L,0x000000000000003CL});
    public static final BitSet FOLLOW_complexType_in_methodParameterList1371 = new BitSet(new long[]{0x0000000000200002L});
    public static final BitSet FOLLOW_T_COMMA_in_methodParameterList1379 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_methodParameterList1383 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_T_COLON_in_methodParameterList1385 = new BitSet(new long[]{0x04080800000A4000L,0x000000000000003CL});
    public static final BitSet FOLLOW_complexType_in_methodParameterList1389 = new BitSet(new long[]{0x0000000000200002L});
    public static final BitSet FOLLOW_namedAction_in_namedActionList1416 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_T_SEMICOLON_in_namedActionList1419 = new BitSet(new long[]{0x0008000002000000L,0x0000000000020000L});
    public static final BitSet FOLLOW_namedAction_in_namedActionList1421 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_T_CTRL_in_namedAction1446 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_OBS_in_namedAction1451 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_namedAction1463 = new BitSet(new long[]{0x0000010000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_T_LPAREN_in_namedAction1471 = new BitSet(new long[]{0x0008000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_methodParameterList_in_namedAction1473 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_RPAREN_in_namedAction1478 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_T_EQUAL_in_namedAction1485 = new BitSet(new long[]{0x0000000000000000L,0x0002000008000000L});
    public static final BitSet FOLLOW_T_VAR_in_namedAction1491 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_localActionVars_in_namedAction1493 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
    public static final BitSet FOLLOW_discreteActionBody_in_namedAction1504 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_localActionVars1536 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_T_COLON_in_localActionVars1538 = new BitSet(new long[]{0x04080800000A4000L,0x000000000000003CL});
    public static final BitSet FOLLOW_complexType_in_localActionVars1542 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_T_SEMICOLON_in_localActionVars1551 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_localActionVars1555 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_T_COLON_in_localActionVars1557 = new BitSet(new long[]{0x04080800000A4000L,0x000000000000003CL});
    public static final BitSet FOLLOW_complexType_in_localActionVars1561 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_discreteActionBody_in_anonymousAction1594 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_REQUIRES_in_discreteActionBody1625 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_discreteActionBody1629 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_T_COLON_in_discreteActionBody1631 = new BitSet(new long[]{0x2008000000008040L,0x0002002208000008L});
    public static final BitSet FOLLOW_actionBody_in_discreteActionBody1638 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_T_END_in_discreteActionBody1643 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_actionBlockParallel_in_actionBlock1686 = new BitSet(new long[]{0x0000000000000002L,0x0000000001000000L});
    public static final BitSet FOLLOW_T_PRIO_in_actionBlock1690 = new BitSet(new long[]{0x0008000000000000L,0x0002002008000008L});
    public static final BitSet FOLLOW_actionBlockParallel_in_actionBlock1692 = new BitSet(new long[]{0x0000000000000002L,0x0000000001000000L});
    public static final BitSet FOLLOW_actionBlockSequential_in_actionBlockParallel1725 = new BitSet(new long[]{0x0000000000000002L,0x0000000000004000L});
    public static final BitSet FOLLOW_T_NONDET_in_actionBlockParallel1729 = new BitSet(new long[]{0x0008000000000000L,0x0002002008000008L});
    public static final BitSet FOLLOW_actionBlockSequential_in_actionBlockParallel1731 = new BitSet(new long[]{0x0000000000000002L,0x0000000000004000L});
    public static final BitSet FOLLOW_T_VAR_in_actionBlockSequential1765 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_blockvarlist_in_actionBlockSequential1769 = new BitSet(new long[]{0x0000000000100000L,0x0010000000000000L});
    public static final BitSet FOLLOW_116_in_actionBlockSequential1773 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_actionBlockSequential1777 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_T_COLON_in_actionBlockSequential1784 = new BitSet(new long[]{0x0008000000000000L,0x0000002008000008L});
    public static final BitSet FOLLOW_actionBlockParen_in_actionBlockSequential1793 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_T_SEMICOLON_in_actionBlockSequential1797 = new BitSet(new long[]{0x0008000000000000L,0x0000002008000008L});
    public static final BitSet FOLLOW_actionBlockParen_in_actionBlockSequential1799 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_T_LPAREN_in_actionBlockParen1823 = new BitSet(new long[]{0x0008000000000000L,0x0002002008000008L});
    public static final BitSet FOLLOW_actionBlock_in_actionBlockParen1825 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_RPAREN_in_actionBlockParen1828 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_anonymousOrNamedAction_in_actionBlockParen1833 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_anonymousAction_in_anonymousOrNamedAction1850 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_anonymousOrNamedAction1859 = new BitSet(new long[]{0x0000600000000002L,0x0000000000000008L});
    public static final BitSet FOLLOW_T_LPAREN_in_anonymousOrNamedAction1873 = new BitSet(new long[]{0x512C963244030080L,0x000048829000B298L});
    public static final BitSet FOLLOW_methodCallParams_in_anonymousOrNamedAction1878 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_RPAREN_in_anonymousOrNamedAction1880 = new BitSet(new long[]{0x0000600000000002L});
    public static final BitSet FOLLOW_set_in_anonymousOrNamedAction1898 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_T_LPAREN_in_anonymousOrNamedAction1904 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_anonymousOrNamedAction1908 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_RPAREN_in_anonymousOrNamedAction1910 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_SKIP_in_anonymousOrNamedAction1921 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_blockvar_in_blockvarlist1937 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_T_SEMICOLON_in_blockvarlist1942 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_blockvar_in_blockvarlist1944 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_blockvar1964 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_T_COLON_in_blockvar1967 = new BitSet(new long[]{0x04080800000A4000L,0x000000000000003CL});
    public static final BitSet FOLLOW_complexType_in_blockvar1971 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_actionBodyParallel_in_actionBody2006 = new BitSet(new long[]{0x0000000000000002L,0x0000000001000000L});
    public static final BitSet FOLLOW_T_PRIO_in_actionBody2010 = new BitSet(new long[]{0x2008000000008040L,0x0002002208000008L});
    public static final BitSet FOLLOW_actionBodyParallel_in_actionBody2012 = new BitSet(new long[]{0x0000000000000002L,0x0000000001000000L});
    public static final BitSet FOLLOW_actionBodySequential_in_actionBodyParallel2046 = new BitSet(new long[]{0x0000000000000002L,0x0000000000004000L});
    public static final BitSet FOLLOW_T_NONDET_in_actionBodyParallel2052 = new BitSet(new long[]{0x2008000000008040L,0x0002002208000008L});
    public static final BitSet FOLLOW_actionBodySequential_in_actionBodyParallel2056 = new BitSet(new long[]{0x0000000000000002L,0x0000000000004000L});
    public static final BitSet FOLLOW_T_VAR_in_actionBodySequential2092 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_blockvarlist_in_actionBodySequential2096 = new BitSet(new long[]{0x0000000000100000L,0x0010000000000000L});
    public static final BitSet FOLLOW_116_in_actionBodySequential2100 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_actionBodySequential2104 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_T_COLON_in_actionBodySequential2111 = new BitSet(new long[]{0x2008000000008040L,0x0000002208000008L});
    public static final BitSet FOLLOW_actionBodyParen_in_actionBodySequential2119 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_T_SEMICOLON_in_actionBodySequential2123 = new BitSet(new long[]{0x2008000000008040L,0x0000002208000008L});
    public static final BitSet FOLLOW_actionBodyParen_in_actionBodySequential2125 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
    public static final BitSet FOLLOW_T_LPAREN_in_actionBodyParen2153 = new BitSet(new long[]{0x2008000000008040L,0x0002002208000008L});
    public static final BitSet FOLLOW_actionBody_in_actionBodyParen2155 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_RPAREN_in_actionBodyParen2159 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_statement_in_actionBodyParen2166 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_ABORT_in_statement2194 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_SKIP_in_statement2201 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_BREAK_in_statement2208 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_KILL_in_statement2215 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_T_LPAREN_in_statement2217 = new BitSet(new long[]{0x0008000000000000L,0x0000000200000000L});
    public static final BitSet FOLLOW_set_in_statement2221 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_RPAREN_in_statement2229 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_discreteActionBody_in_statement2239 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_reference_in_statement2248 = new BitSet(new long[]{0x0000000000200402L});
    public static final BitSet FOLLOW_T_ASSIGNMENT_in_statement2276 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_statement2281 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
    public static final BitSet FOLLOW_T_WITH_in_statement2301 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_statement2305 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_COMMA_in_statement2358 = new BitSet(new long[]{0x0008000000000000L,0x0000000200000000L});
    public static final BitSet FOLLOW_reference_in_statement2362 = new BitSet(new long[]{0x0000000000200400L});
    public static final BitSet FOLLOW_T_ASSIGNMENT_in_statement2377 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_statement2399 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_T_COMMA_in_statement2418 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_statement2422 = new BitSet(new long[]{0x0000000000200002L,0x0004000000000000L});
    public static final BitSet FOLLOW_T_WITH_in_statement2436 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_statement2440 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_atomExpression_in_expression2515 = new BitSet(new long[]{0x88D3010C90802202L,0x0001030862518E01L});
    public static final BitSet FOLLOW_binoperator_in_expression2528 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_atomExpression_in_expression2536 = new BitSet(new long[]{0x88D3010C90802202L,0x0001030862518E01L});
    public static final BitSet FOLLOW_T_BIIMPLIES_in_binoperator2569 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_GREATER_in_binoperator2578 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_GREATEREQUAL_in_binoperator2588 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_LESS_in_binoperator2597 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_LESSEQUAL_in_binoperator2607 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_EQUAL_in_binoperator2616 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_NOTEQUAL_in_binoperator2628 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_IMPLIES_in_binoperator2639 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_MINUS_in_binoperator2648 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_SUM_in_binoperator2658 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_IN_in_binoperator2668 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
    public static final BitSet FOLLOW_T_SET_in_binoperator2670 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_NOT_in_binoperator2681 = new BitSet(new long[]{0x0080000000000000L});
    public static final BitSet FOLLOW_T_IN_in_binoperator2683 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
    public static final BitSet FOLLOW_T_SET_in_binoperator2685 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_SUBSET_in_binoperator2696 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_OR_in_binoperator2706 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_DIV_in_binoperator2715 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_PROD_in_binoperator2724 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_IDIV_in_binoperator2734 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_MOD_in_binoperator2744 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_UNION_in_binoperator2754 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_DIFF_in_binoperator2765 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_INTER_in_binoperator2776 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_AND_in_binoperator2787 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_POW_in_binoperator2802 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_CONC_in_binoperator2817 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_DOMRESBY_in_binoperator2830 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_DOMRESTO_in_binoperator2840 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_RNGRESBY_in_binoperator2850 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_RNGRESTO_in_binoperator2860 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_MUNION_in_binoperator2870 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_SEQMOD_MAPOVERRIDE_in_binoperator2880 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_op_un_in_atomExpression2918 = new BitSet(new long[]{0x1008960000020000L,0x0000408200003018L});
    public static final BitSet FOLLOW_identifierExpression_in_atomExpression2935 = new BitSet(new long[]{0x0000000000000002L,0x0080000000000000L});
    public static final BitSet FOLLOW_constant_in_atomExpression2946 = new BitSet(new long[]{0x0000000000000002L,0x0080000000000000L});
    public static final BitSet FOLLOW_initializedComplexType_in_atomExpression2957 = new BitSet(new long[]{0x0000000000000002L,0x0080000000000000L});
    public static final BitSet FOLLOW_quantifierExpression_in_atomExpression2969 = new BitSet(new long[]{0x0000000000000002L,0x0080000000000000L});
    public static final BitSet FOLLOW_T_LPAREN_in_atomExpression2978 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_atomExpression2982 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_RPAREN_in_atomExpression2984 = new BitSet(new long[]{0x0000000000000002L,0x0080000000200018L});
    public static final BitSet FOLLOW_T_POINT_in_atomExpression3007 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_atomExpression3019 = new BitSet(new long[]{0x0000000000000002L,0x0080000000200018L});
    public static final BitSet FOLLOW_accessExpression_in_atomExpression3043 = new BitSet(new long[]{0x0000000000000002L,0x0080000000000000L});
    public static final BitSet FOLLOW_accessExpression_in_atomExpression3063 = new BitSet(new long[]{0x0000000000000002L,0x0080000000000000L});
    public static final BitSet FOLLOW_119_in_atomExpression3082 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_atomExpression3086 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_IF_in_atomExpression3107 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_atomExpression3111 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
    public static final BitSet FOLLOW_T_THEN_in_atomExpression3113 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_atomExpression3117 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_T_ELSE_in_atomExpression3119 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_atomExpression3123 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_T_END_in_atomExpression3125 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_set_in_quantifierExpression3157 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_quantifierExpression3174 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_T_COLON_in_quantifierExpression3177 = new BitSet(new long[]{0x04080800000A4000L});
    public static final BitSet FOLLOW_simpleType_in_quantifierExpression3181 = new BitSet(new long[]{0x0000000000300000L});
    public static final BitSet FOLLOW_T_COMMA_in_quantifierExpression3192 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_quantifierExpression3196 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_T_COLON_in_quantifierExpression3199 = new BitSet(new long[]{0x04080800000A4000L});
    public static final BitSet FOLLOW_simpleType_in_quantifierExpression3203 = new BitSet(new long[]{0x0000000000300000L});
    public static final BitSet FOLLOW_T_COLON_in_quantifierExpression3213 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_T_LPAREN_in_quantifierExpression3215 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_quantifierExpression3219 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_RPAREN_in_quantifierExpression3221 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_TRUE_in_constant3255 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_FALSE_in_constant3263 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_NIL_in_constant3270 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_SELF_in_constant3278 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_FLOATNUMBER_in_constant3289 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_INTNUMBER_in_constant3298 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_STRINGLITERAL_in_constant3307 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_initializedListType_in_initializedComplexType3334 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_initializedSetType_in_initializedComplexType3343 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_NEW_in_initializedComplexType3351 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_T_LPAREN_in_initializedComplexType3353 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_initializedComplexType3357 = new BitSet(new long[]{0x0000000000200000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_COMMA_in_initializedComplexType3369 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
    public static final BitSet FOLLOW_T_STRINGLITERAL_in_initializedComplexType3374 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_RPAREN_in_initializedComplexType3376 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_RPAREN_in_initializedComplexType3385 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_LSQPAREN_in_initializedListType3416 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_initializedListType3420 = new BitSet(new long[]{0x0000000000201000L,0x0000000100000000L});
    public static final BitSet FOLLOW_T_COMMA_in_initializedListType3431 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_initializedListType3435 = new BitSet(new long[]{0x0000000000200000L,0x0000000100000000L});
    public static final BitSet FOLLOW_listComprehension_in_initializedListType3447 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
    public static final BitSet FOLLOW_T_RSQPAREN_in_initializedListType3455 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_BAR_in_listComprehension3486 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
    public static final BitSet FOLLOW_T_VAR_in_listComprehension3488 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_listComprehension3494 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_T_COLON_in_listComprehension3497 = new BitSet(new long[]{0x04080800000A4000L,0x000000000000003CL});
    public static final BitSet FOLLOW_complexType_in_listComprehension3501 = new BitSet(new long[]{0x0000000000000002L,0x0010000400000000L});
    public static final BitSet FOLLOW_T_SEMICOLON_in_listComprehension3510 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_listComprehension3514 = new BitSet(new long[]{0x04080800000A4000L,0x000000000000003CL});
    public static final BitSet FOLLOW_complexType_in_listComprehension3519 = new BitSet(new long[]{0x0000000000000002L,0x0010000400000000L});
    public static final BitSet FOLLOW_116_in_listComprehension3529 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_listComprehension3535 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_CBRL_in_initializedSetType3561 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
    public static final BitSet FOLLOW_T_MAPS_in_initializedSetType3563 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_T_CBRR_in_initializedSetType3565 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_initializedSet_in_initializedSetType3576 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_CBRL_in_initializedSet3602 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_initializedSet3606 = new BitSet(new long[]{0x0000000000241000L,0x0000000000000040L});
    public static final BitSet FOLLOW_T_COMMA_in_initializedSet3636 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_initializedSet3640 = new BitSet(new long[]{0x0000000000240000L});
    public static final BitSet FOLLOW_map_in_initializedSet3658 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_setComprehension_in_initializedSet3671 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_T_CBRR_in_initializedSet3681 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_MAPS_in_map3717 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_map3721 = new BitSet(new long[]{0x0000000000200002L});
    public static final BitSet FOLLOW_T_COMMA_in_map3729 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_map3733 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
    public static final BitSet FOLLOW_T_MAPS_in_map3735 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_map3739 = new BitSet(new long[]{0x0000000000200002L});
    public static final BitSet FOLLOW_T_BAR_in_setComprehension3761 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
    public static final BitSet FOLLOW_T_VAR_in_setComprehension3763 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_setComprehension3767 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_T_COLON_in_setComprehension3770 = new BitSet(new long[]{0x04080800000A4000L,0x000000000000003CL});
    public static final BitSet FOLLOW_complexType_in_setComprehension3774 = new BitSet(new long[]{0x0000000000000002L,0x0010000400000000L});
    public static final BitSet FOLLOW_T_SEMICOLON_in_setComprehension3784 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_setComprehension3788 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_T_COLON_in_setComprehension3790 = new BitSet(new long[]{0x04080800000A4000L,0x000000000000003CL});
    public static final BitSet FOLLOW_complexType_in_setComprehension3794 = new BitSet(new long[]{0x0000000000000002L,0x0010000400000000L});
    public static final BitSet FOLLOW_116_in_setComprehension3808 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_setComprehension3814 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_identifierExpression3850 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_T_LPAREN_in_identifierExpression3852 = new BitSet(new long[]{0x512C963244030080L,0x000048829000B298L});
    public static final BitSet FOLLOW_methodCallParams_in_identifierExpression3856 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_RPAREN_in_identifierExpression3858 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_reference_in_identifierExpression3873 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_qualifiedIdentifier_in_reference3911 = new BitSet(new long[]{0x0000600000000002L,0x0020000000800018L});
    public static final BitSet FOLLOW_accessExpression_in_reference3923 = new BitSet(new long[]{0x0000600000000002L,0x0020000000800000L});
    public static final BitSet FOLLOW_T_PRIMED_in_reference3948 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_117_in_reference3964 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_T_LPAREN_in_reference3966 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_reference3970 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_RPAREN_in_reference3972 = new BitSet(new long[]{0x0000600000000000L});
    public static final BitSet FOLLOW_set_in_reference3978 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_T_LPAREN_in_reference3984 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_reference3988 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_RPAREN_in_reference3990 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_LSQPAREN_in_accessExpression4035 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_accessExpression4039 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
    public static final BitSet FOLLOW_T_RSQPAREN_in_accessExpression4041 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200018L});
    public static final BitSet FOLLOW_T_LPAREN_in_accessExpression4068 = new BitSet(new long[]{0x512C963244030080L,0x000048829000B298L});
    public static final BitSet FOLLOW_methodCallParams_in_accessExpression4072 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
    public static final BitSet FOLLOW_T_RPAREN_in_accessExpression4074 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200018L});
    public static final BitSet FOLLOW_T_POINT_in_accessExpression4096 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_accessExpression4104 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200018L});
    public static final BitSet FOLLOW_accessExpression_in_accessExpression4120 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_SELF_in_qualifiedIdentifier4159 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_T_POINT_in_qualifiedIdentifier4161 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_qualifiedIdentifier4173 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
    public static final BitSet FOLLOW_T_POINT_in_qualifiedIdentifier4182 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_T_IDENTIFIER_in_qualifiedIdentifier4186 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
    public static final BitSet FOLLOW_expression_in_methodCallParams4219 = new BitSet(new long[]{0x0000000000200002L});
    public static final BitSet FOLLOW_T_COMMA_in_methodCallParams4224 = new BitSet(new long[]{0x512C963244030080L,0x000048821000B298L});
    public static final BitSet FOLLOW_expression_in_methodCallParams4228 = new BitSet(new long[]{0x0000000000200002L});
    public static final BitSet FOLLOW_op_un_set_list_in_op_un4267 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_op_un_map_in_op_un4276 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_MINUS_in_op_un4284 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_NOT_in_op_un4292 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_ABS_in_op_un4300 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_CARD_in_op_un_set_list4327 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_DCONC_in_op_un_set_list4338 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_DINTER_in_op_un_set_list4349 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_DUNION_in_op_un_set_list4359 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_ELEMS_in_op_un_set_list4369 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_HEAD_in_op_un_set_list4380 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_INDS_in_op_un_set_list4391 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_LEN_in_op_un_set_list4402 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_TAIL_in_op_un_set_list4413 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_DOM_in_op_un_map4442 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_RNG_in_op_un_map4453 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_T_MERGE_in_op_un_map4464 = new BitSet(new long[]{0x0000000000000002L});

}