package org.eclipse.emf.ecore.xcore.parser.antlr.internal;

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.eclipse.emf.ecore.xcore.services.XcoreGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
@SuppressWarnings("all")
public class InternalXcoreParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_STRING", "RULE_ID", "RULE_INT", "RULE_HEX", "RULE_DECIMAL", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'package'", "'@'", "'('", "','", "')'", "'='", "'import'", "'annotation'", "'as'", "'type'", "'<'", "'>'", "'wraps'", "'create'", "'convert'", "'enum'", "'{'", "'}'", "'-'", "'abstract'", "'class'", "'interface'", "'extends'", "'unordered'", "'unique'", "'readonly'", "'transient'", "'volatile'", "'unsettable'", "'derived'", "'id'", "'get'", "'set'", "'isSet'", "'unset'", "'contains'", "'resolving'", "'container'", "'refers'", "'local'", "'opposite'", "'keys'", "'op'", "'void'", "'throws'", "'&'", "'['", "'?'", "'*'", "'+'", "'..'", "']'", "';'", "'super'", "'.'", "'extension'", "'static'", "'+='", "'-='", "'*='", "'/='", "'%='", "'>='", "'||'", "'&&'", "'=='", "'!='", "'==='", "'!=='", "'instanceof'", "'->'", "'..<'", "'=>'", "'<>'", "'?:'", "'**'", "'/'", "'%'", "'!'", "'++'", "'--'", "'::'", "'?.'", "'#'", "'|'", "'if'", "'else'", "'switch'", "':'", "'default'", "'case'", "'for'", "'while'", "'do'", "'var'", "'val'", "'new'", "'false'", "'true'", "'null'", "'typeof'", "'throw'", "'return'", "'try'", "'finally'", "'synchronized'", "'catch'"
    };
    public static final int RULE_HEX=7;
    public static final int T__50=50;
    public static final int T__59=59;
    public static final int T__55=55;
    public static final int T__56=56;
    public static final int T__57=57;
    public static final int T__58=58;
    public static final int T__51=51;
    public static final int T__52=52;
    public static final int T__53=53;
    public static final int T__54=54;
    public static final int T__60=60;
    public static final int T__61=61;
    public static final int RULE_ID=5;
    public static final int RULE_INT=6;
    public static final int T__66=66;
    public static final int RULE_ML_COMMENT=9;
    public static final int T__67=67;
    public static final int T__68=68;
    public static final int T__69=69;
    public static final int T__62=62;
    public static final int T__63=63;
    public static final int T__64=64;
    public static final int T__65=65;
    public static final int T__37=37;
    public static final int T__38=38;
    public static final int T__39=39;
    public static final int T__33=33;
    public static final int T__34=34;
    public static final int T__35=35;
    public static final int T__36=36;
    public static final int T__30=30;
    public static final int T__31=31;
    public static final int T__32=32;
    public static final int T__48=48;
    public static final int T__49=49;
    public static final int T__44=44;
    public static final int T__45=45;
    public static final int T__46=46;
    public static final int T__47=47;
    public static final int T__40=40;
    public static final int T__41=41;
    public static final int T__42=42;
    public static final int T__43=43;
    public static final int T__91=91;
    public static final int T__100=100;
    public static final int T__92=92;
    public static final int T__93=93;
    public static final int T__102=102;
    public static final int T__94=94;
    public static final int T__101=101;
    public static final int T__90=90;
    public static final int T__19=19;
    public static final int T__15=15;
    public static final int T__16=16;
    public static final int T__17=17;
    public static final int T__18=18;
    public static final int T__99=99;
    public static final int T__13=13;
    public static final int T__14=14;
    public static final int T__95=95;
    public static final int T__96=96;
    public static final int T__97=97;
    public static final int T__98=98;
    public static final int RULE_DECIMAL=8;
    public static final int T__26=26;
    public static final int T__27=27;
    public static final int T__28=28;
    public static final int T__29=29;
    public static final int T__22=22;
    public static final int T__23=23;
    public static final int T__24=24;
    public static final int T__25=25;
    public static final int T__20=20;
    public static final int T__21=21;
    public static final int T__70=70;
    public static final int T__71=71;
    public static final int T__72=72;
    public static final int RULE_STRING=4;
    public static final int RULE_SL_COMMENT=10;
    public static final int T__77=77;
    public static final int T__119=119;
    public static final int T__78=78;
    public static final int T__118=118;
    public static final int T__79=79;
    public static final int T__73=73;
    public static final int T__115=115;
    public static final int EOF=-1;
    public static final int T__74=74;
    public static final int T__114=114;
    public static final int T__75=75;
    public static final int T__117=117;
    public static final int T__76=76;
    public static final int T__116=116;
    public static final int T__80=80;
    public static final int T__111=111;
    public static final int T__81=81;
    public static final int T__110=110;
    public static final int T__82=82;
    public static final int T__113=113;
    public static final int T__83=83;
    public static final int T__112=112;
    public static final int RULE_WS=11;
    public static final int RULE_ANY_OTHER=12;
    public static final int T__88=88;
    public static final int T__108=108;
    public static final int T__89=89;
    public static final int T__107=107;
    public static final int T__109=109;
    public static final int T__84=84;
    public static final int T__104=104;
    public static final int T__85=85;
    public static final int T__103=103;
    public static final int T__86=86;
    public static final int T__106=106;
    public static final int T__87=87;
    public static final int T__105=105;

    // delegates
    // delegators


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

    public String[] getTokenNames() { return InternalXcoreParser.tokenNames; }
    public String getGrammarFileName() { return "InternalXcore.g"; }



     	private XcoreGrammarAccess grammarAccess;

        public InternalXcoreParser(TokenStream input, XcoreGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }

        @Override
        protected String getFirstRuleName() {
        	return "XPackage";
       	}

       	@Override
       	protected XcoreGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}




    // $ANTLR start "entryRuleXPackage"
    // InternalXcore.g:64:1: entryRuleXPackage returns [EObject current=null] : iv_ruleXPackage= ruleXPackage EOF ;
    public final EObject entryRuleXPackage() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXPackage = null;


        try {
            // InternalXcore.g:64:49: (iv_ruleXPackage= ruleXPackage EOF )
            // InternalXcore.g:65:2: iv_ruleXPackage= ruleXPackage EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXPackageRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXPackage=ruleXPackage();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXPackage; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXPackage"


    // $ANTLR start "ruleXPackage"
    // InternalXcore.g:71:1: ruleXPackage returns [EObject current=null] : ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* otherlv_2= 'package' ( (lv_name_3_0= ruleQualifiedName ) ) ( (lv_importDirectives_4_0= ruleXImportDirective ) )* ( ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (lv_annotationDirectives_5_0= ruleXAnnotationDirective ) )* ( (lv_classifiers_6_0= ruleXClassifier ) )* ) ;
    public final EObject ruleXPackage() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        EObject lv_annotations_1_0 = null;

        AntlrDatatypeRuleToken lv_name_3_0 = null;

        EObject lv_importDirectives_4_0 = null;

        EObject lv_annotationDirectives_5_0 = null;

        EObject lv_classifiers_6_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:77:2: ( ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* otherlv_2= 'package' ( (lv_name_3_0= ruleQualifiedName ) ) ( (lv_importDirectives_4_0= ruleXImportDirective ) )* ( ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (lv_annotationDirectives_5_0= ruleXAnnotationDirective ) )* ( (lv_classifiers_6_0= ruleXClassifier ) )* ) )
            // InternalXcore.g:78:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* otherlv_2= 'package' ( (lv_name_3_0= ruleQualifiedName ) ) ( (lv_importDirectives_4_0= ruleXImportDirective ) )* ( ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (lv_annotationDirectives_5_0= ruleXAnnotationDirective ) )* ( (lv_classifiers_6_0= ruleXClassifier ) )* )
            {
            // InternalXcore.g:78:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* otherlv_2= 'package' ( (lv_name_3_0= ruleQualifiedName ) ) ( (lv_importDirectives_4_0= ruleXImportDirective ) )* ( ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (lv_annotationDirectives_5_0= ruleXAnnotationDirective ) )* ( (lv_classifiers_6_0= ruleXClassifier ) )* )
            // InternalXcore.g:79:3: () ( (lv_annotations_1_0= ruleXAnnotation ) )* otherlv_2= 'package' ( (lv_name_3_0= ruleQualifiedName ) ) ( (lv_importDirectives_4_0= ruleXImportDirective ) )* ( ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (lv_annotationDirectives_5_0= ruleXAnnotationDirective ) )* ( (lv_classifiers_6_0= ruleXClassifier ) )*
            {
            // InternalXcore.g:79:3: ()
            // InternalXcore.g:80:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXPackageAccess().getXPackageAction_0(),
              					current);
              			
            }

            }

            // InternalXcore.g:86:3: ( (lv_annotations_1_0= ruleXAnnotation ) )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

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


                switch (alt1) {
            	case 1 :
            	    // InternalXcore.g:87:4: (lv_annotations_1_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:87:4: (lv_annotations_1_0= ruleXAnnotation )
            	    // InternalXcore.g:88:5: lv_annotations_1_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getXPackageAccess().getAnnotationsXAnnotationParserRuleCall_1_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_3);
            	    lv_annotations_1_0=ruleXAnnotation();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getXPackageRule());
            	      					}
            	      					add(
            	      						current,
            	      						"annotations",
            	      						lv_annotations_1_0,
            	      						"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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

            otherlv_2=(Token)match(input,13,FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getXPackageAccess().getPackageKeyword_2());
              		
            }
            // InternalXcore.g:109:3: ( (lv_name_3_0= ruleQualifiedName ) )
            // InternalXcore.g:110:4: (lv_name_3_0= ruleQualifiedName )
            {
            // InternalXcore.g:110:4: (lv_name_3_0= ruleQualifiedName )
            // InternalXcore.g:111:5: lv_name_3_0= ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXPackageAccess().getNameQualifiedNameParserRuleCall_3_0());
              				
            }
            pushFollow(FOLLOW_5);
            lv_name_3_0=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXPackageRule());
              					}
              					set(
              						current,
              						"name",
              						lv_name_3_0,
              						"org.eclipse.xtext.xbase.Xbase.QualifiedName");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalXcore.g:128:3: ( (lv_importDirectives_4_0= ruleXImportDirective ) )*
            loop2:
            do {
                int alt2=2;
                int LA2_0 = input.LA(1);

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


                switch (alt2) {
            	case 1 :
            	    // InternalXcore.g:129:4: (lv_importDirectives_4_0= ruleXImportDirective )
            	    {
            	    // InternalXcore.g:129:4: (lv_importDirectives_4_0= ruleXImportDirective )
            	    // InternalXcore.g:130:5: lv_importDirectives_4_0= ruleXImportDirective
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getXPackageAccess().getImportDirectivesXImportDirectiveParserRuleCall_4_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_5);
            	    lv_importDirectives_4_0=ruleXImportDirective();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getXPackageRule());
            	      					}
            	      					add(
            	      						current,
            	      						"importDirectives",
            	      						lv_importDirectives_4_0,
            	      						"org.eclipse.emf.ecore.xcore.Xcore.XImportDirective");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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

            // InternalXcore.g:147:3: ( ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (lv_annotationDirectives_5_0= ruleXAnnotationDirective ) )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==20) && (synpred1_InternalXcore())) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // InternalXcore.g:148:4: ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (lv_annotationDirectives_5_0= ruleXAnnotationDirective )
            	    {
            	    // InternalXcore.g:157:4: (lv_annotationDirectives_5_0= ruleXAnnotationDirective )
            	    // InternalXcore.g:158:5: lv_annotationDirectives_5_0= ruleXAnnotationDirective
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getXPackageAccess().getAnnotationDirectivesXAnnotationDirectiveParserRuleCall_5_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_6);
            	    lv_annotationDirectives_5_0=ruleXAnnotationDirective();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getXPackageRule());
            	      					}
            	      					add(
            	      						current,
            	      						"annotationDirectives",
            	      						lv_annotationDirectives_5_0,
            	      						"org.eclipse.emf.ecore.xcore.Xcore.XAnnotationDirective");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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

            // InternalXcore.g:175:3: ( (lv_classifiers_6_0= ruleXClassifier ) )*
            loop4:
            do {
                int alt4=2;
                int LA4_0 = input.LA(1);

                if ( (LA4_0==14||LA4_0==22||LA4_0==28||(LA4_0>=32 && LA4_0<=34)) ) {
                    alt4=1;
                }


                switch (alt4) {
            	case 1 :
            	    // InternalXcore.g:176:4: (lv_classifiers_6_0= ruleXClassifier )
            	    {
            	    // InternalXcore.g:176:4: (lv_classifiers_6_0= ruleXClassifier )
            	    // InternalXcore.g:177:5: lv_classifiers_6_0= ruleXClassifier
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getXPackageAccess().getClassifiersXClassifierParserRuleCall_6_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_7);
            	    lv_classifiers_6_0=ruleXClassifier();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getXPackageRule());
            	      					}
            	      					add(
            	      						current,
            	      						"classifiers",
            	      						lv_classifiers_6_0,
            	      						"org.eclipse.emf.ecore.xcore.Xcore.XClassifier");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXPackage"


    // $ANTLR start "entryRuleXAnnotation"
    // InternalXcore.g:198:1: entryRuleXAnnotation returns [EObject current=null] : iv_ruleXAnnotation= ruleXAnnotation EOF ;
    public final EObject entryRuleXAnnotation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXAnnotation = null;


        try {
            // InternalXcore.g:198:52: (iv_ruleXAnnotation= ruleXAnnotation EOF )
            // InternalXcore.g:199:2: iv_ruleXAnnotation= ruleXAnnotation EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXAnnotationRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXAnnotation=ruleXAnnotation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXAnnotation; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXAnnotation"


    // $ANTLR start "ruleXAnnotation"
    // InternalXcore.g:205:1: ruleXAnnotation returns [EObject current=null] : (otherlv_0= '@' ( ( ruleXQualifiedName ) ) (otherlv_2= '(' ( (lv_details_3_0= ruleXStringToStringMapEntry ) ) (otherlv_4= ',' ( (lv_details_5_0= ruleXStringToStringMapEntry ) ) )* otherlv_6= ')' )? ) ;
    public final EObject ruleXAnnotation() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_details_3_0 = null;

        EObject lv_details_5_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:211:2: ( (otherlv_0= '@' ( ( ruleXQualifiedName ) ) (otherlv_2= '(' ( (lv_details_3_0= ruleXStringToStringMapEntry ) ) (otherlv_4= ',' ( (lv_details_5_0= ruleXStringToStringMapEntry ) ) )* otherlv_6= ')' )? ) )
            // InternalXcore.g:212:2: (otherlv_0= '@' ( ( ruleXQualifiedName ) ) (otherlv_2= '(' ( (lv_details_3_0= ruleXStringToStringMapEntry ) ) (otherlv_4= ',' ( (lv_details_5_0= ruleXStringToStringMapEntry ) ) )* otherlv_6= ')' )? )
            {
            // InternalXcore.g:212:2: (otherlv_0= '@' ( ( ruleXQualifiedName ) ) (otherlv_2= '(' ( (lv_details_3_0= ruleXStringToStringMapEntry ) ) (otherlv_4= ',' ( (lv_details_5_0= ruleXStringToStringMapEntry ) ) )* otherlv_6= ')' )? )
            // InternalXcore.g:213:3: otherlv_0= '@' ( ( ruleXQualifiedName ) ) (otherlv_2= '(' ( (lv_details_3_0= ruleXStringToStringMapEntry ) ) (otherlv_4= ',' ( (lv_details_5_0= ruleXStringToStringMapEntry ) ) )* otherlv_6= ')' )?
            {
            otherlv_0=(Token)match(input,14,FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getXAnnotationAccess().getCommercialAtKeyword_0());
              		
            }
            // InternalXcore.g:217:3: ( ( ruleXQualifiedName ) )
            // InternalXcore.g:218:4: ( ruleXQualifiedName )
            {
            // InternalXcore.g:218:4: ( ruleXQualifiedName )
            // InternalXcore.g:219:5: ruleXQualifiedName
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getXAnnotationRule());
              					}
              				
            }
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXAnnotationAccess().getSourceXAnnotationDirectiveCrossReference_1_0());
              				
            }
            pushFollow(FOLLOW_9);
            ruleXQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalXcore.g:233:3: (otherlv_2= '(' ( (lv_details_3_0= ruleXStringToStringMapEntry ) ) (otherlv_4= ',' ( (lv_details_5_0= ruleXStringToStringMapEntry ) ) )* otherlv_6= ')' )?
            int alt6=2;
            int LA6_0 = input.LA(1);

            if ( (LA6_0==15) ) {
                alt6=1;
            }
            switch (alt6) {
                case 1 :
                    // InternalXcore.g:234:4: otherlv_2= '(' ( (lv_details_3_0= ruleXStringToStringMapEntry ) ) (otherlv_4= ',' ( (lv_details_5_0= ruleXStringToStringMapEntry ) ) )* otherlv_6= ')'
                    {
                    otherlv_2=(Token)match(input,15,FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getXAnnotationAccess().getLeftParenthesisKeyword_2_0());
                      			
                    }
                    // InternalXcore.g:238:4: ( (lv_details_3_0= ruleXStringToStringMapEntry ) )
                    // InternalXcore.g:239:5: (lv_details_3_0= ruleXStringToStringMapEntry )
                    {
                    // InternalXcore.g:239:5: (lv_details_3_0= ruleXStringToStringMapEntry )
                    // InternalXcore.g:240:6: lv_details_3_0= ruleXStringToStringMapEntry
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXAnnotationAccess().getDetailsXStringToStringMapEntryParserRuleCall_2_1_0());
                      					
                    }
                    pushFollow(FOLLOW_10);
                    lv_details_3_0=ruleXStringToStringMapEntry();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXAnnotationRule());
                      						}
                      						add(
                      							current,
                      							"details",
                      							lv_details_3_0,
                      							"org.eclipse.emf.ecore.xcore.Xcore.XStringToStringMapEntry");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:257:4: (otherlv_4= ',' ( (lv_details_5_0= ruleXStringToStringMapEntry ) ) )*
                    loop5:
                    do {
                        int alt5=2;
                        int LA5_0 = input.LA(1);

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


                        switch (alt5) {
                    	case 1 :
                    	    // InternalXcore.g:258:5: otherlv_4= ',' ( (lv_details_5_0= ruleXStringToStringMapEntry ) )
                    	    {
                    	    otherlv_4=(Token)match(input,16,FOLLOW_4); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_4, grammarAccess.getXAnnotationAccess().getCommaKeyword_2_2_0());
                    	      				
                    	    }
                    	    // InternalXcore.g:262:5: ( (lv_details_5_0= ruleXStringToStringMapEntry ) )
                    	    // InternalXcore.g:263:6: (lv_details_5_0= ruleXStringToStringMapEntry )
                    	    {
                    	    // InternalXcore.g:263:6: (lv_details_5_0= ruleXStringToStringMapEntry )
                    	    // InternalXcore.g:264:7: lv_details_5_0= ruleXStringToStringMapEntry
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXAnnotationAccess().getDetailsXStringToStringMapEntryParserRuleCall_2_2_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_10);
                    	    lv_details_5_0=ruleXStringToStringMapEntry();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getXAnnotationRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"details",
                    	      								lv_details_5_0,
                    	      								"org.eclipse.emf.ecore.xcore.Xcore.XStringToStringMapEntry");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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

                    otherlv_6=(Token)match(input,17,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_6, grammarAccess.getXAnnotationAccess().getRightParenthesisKeyword_2_3());
                      			
                    }

                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXAnnotation"


    // $ANTLR start "entryRuleXStringToStringMapEntry"
    // InternalXcore.g:291:1: entryRuleXStringToStringMapEntry returns [EObject current=null] : iv_ruleXStringToStringMapEntry= ruleXStringToStringMapEntry EOF ;
    public final EObject entryRuleXStringToStringMapEntry() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXStringToStringMapEntry = null;


        try {
            // InternalXcore.g:291:64: (iv_ruleXStringToStringMapEntry= ruleXStringToStringMapEntry EOF )
            // InternalXcore.g:292:2: iv_ruleXStringToStringMapEntry= ruleXStringToStringMapEntry EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXStringToStringMapEntryRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXStringToStringMapEntry=ruleXStringToStringMapEntry();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXStringToStringMapEntry; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXStringToStringMapEntry"


    // $ANTLR start "ruleXStringToStringMapEntry"
    // InternalXcore.g:298:1: ruleXStringToStringMapEntry returns [EObject current=null] : ( ( (lv_key_0_0= ruleQualifiedName ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_STRING ) ) ) ;
    public final EObject ruleXStringToStringMapEntry() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_value_2_0=null;
        AntlrDatatypeRuleToken lv_key_0_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:304:2: ( ( ( (lv_key_0_0= ruleQualifiedName ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_STRING ) ) ) )
            // InternalXcore.g:305:2: ( ( (lv_key_0_0= ruleQualifiedName ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_STRING ) ) )
            {
            // InternalXcore.g:305:2: ( ( (lv_key_0_0= ruleQualifiedName ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_STRING ) ) )
            // InternalXcore.g:306:3: ( (lv_key_0_0= ruleQualifiedName ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_STRING ) )
            {
            // InternalXcore.g:306:3: ( (lv_key_0_0= ruleQualifiedName ) )
            // InternalXcore.g:307:4: (lv_key_0_0= ruleQualifiedName )
            {
            // InternalXcore.g:307:4: (lv_key_0_0= ruleQualifiedName )
            // InternalXcore.g:308:5: lv_key_0_0= ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXStringToStringMapEntryAccess().getKeyQualifiedNameParserRuleCall_0_0());
              				
            }
            pushFollow(FOLLOW_11);
            lv_key_0_0=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXStringToStringMapEntryRule());
              					}
              					set(
              						current,
              						"key",
              						lv_key_0_0,
              						"org.eclipse.xtext.xbase.Xbase.QualifiedName");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_1=(Token)match(input,18,FOLLOW_12); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXStringToStringMapEntryAccess().getEqualsSignKeyword_1());
              		
            }
            // InternalXcore.g:329:3: ( (lv_value_2_0= RULE_STRING ) )
            // InternalXcore.g:330:4: (lv_value_2_0= RULE_STRING )
            {
            // InternalXcore.g:330:4: (lv_value_2_0= RULE_STRING )
            // InternalXcore.g:331:5: lv_value_2_0= RULE_STRING
            {
            lv_value_2_0=(Token)match(input,RULE_STRING,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_value_2_0, grammarAccess.getXStringToStringMapEntryAccess().getValueSTRINGTerminalRuleCall_2_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getXStringToStringMapEntryRule());
              					}
              					setWithLastConsumed(
              						current,
              						"value",
              						lv_value_2_0,
              						"org.eclipse.xtext.xbase.Xtype.STRING");
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXStringToStringMapEntry"


    // $ANTLR start "entryRuleXImportDirective"
    // InternalXcore.g:351:1: entryRuleXImportDirective returns [EObject current=null] : iv_ruleXImportDirective= ruleXImportDirective EOF ;
    public final EObject entryRuleXImportDirective() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXImportDirective = null;


        try {
            // InternalXcore.g:351:57: (iv_ruleXImportDirective= ruleXImportDirective EOF )
            // InternalXcore.g:352:2: iv_ruleXImportDirective= ruleXImportDirective EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXImportDirectiveRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXImportDirective=ruleXImportDirective();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXImportDirective; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXImportDirective"


    // $ANTLR start "ruleXImportDirective"
    // InternalXcore.g:358:1: ruleXImportDirective returns [EObject current=null] : ( () otherlv_1= 'import' ( ( (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard ) ) | ( ( ruleQualifiedName ) ) ) ) ;
    public final EObject ruleXImportDirective() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        AntlrDatatypeRuleToken lv_importedNamespace_2_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:364:2: ( ( () otherlv_1= 'import' ( ( (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard ) ) | ( ( ruleQualifiedName ) ) ) ) )
            // InternalXcore.g:365:2: ( () otherlv_1= 'import' ( ( (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard ) ) | ( ( ruleQualifiedName ) ) ) )
            {
            // InternalXcore.g:365:2: ( () otherlv_1= 'import' ( ( (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard ) ) | ( ( ruleQualifiedName ) ) ) )
            // InternalXcore.g:366:3: () otherlv_1= 'import' ( ( (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard ) ) | ( ( ruleQualifiedName ) ) )
            {
            // InternalXcore.g:366:3: ()
            // InternalXcore.g:367:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXImportDirectiveAccess().getXImportDirectiveAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,19,FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXImportDirectiveAccess().getImportKeyword_1());
              		
            }
            // InternalXcore.g:377:3: ( ( (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard ) ) | ( ( ruleQualifiedName ) ) )
            int alt7=2;
            alt7 = dfa7.predict(input);
            switch (alt7) {
                case 1 :
                    // InternalXcore.g:378:4: ( (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard ) )
                    {
                    // InternalXcore.g:378:4: ( (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard ) )
                    // InternalXcore.g:379:5: (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard )
                    {
                    // InternalXcore.g:379:5: (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard )
                    // InternalXcore.g:380:6: lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXImportDirectiveAccess().getImportedNamespaceQualifiedNameWithWildcardParserRuleCall_2_0_0());
                      					
                    }
                    pushFollow(FOLLOW_2);
                    lv_importedNamespace_2_0=ruleQualifiedNameWithWildcard();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXImportDirectiveRule());
                      						}
                      						set(
                      							current,
                      							"importedNamespace",
                      							lv_importedNamespace_2_0,
                      							"org.eclipse.xtext.xbase.Xtype.QualifiedNameWithWildcard");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:398:4: ( ( ruleQualifiedName ) )
                    {
                    // InternalXcore.g:398:4: ( ( ruleQualifiedName ) )
                    // InternalXcore.g:399:5: ( ruleQualifiedName )
                    {
                    // InternalXcore.g:399:5: ( ruleQualifiedName )
                    // InternalXcore.g:400:6: ruleQualifiedName
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getXImportDirectiveRule());
                      						}
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXImportDirectiveAccess().getImportedObjectEObjectCrossReference_2_1_0());
                      					
                    }
                    pushFollow(FOLLOW_2);
                    ruleQualifiedName();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXImportDirective"


    // $ANTLR start "entryRuleXAnnotationDirective"
    // InternalXcore.g:419:1: entryRuleXAnnotationDirective returns [EObject current=null] : iv_ruleXAnnotationDirective= ruleXAnnotationDirective EOF ;
    public final EObject entryRuleXAnnotationDirective() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXAnnotationDirective = null;


        try {
            // InternalXcore.g:419:61: (iv_ruleXAnnotationDirective= ruleXAnnotationDirective EOF )
            // InternalXcore.g:420:2: iv_ruleXAnnotationDirective= ruleXAnnotationDirective EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXAnnotationDirectiveRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXAnnotationDirective=ruleXAnnotationDirective();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXAnnotationDirective; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXAnnotationDirective"


    // $ANTLR start "ruleXAnnotationDirective"
    // InternalXcore.g:426:1: ruleXAnnotationDirective returns [EObject current=null] : ( ( ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (otherlv_0= 'annotation' ( (lv_sourceURI_1_0= RULE_STRING ) ) ) ) otherlv_2= 'as' ( (lv_name_3_0= ruleValidID ) ) ) ;
    public final EObject ruleXAnnotationDirective() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_sourceURI_1_0=null;
        Token otherlv_2=null;
        AntlrDatatypeRuleToken lv_name_3_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:432:2: ( ( ( ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (otherlv_0= 'annotation' ( (lv_sourceURI_1_0= RULE_STRING ) ) ) ) otherlv_2= 'as' ( (lv_name_3_0= ruleValidID ) ) ) )
            // InternalXcore.g:433:2: ( ( ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (otherlv_0= 'annotation' ( (lv_sourceURI_1_0= RULE_STRING ) ) ) ) otherlv_2= 'as' ( (lv_name_3_0= ruleValidID ) ) )
            {
            // InternalXcore.g:433:2: ( ( ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (otherlv_0= 'annotation' ( (lv_sourceURI_1_0= RULE_STRING ) ) ) ) otherlv_2= 'as' ( (lv_name_3_0= ruleValidID ) ) )
            // InternalXcore.g:434:3: ( ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (otherlv_0= 'annotation' ( (lv_sourceURI_1_0= RULE_STRING ) ) ) ) otherlv_2= 'as' ( (lv_name_3_0= ruleValidID ) )
            {
            // InternalXcore.g:434:3: ( ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (otherlv_0= 'annotation' ( (lv_sourceURI_1_0= RULE_STRING ) ) ) )
            // InternalXcore.g:435:4: ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (otherlv_0= 'annotation' ( (lv_sourceURI_1_0= RULE_STRING ) ) )
            {
            // InternalXcore.g:444:4: (otherlv_0= 'annotation' ( (lv_sourceURI_1_0= RULE_STRING ) ) )
            // InternalXcore.g:445:5: otherlv_0= 'annotation' ( (lv_sourceURI_1_0= RULE_STRING ) )
            {
            otherlv_0=(Token)match(input,20,FOLLOW_12); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_0, grammarAccess.getXAnnotationDirectiveAccess().getAnnotationKeyword_0_0_0());
              				
            }
            // InternalXcore.g:449:5: ( (lv_sourceURI_1_0= RULE_STRING ) )
            // InternalXcore.g:450:6: (lv_sourceURI_1_0= RULE_STRING )
            {
            // InternalXcore.g:450:6: (lv_sourceURI_1_0= RULE_STRING )
            // InternalXcore.g:451:7: lv_sourceURI_1_0= RULE_STRING
            {
            lv_sourceURI_1_0=(Token)match(input,RULE_STRING,FOLLOW_13); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              							newLeafNode(lv_sourceURI_1_0, grammarAccess.getXAnnotationDirectiveAccess().getSourceURISTRINGTerminalRuleCall_0_0_1_0());
              						
            }
            if ( state.backtracking==0 ) {

              							if (current==null) {
              								current = createModelElement(grammarAccess.getXAnnotationDirectiveRule());
              							}
              							setWithLastConsumed(
              								current,
              								"sourceURI",
              								lv_sourceURI_1_0,
              								"org.eclipse.xtext.xbase.Xtype.STRING");
              						
            }

            }


            }


            }


            }

            otherlv_2=(Token)match(input,21,FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getXAnnotationDirectiveAccess().getAsKeyword_1());
              		
            }
            // InternalXcore.g:473:3: ( (lv_name_3_0= ruleValidID ) )
            // InternalXcore.g:474:4: (lv_name_3_0= ruleValidID )
            {
            // InternalXcore.g:474:4: (lv_name_3_0= ruleValidID )
            // InternalXcore.g:475:5: lv_name_3_0= ruleValidID
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXAnnotationDirectiveAccess().getNameValidIDParserRuleCall_2_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_name_3_0=ruleValidID();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXAnnotationDirectiveRule());
              					}
              					set(
              						current,
              						"name",
              						lv_name_3_0,
              						"org.eclipse.emf.ecore.xcore.Xcore.ValidID");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXAnnotationDirective"


    // $ANTLR start "entryRuleXClassifier"
    // InternalXcore.g:496:1: entryRuleXClassifier returns [EObject current=null] : iv_ruleXClassifier= ruleXClassifier EOF ;
    public final EObject entryRuleXClassifier() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXClassifier = null;


        try {
            // InternalXcore.g:496:52: (iv_ruleXClassifier= ruleXClassifier EOF )
            // InternalXcore.g:497:2: iv_ruleXClassifier= ruleXClassifier EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXClassifierRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXClassifier=ruleXClassifier();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXClassifier; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXClassifier"


    // $ANTLR start "ruleXClassifier"
    // InternalXcore.g:503:1: ruleXClassifier returns [EObject current=null] : (this_XClass_0= ruleXClass | this_XDataType_1= ruleXDataType | this_XEnum_2= ruleXEnum ) ;
    public final EObject ruleXClassifier() throws RecognitionException {
        EObject current = null;

        EObject this_XClass_0 = null;

        EObject this_XDataType_1 = null;

        EObject this_XEnum_2 = null;



        	enterRule();

        try {
            // InternalXcore.g:509:2: ( (this_XClass_0= ruleXClass | this_XDataType_1= ruleXDataType | this_XEnum_2= ruleXEnum ) )
            // InternalXcore.g:510:2: (this_XClass_0= ruleXClass | this_XDataType_1= ruleXDataType | this_XEnum_2= ruleXEnum )
            {
            // InternalXcore.g:510:2: (this_XClass_0= ruleXClass | this_XDataType_1= ruleXDataType | this_XEnum_2= ruleXEnum )
            int alt8=3;
            alt8 = dfa8.predict(input);
            switch (alt8) {
                case 1 :
                    // InternalXcore.g:511:3: this_XClass_0= ruleXClass
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXClassifierAccess().getXClassParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XClass_0=ruleXClass();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XClass_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:520:3: this_XDataType_1= ruleXDataType
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXClassifierAccess().getXDataTypeParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XDataType_1=ruleXDataType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XDataType_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalXcore.g:529:3: this_XEnum_2= ruleXEnum
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXClassifierAccess().getXEnumParserRuleCall_2());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XEnum_2=ruleXEnum();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XEnum_2;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXClassifier"


    // $ANTLR start "entryRuleXDataType"
    // InternalXcore.g:541:1: entryRuleXDataType returns [EObject current=null] : iv_ruleXDataType= ruleXDataType EOF ;
    public final EObject entryRuleXDataType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXDataType = null;


        try {
            // InternalXcore.g:541:50: (iv_ruleXDataType= ruleXDataType EOF )
            // InternalXcore.g:542:2: iv_ruleXDataType= ruleXDataType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXDataTypeRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXDataType=ruleXDataType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXDataType; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXDataType"


    // $ANTLR start "ruleXDataType"
    // InternalXcore.g:548:1: ruleXDataType returns [EObject current=null] : ( ( (lv_annotations_0_0= ruleXAnnotation ) )* otherlv_1= 'type' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '<' ( (lv_typeParameters_4_0= ruleXTypeParameter ) ) (otherlv_5= ',' ( (lv_typeParameters_6_0= ruleXTypeParameter ) ) )* otherlv_7= '>' )? otherlv_8= 'wraps' ( (lv_instanceType_9_0= ruleJvmTypeReference ) ) ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) ) ) ;
    public final EObject ruleXDataType() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token lv_serializable_11_0=null;
        Token otherlv_13=null;
        EObject lv_annotations_0_0 = null;

        EObject lv_typeParameters_4_0 = null;

        EObject lv_typeParameters_6_0 = null;

        EObject lv_instanceType_9_0 = null;

        EObject lv_createBody_12_0 = null;

        EObject lv_convertBody_14_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:554:2: ( ( ( (lv_annotations_0_0= ruleXAnnotation ) )* otherlv_1= 'type' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '<' ( (lv_typeParameters_4_0= ruleXTypeParameter ) ) (otherlv_5= ',' ( (lv_typeParameters_6_0= ruleXTypeParameter ) ) )* otherlv_7= '>' )? otherlv_8= 'wraps' ( (lv_instanceType_9_0= ruleJvmTypeReference ) ) ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) ) ) )
            // InternalXcore.g:555:2: ( ( (lv_annotations_0_0= ruleXAnnotation ) )* otherlv_1= 'type' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '<' ( (lv_typeParameters_4_0= ruleXTypeParameter ) ) (otherlv_5= ',' ( (lv_typeParameters_6_0= ruleXTypeParameter ) ) )* otherlv_7= '>' )? otherlv_8= 'wraps' ( (lv_instanceType_9_0= ruleJvmTypeReference ) ) ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) ) )
            {
            // InternalXcore.g:555:2: ( ( (lv_annotations_0_0= ruleXAnnotation ) )* otherlv_1= 'type' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '<' ( (lv_typeParameters_4_0= ruleXTypeParameter ) ) (otherlv_5= ',' ( (lv_typeParameters_6_0= ruleXTypeParameter ) ) )* otherlv_7= '>' )? otherlv_8= 'wraps' ( (lv_instanceType_9_0= ruleJvmTypeReference ) ) ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) ) )
            // InternalXcore.g:556:3: ( (lv_annotations_0_0= ruleXAnnotation ) )* otherlv_1= 'type' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= '<' ( (lv_typeParameters_4_0= ruleXTypeParameter ) ) (otherlv_5= ',' ( (lv_typeParameters_6_0= ruleXTypeParameter ) ) )* otherlv_7= '>' )? otherlv_8= 'wraps' ( (lv_instanceType_9_0= ruleJvmTypeReference ) ) ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) )
            {
            // InternalXcore.g:556:3: ( (lv_annotations_0_0= ruleXAnnotation ) )*
            loop9:
            do {
                int alt9=2;
                int LA9_0 = input.LA(1);

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


                switch (alt9) {
            	case 1 :
            	    // InternalXcore.g:557:4: (lv_annotations_0_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:557:4: (lv_annotations_0_0= ruleXAnnotation )
            	    // InternalXcore.g:558:5: lv_annotations_0_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getXDataTypeAccess().getAnnotationsXAnnotationParserRuleCall_0_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_14);
            	    lv_annotations_0_0=ruleXAnnotation();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getXDataTypeRule());
            	      					}
            	      					add(
            	      						current,
            	      						"annotations",
            	      						lv_annotations_0_0,
            	      						"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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

            otherlv_1=(Token)match(input,22,FOLLOW_15); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXDataTypeAccess().getTypeKeyword_1());
              		
            }
            // InternalXcore.g:579:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalXcore.g:580:4: (lv_name_2_0= RULE_ID )
            {
            // InternalXcore.g:580:4: (lv_name_2_0= RULE_ID )
            // InternalXcore.g:581:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_16); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_2_0, grammarAccess.getXDataTypeAccess().getNameIDTerminalRuleCall_2_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getXDataTypeRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_2_0,
              						"org.eclipse.xtext.xbase.Xtype.ID");
              				
            }

            }


            }

            // InternalXcore.g:597:3: (otherlv_3= '<' ( (lv_typeParameters_4_0= ruleXTypeParameter ) ) (otherlv_5= ',' ( (lv_typeParameters_6_0= ruleXTypeParameter ) ) )* otherlv_7= '>' )?
            int alt11=2;
            int LA11_0 = input.LA(1);

            if ( (LA11_0==23) ) {
                alt11=1;
            }
            switch (alt11) {
                case 1 :
                    // InternalXcore.g:598:4: otherlv_3= '<' ( (lv_typeParameters_4_0= ruleXTypeParameter ) ) (otherlv_5= ',' ( (lv_typeParameters_6_0= ruleXTypeParameter ) ) )* otherlv_7= '>'
                    {
                    otherlv_3=(Token)match(input,23,FOLLOW_17); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_3, grammarAccess.getXDataTypeAccess().getLessThanSignKeyword_3_0());
                      			
                    }
                    // InternalXcore.g:602:4: ( (lv_typeParameters_4_0= ruleXTypeParameter ) )
                    // InternalXcore.g:603:5: (lv_typeParameters_4_0= ruleXTypeParameter )
                    {
                    // InternalXcore.g:603:5: (lv_typeParameters_4_0= ruleXTypeParameter )
                    // InternalXcore.g:604:6: lv_typeParameters_4_0= ruleXTypeParameter
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXDataTypeAccess().getTypeParametersXTypeParameterParserRuleCall_3_1_0());
                      					
                    }
                    pushFollow(FOLLOW_18);
                    lv_typeParameters_4_0=ruleXTypeParameter();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXDataTypeRule());
                      						}
                      						add(
                      							current,
                      							"typeParameters",
                      							lv_typeParameters_4_0,
                      							"org.eclipse.emf.ecore.xcore.Xcore.XTypeParameter");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:621:4: (otherlv_5= ',' ( (lv_typeParameters_6_0= ruleXTypeParameter ) ) )*
                    loop10:
                    do {
                        int alt10=2;
                        int LA10_0 = input.LA(1);

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


                        switch (alt10) {
                    	case 1 :
                    	    // InternalXcore.g:622:5: otherlv_5= ',' ( (lv_typeParameters_6_0= ruleXTypeParameter ) )
                    	    {
                    	    otherlv_5=(Token)match(input,16,FOLLOW_17); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_5, grammarAccess.getXDataTypeAccess().getCommaKeyword_3_2_0());
                    	      				
                    	    }
                    	    // InternalXcore.g:626:5: ( (lv_typeParameters_6_0= ruleXTypeParameter ) )
                    	    // InternalXcore.g:627:6: (lv_typeParameters_6_0= ruleXTypeParameter )
                    	    {
                    	    // InternalXcore.g:627:6: (lv_typeParameters_6_0= ruleXTypeParameter )
                    	    // InternalXcore.g:628:7: lv_typeParameters_6_0= ruleXTypeParameter
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXDataTypeAccess().getTypeParametersXTypeParameterParserRuleCall_3_2_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_18);
                    	    lv_typeParameters_6_0=ruleXTypeParameter();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getXDataTypeRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"typeParameters",
                    	      								lv_typeParameters_6_0,
                    	      								"org.eclipse.emf.ecore.xcore.Xcore.XTypeParameter");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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

                    otherlv_7=(Token)match(input,24,FOLLOW_19); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_7, grammarAccess.getXDataTypeAccess().getGreaterThanSignKeyword_3_3());
                      			
                    }

                    }
                    break;

            }

            otherlv_8=(Token)match(input,25,FOLLOW_20); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_8, grammarAccess.getXDataTypeAccess().getWrapsKeyword_4());
              		
            }
            // InternalXcore.g:655:3: ( (lv_instanceType_9_0= ruleJvmTypeReference ) )
            // InternalXcore.g:656:4: (lv_instanceType_9_0= ruleJvmTypeReference )
            {
            // InternalXcore.g:656:4: (lv_instanceType_9_0= ruleJvmTypeReference )
            // InternalXcore.g:657:5: lv_instanceType_9_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXDataTypeAccess().getInstanceTypeJvmTypeReferenceParserRuleCall_5_0());
              				
            }
            pushFollow(FOLLOW_21);
            lv_instanceType_9_0=ruleJvmTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXDataTypeRule());
              					}
              					set(
              						current,
              						"instanceType",
              						lv_instanceType_9_0,
              						"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalXcore.g:674:3: ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) )
            // InternalXcore.g:675:4: ( ( ( ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) ) )* ) )
            {
            // InternalXcore.g:675:4: ( ( ( ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) ) )* ) )
            // InternalXcore.g:676:5: ( ( ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) ) )* )
            {
            getUnorderedGroupHelper().enter(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6());
            // InternalXcore.g:679:5: ( ( ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) ) )* )
            // InternalXcore.g:680:6: ( ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) ) )*
            {
            // InternalXcore.g:680:6: ( ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) ) )*
            loop12:
            do {
                int alt12=3;
                int LA12_0 = input.LA(1);

                if ( LA12_0 == 26 && getUnorderedGroupHelper().canSelect(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6(), 0) ) {
                    alt12=1;
                }
                else if ( LA12_0 == 27 && getUnorderedGroupHelper().canSelect(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6(), 1) ) {
                    alt12=2;
                }


                switch (alt12) {
            	case 1 :
            	    // InternalXcore.g:681:4: ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:681:4: ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:682:5: {...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6(), 0) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXDataType", "getUnorderedGroupHelper().canSelect(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6(), 0)");
            	    }
            	    // InternalXcore.g:682:106: ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:683:6: ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6(), 0);
            	    // InternalXcore.g:686:9: ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:686:10: {...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXDataType", "true");
            	    }
            	    // InternalXcore.g:686:19: ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:686:20: ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) )
            	    {
            	    // InternalXcore.g:686:20: ( (lv_serializable_11_0= 'create' ) )
            	    // InternalXcore.g:687:10: (lv_serializable_11_0= 'create' )
            	    {
            	    // InternalXcore.g:687:10: (lv_serializable_11_0= 'create' )
            	    // InternalXcore.g:688:11: lv_serializable_11_0= 'create'
            	    {
            	    lv_serializable_11_0=(Token)match(input,26,FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											newLeafNode(lv_serializable_11_0, grammarAccess.getXDataTypeAccess().getSerializableCreateKeyword_6_0_0_0());
            	      										
            	    }
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElement(grammarAccess.getXDataTypeRule());
            	      											}
            	      											setWithLastConsumed(current, "serializable", lv_serializable_11_0 != null, "create");
            	      										
            	    }

            	    }


            	    }

            	    // InternalXcore.g:700:9: ( (lv_createBody_12_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:701:10: (lv_createBody_12_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:701:10: (lv_createBody_12_0= ruleXBlockExpression )
            	    // InternalXcore.g:702:11: lv_createBody_12_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      											newCompositeNode(grammarAccess.getXDataTypeAccess().getCreateBodyXBlockExpressionParserRuleCall_6_0_1_0());
            	      										
            	    }
            	    pushFollow(FOLLOW_21);
            	    lv_createBody_12_0=ruleXBlockExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElementForParent(grammarAccess.getXDataTypeRule());
            	      											}
            	      											set(
            	      												current,
            	      												"createBody",
            	      												lv_createBody_12_0,
            	      												"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
            	      											afterParserOrEnumRuleCall();
            	      										
            	    }

            	    }


            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6());

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalXcore.g:725:4: ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:725:4: ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:726:5: {...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6(), 1) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXDataType", "getUnorderedGroupHelper().canSelect(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6(), 1)");
            	    }
            	    // InternalXcore.g:726:106: ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:727:6: ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6(), 1);
            	    // InternalXcore.g:730:9: ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:730:10: {...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXDataType", "true");
            	    }
            	    // InternalXcore.g:730:19: (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:730:20: otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_13=(Token)match(input,27,FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_13, grammarAccess.getXDataTypeAccess().getConvertKeyword_6_1_0());
            	      								
            	    }
            	    // InternalXcore.g:734:9: ( (lv_convertBody_14_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:735:10: (lv_convertBody_14_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:735:10: (lv_convertBody_14_0= ruleXBlockExpression )
            	    // InternalXcore.g:736:11: lv_convertBody_14_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      											newCompositeNode(grammarAccess.getXDataTypeAccess().getConvertBodyXBlockExpressionParserRuleCall_6_1_1_0());
            	      										
            	    }
            	    pushFollow(FOLLOW_21);
            	    lv_convertBody_14_0=ruleXBlockExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElementForParent(grammarAccess.getXDataTypeRule());
            	      											}
            	      											set(
            	      												current,
            	      												"convertBody",
            	      												lv_convertBody_14_0,
            	      												"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
            	      											afterParserOrEnumRuleCall();
            	      										
            	    }

            	    }


            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6());

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            getUnorderedGroupHelper().leave(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6());

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXDataType"


    // $ANTLR start "entryRuleXEnum"
    // InternalXcore.g:770:1: entryRuleXEnum returns [EObject current=null] : iv_ruleXEnum= ruleXEnum EOF ;
    public final EObject entryRuleXEnum() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXEnum = null;


        try {
            // InternalXcore.g:770:46: (iv_ruleXEnum= ruleXEnum EOF )
            // InternalXcore.g:771:2: iv_ruleXEnum= ruleXEnum EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXEnumRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXEnum=ruleXEnum();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXEnum; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXEnum"


    // $ANTLR start "ruleXEnum"
    // InternalXcore.g:777:1: ruleXEnum returns [EObject current=null] : ( ( (lv_annotations_0_0= ruleXAnnotation ) )* otherlv_1= 'enum' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' ( ( (lv_literals_4_0= ruleXEnumLiteral ) ) ( (otherlv_5= ',' )? ( (lv_literals_6_0= ruleXEnumLiteral ) ) )* )? otherlv_7= '}' ) ;
    public final EObject ruleXEnum() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_name_2_0=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        EObject lv_annotations_0_0 = null;

        EObject lv_literals_4_0 = null;

        EObject lv_literals_6_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:783:2: ( ( ( (lv_annotations_0_0= ruleXAnnotation ) )* otherlv_1= 'enum' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' ( ( (lv_literals_4_0= ruleXEnumLiteral ) ) ( (otherlv_5= ',' )? ( (lv_literals_6_0= ruleXEnumLiteral ) ) )* )? otherlv_7= '}' ) )
            // InternalXcore.g:784:2: ( ( (lv_annotations_0_0= ruleXAnnotation ) )* otherlv_1= 'enum' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' ( ( (lv_literals_4_0= ruleXEnumLiteral ) ) ( (otherlv_5= ',' )? ( (lv_literals_6_0= ruleXEnumLiteral ) ) )* )? otherlv_7= '}' )
            {
            // InternalXcore.g:784:2: ( ( (lv_annotations_0_0= ruleXAnnotation ) )* otherlv_1= 'enum' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' ( ( (lv_literals_4_0= ruleXEnumLiteral ) ) ( (otherlv_5= ',' )? ( (lv_literals_6_0= ruleXEnumLiteral ) ) )* )? otherlv_7= '}' )
            // InternalXcore.g:785:3: ( (lv_annotations_0_0= ruleXAnnotation ) )* otherlv_1= 'enum' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '{' ( ( (lv_literals_4_0= ruleXEnumLiteral ) ) ( (otherlv_5= ',' )? ( (lv_literals_6_0= ruleXEnumLiteral ) ) )* )? otherlv_7= '}'
            {
            // InternalXcore.g:785:3: ( (lv_annotations_0_0= ruleXAnnotation ) )*
            loop13:
            do {
                int alt13=2;
                int LA13_0 = input.LA(1);

                if ( (LA13_0==14) ) {
                    alt13=1;
                }


                switch (alt13) {
            	case 1 :
            	    // InternalXcore.g:786:4: (lv_annotations_0_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:786:4: (lv_annotations_0_0= ruleXAnnotation )
            	    // InternalXcore.g:787:5: lv_annotations_0_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getXEnumAccess().getAnnotationsXAnnotationParserRuleCall_0_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_23);
            	    lv_annotations_0_0=ruleXAnnotation();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getXEnumRule());
            	      					}
            	      					add(
            	      						current,
            	      						"annotations",
            	      						lv_annotations_0_0,
            	      						"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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

            otherlv_1=(Token)match(input,28,FOLLOW_15); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXEnumAccess().getEnumKeyword_1());
              		
            }
            // InternalXcore.g:808:3: ( (lv_name_2_0= RULE_ID ) )
            // InternalXcore.g:809:4: (lv_name_2_0= RULE_ID )
            {
            // InternalXcore.g:809:4: (lv_name_2_0= RULE_ID )
            // InternalXcore.g:810:5: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_22); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_2_0, grammarAccess.getXEnumAccess().getNameIDTerminalRuleCall_2_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getXEnumRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_2_0,
              						"org.eclipse.xtext.xbase.Xtype.ID");
              				
            }

            }


            }

            otherlv_3=(Token)match(input,29,FOLLOW_24); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getXEnumAccess().getLeftCurlyBracketKeyword_3());
              		
            }
            // InternalXcore.g:830:3: ( ( (lv_literals_4_0= ruleXEnumLiteral ) ) ( (otherlv_5= ',' )? ( (lv_literals_6_0= ruleXEnumLiteral ) ) )* )?
            int alt16=2;
            int LA16_0 = input.LA(1);

            if ( (LA16_0==RULE_ID||LA16_0==14) ) {
                alt16=1;
            }
            switch (alt16) {
                case 1 :
                    // InternalXcore.g:831:4: ( (lv_literals_4_0= ruleXEnumLiteral ) ) ( (otherlv_5= ',' )? ( (lv_literals_6_0= ruleXEnumLiteral ) ) )*
                    {
                    // InternalXcore.g:831:4: ( (lv_literals_4_0= ruleXEnumLiteral ) )
                    // InternalXcore.g:832:5: (lv_literals_4_0= ruleXEnumLiteral )
                    {
                    // InternalXcore.g:832:5: (lv_literals_4_0= ruleXEnumLiteral )
                    // InternalXcore.g:833:6: lv_literals_4_0= ruleXEnumLiteral
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXEnumAccess().getLiteralsXEnumLiteralParserRuleCall_4_0_0());
                      					
                    }
                    pushFollow(FOLLOW_25);
                    lv_literals_4_0=ruleXEnumLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXEnumRule());
                      						}
                      						add(
                      							current,
                      							"literals",
                      							lv_literals_4_0,
                      							"org.eclipse.emf.ecore.xcore.Xcore.XEnumLiteral");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:850:4: ( (otherlv_5= ',' )? ( (lv_literals_6_0= ruleXEnumLiteral ) ) )*
                    loop15:
                    do {
                        int alt15=2;
                        int LA15_0 = input.LA(1);

                        if ( (LA15_0==RULE_ID||LA15_0==14||LA15_0==16) ) {
                            alt15=1;
                        }


                        switch (alt15) {
                    	case 1 :
                    	    // InternalXcore.g:851:5: (otherlv_5= ',' )? ( (lv_literals_6_0= ruleXEnumLiteral ) )
                    	    {
                    	    // InternalXcore.g:851:5: (otherlv_5= ',' )?
                    	    int alt14=2;
                    	    int LA14_0 = input.LA(1);

                    	    if ( (LA14_0==16) ) {
                    	        alt14=1;
                    	    }
                    	    switch (alt14) {
                    	        case 1 :
                    	            // InternalXcore.g:852:6: otherlv_5= ','
                    	            {
                    	            otherlv_5=(Token)match(input,16,FOLLOW_17); if (state.failed) return current;
                    	            if ( state.backtracking==0 ) {

                    	              						newLeafNode(otherlv_5, grammarAccess.getXEnumAccess().getCommaKeyword_4_1_0());
                    	              					
                    	            }

                    	            }
                    	            break;

                    	    }

                    	    // InternalXcore.g:857:5: ( (lv_literals_6_0= ruleXEnumLiteral ) )
                    	    // InternalXcore.g:858:6: (lv_literals_6_0= ruleXEnumLiteral )
                    	    {
                    	    // InternalXcore.g:858:6: (lv_literals_6_0= ruleXEnumLiteral )
                    	    // InternalXcore.g:859:7: lv_literals_6_0= ruleXEnumLiteral
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXEnumAccess().getLiteralsXEnumLiteralParserRuleCall_4_1_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_25);
                    	    lv_literals_6_0=ruleXEnumLiteral();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getXEnumRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"literals",
                    	      								lv_literals_6_0,
                    	      								"org.eclipse.emf.ecore.xcore.Xcore.XEnumLiteral");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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


                    }
                    break;

            }

            otherlv_7=(Token)match(input,30,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_7, grammarAccess.getXEnumAccess().getRightCurlyBracketKeyword_5());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXEnum"


    // $ANTLR start "entryRuleXEnumLiteral"
    // InternalXcore.g:886:1: entryRuleXEnumLiteral returns [EObject current=null] : iv_ruleXEnumLiteral= ruleXEnumLiteral EOF ;
    public final EObject entryRuleXEnumLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXEnumLiteral = null;


        try {
            // InternalXcore.g:886:53: (iv_ruleXEnumLiteral= ruleXEnumLiteral EOF )
            // InternalXcore.g:887:2: iv_ruleXEnumLiteral= ruleXEnumLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXEnumLiteralRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXEnumLiteral=ruleXEnumLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXEnumLiteral; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXEnumLiteral"


    // $ANTLR start "ruleXEnumLiteral"
    // InternalXcore.g:893:1: ruleXEnumLiteral returns [EObject current=null] : ( ( (lv_annotations_0_0= ruleXAnnotation ) )* ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'as' ( (lv_literal_3_0= RULE_STRING ) ) )? (otherlv_4= '=' ( (lv_value_5_0= ruleSignedInt ) ) )? ) ;
    public final EObject ruleXEnumLiteral() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token lv_literal_3_0=null;
        Token otherlv_4=null;
        EObject lv_annotations_0_0 = null;

        AntlrDatatypeRuleToken lv_value_5_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:899:2: ( ( ( (lv_annotations_0_0= ruleXAnnotation ) )* ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'as' ( (lv_literal_3_0= RULE_STRING ) ) )? (otherlv_4= '=' ( (lv_value_5_0= ruleSignedInt ) ) )? ) )
            // InternalXcore.g:900:2: ( ( (lv_annotations_0_0= ruleXAnnotation ) )* ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'as' ( (lv_literal_3_0= RULE_STRING ) ) )? (otherlv_4= '=' ( (lv_value_5_0= ruleSignedInt ) ) )? )
            {
            // InternalXcore.g:900:2: ( ( (lv_annotations_0_0= ruleXAnnotation ) )* ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'as' ( (lv_literal_3_0= RULE_STRING ) ) )? (otherlv_4= '=' ( (lv_value_5_0= ruleSignedInt ) ) )? )
            // InternalXcore.g:901:3: ( (lv_annotations_0_0= ruleXAnnotation ) )* ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'as' ( (lv_literal_3_0= RULE_STRING ) ) )? (otherlv_4= '=' ( (lv_value_5_0= ruleSignedInt ) ) )?
            {
            // InternalXcore.g:901:3: ( (lv_annotations_0_0= ruleXAnnotation ) )*
            loop17:
            do {
                int alt17=2;
                int LA17_0 = input.LA(1);

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


                switch (alt17) {
            	case 1 :
            	    // InternalXcore.g:902:4: (lv_annotations_0_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:902:4: (lv_annotations_0_0= ruleXAnnotation )
            	    // InternalXcore.g:903:5: lv_annotations_0_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getXEnumLiteralAccess().getAnnotationsXAnnotationParserRuleCall_0_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_17);
            	    lv_annotations_0_0=ruleXAnnotation();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getXEnumLiteralRule());
            	      					}
            	      					add(
            	      						current,
            	      						"annotations",
            	      						lv_annotations_0_0,
            	      						"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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

            // InternalXcore.g:920:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalXcore.g:921:4: (lv_name_1_0= RULE_ID )
            {
            // InternalXcore.g:921:4: (lv_name_1_0= RULE_ID )
            // InternalXcore.g:922:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_26); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getXEnumLiteralAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getXEnumLiteralRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.xbase.Xtype.ID");
              				
            }

            }


            }

            // InternalXcore.g:938:3: (otherlv_2= 'as' ( (lv_literal_3_0= RULE_STRING ) ) )?
            int alt18=2;
            int LA18_0 = input.LA(1);

            if ( (LA18_0==21) ) {
                alt18=1;
            }
            switch (alt18) {
                case 1 :
                    // InternalXcore.g:939:4: otherlv_2= 'as' ( (lv_literal_3_0= RULE_STRING ) )
                    {
                    otherlv_2=(Token)match(input,21,FOLLOW_12); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getXEnumLiteralAccess().getAsKeyword_2_0());
                      			
                    }
                    // InternalXcore.g:943:4: ( (lv_literal_3_0= RULE_STRING ) )
                    // InternalXcore.g:944:5: (lv_literal_3_0= RULE_STRING )
                    {
                    // InternalXcore.g:944:5: (lv_literal_3_0= RULE_STRING )
                    // InternalXcore.g:945:6: lv_literal_3_0= RULE_STRING
                    {
                    lv_literal_3_0=(Token)match(input,RULE_STRING,FOLLOW_27); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_literal_3_0, grammarAccess.getXEnumLiteralAccess().getLiteralSTRINGTerminalRuleCall_2_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getXEnumLiteralRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"literal",
                      							lv_literal_3_0,
                      							"org.eclipse.xtext.xbase.Xtype.STRING");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalXcore.g:962:3: (otherlv_4= '=' ( (lv_value_5_0= ruleSignedInt ) ) )?
            int alt19=2;
            int LA19_0 = input.LA(1);

            if ( (LA19_0==18) ) {
                alt19=1;
            }
            switch (alt19) {
                case 1 :
                    // InternalXcore.g:963:4: otherlv_4= '=' ( (lv_value_5_0= ruleSignedInt ) )
                    {
                    otherlv_4=(Token)match(input,18,FOLLOW_28); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_4, grammarAccess.getXEnumLiteralAccess().getEqualsSignKeyword_3_0());
                      			
                    }
                    // InternalXcore.g:967:4: ( (lv_value_5_0= ruleSignedInt ) )
                    // InternalXcore.g:968:5: (lv_value_5_0= ruleSignedInt )
                    {
                    // InternalXcore.g:968:5: (lv_value_5_0= ruleSignedInt )
                    // InternalXcore.g:969:6: lv_value_5_0= ruleSignedInt
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXEnumLiteralAccess().getValueSignedIntParserRuleCall_3_1_0());
                      					
                    }
                    pushFollow(FOLLOW_2);
                    lv_value_5_0=ruleSignedInt();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXEnumLiteralRule());
                      						}
                      						set(
                      							current,
                      							"value",
                      							lv_value_5_0,
                      							"org.eclipse.emf.ecore.xcore.Xcore.SignedInt");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXEnumLiteral"


    // $ANTLR start "entryRuleSignedInt"
    // InternalXcore.g:991:1: entryRuleSignedInt returns [String current=null] : iv_ruleSignedInt= ruleSignedInt EOF ;
    public final String entryRuleSignedInt() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleSignedInt = null;


        try {
            // InternalXcore.g:991:49: (iv_ruleSignedInt= ruleSignedInt EOF )
            // InternalXcore.g:992:2: iv_ruleSignedInt= ruleSignedInt EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSignedIntRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleSignedInt=ruleSignedInt();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSignedInt.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleSignedInt"


    // $ANTLR start "ruleSignedInt"
    // InternalXcore.g:998:1: ruleSignedInt returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= '-' )? this_INT_1= RULE_INT ) ;
    public final AntlrDatatypeRuleToken ruleSignedInt() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        Token this_INT_1=null;


        	enterRule();

        try {
            // InternalXcore.g:1004:2: ( ( (kw= '-' )? this_INT_1= RULE_INT ) )
            // InternalXcore.g:1005:2: ( (kw= '-' )? this_INT_1= RULE_INT )
            {
            // InternalXcore.g:1005:2: ( (kw= '-' )? this_INT_1= RULE_INT )
            // InternalXcore.g:1006:3: (kw= '-' )? this_INT_1= RULE_INT
            {
            // InternalXcore.g:1006:3: (kw= '-' )?
            int alt20=2;
            int LA20_0 = input.LA(1);

            if ( (LA20_0==31) ) {
                alt20=1;
            }
            switch (alt20) {
                case 1 :
                    // InternalXcore.g:1007:4: kw= '-'
                    {
                    kw=(Token)match(input,31,FOLLOW_29); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getSignedIntAccess().getHyphenMinusKeyword_0());
                      			
                    }

                    }
                    break;

            }

            this_INT_1=(Token)match(input,RULE_INT,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_INT_1);
              		
            }
            if ( state.backtracking==0 ) {

              			newLeafNode(this_INT_1, grammarAccess.getSignedIntAccess().getINTTerminalRuleCall_1());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleSignedInt"


    // $ANTLR start "entryRuleXClass"
    // InternalXcore.g:1024:1: entryRuleXClass returns [EObject current=null] : iv_ruleXClass= ruleXClass EOF ;
    public final EObject entryRuleXClass() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXClass = null;


        try {
            // InternalXcore.g:1024:47: (iv_ruleXClass= ruleXClass EOF )
            // InternalXcore.g:1025:2: iv_ruleXClass= ruleXClass EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXClassRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXClass=ruleXClass();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXClass; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXClass"


    // $ANTLR start "ruleXClass"
    // InternalXcore.g:1031:1: ruleXClass returns [EObject current=null] : ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'class' ) | ( (lv_interface_4_0= 'interface' ) ) ) ( (lv_name_5_0= RULE_ID ) ) (otherlv_6= '<' ( (lv_typeParameters_7_0= ruleXTypeParameter ) ) (otherlv_8= ',' ( (lv_typeParameters_9_0= ruleXTypeParameter ) ) )* otherlv_10= '>' )? (otherlv_11= 'extends' ( (lv_superTypes_12_0= ruleXGenericType ) ) (otherlv_13= ',' ( (lv_superTypes_14_0= ruleXGenericType ) ) )* )? (otherlv_15= 'wraps' ( (lv_instanceType_16_0= ruleJvmTypeReference ) ) )? otherlv_17= '{' ( (lv_members_18_0= ruleXMember ) )* otherlv_19= '}' ) ;
    public final EObject ruleXClass() throws RecognitionException {
        EObject current = null;

        Token lv_abstract_2_0=null;
        Token otherlv_3=null;
        Token lv_interface_4_0=null;
        Token lv_name_5_0=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        Token otherlv_15=null;
        Token otherlv_17=null;
        Token otherlv_19=null;
        EObject lv_annotations_1_0 = null;

        EObject lv_typeParameters_7_0 = null;

        EObject lv_typeParameters_9_0 = null;

        EObject lv_superTypes_12_0 = null;

        EObject lv_superTypes_14_0 = null;

        EObject lv_instanceType_16_0 = null;

        EObject lv_members_18_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:1037:2: ( ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'class' ) | ( (lv_interface_4_0= 'interface' ) ) ) ( (lv_name_5_0= RULE_ID ) ) (otherlv_6= '<' ( (lv_typeParameters_7_0= ruleXTypeParameter ) ) (otherlv_8= ',' ( (lv_typeParameters_9_0= ruleXTypeParameter ) ) )* otherlv_10= '>' )? (otherlv_11= 'extends' ( (lv_superTypes_12_0= ruleXGenericType ) ) (otherlv_13= ',' ( (lv_superTypes_14_0= ruleXGenericType ) ) )* )? (otherlv_15= 'wraps' ( (lv_instanceType_16_0= ruleJvmTypeReference ) ) )? otherlv_17= '{' ( (lv_members_18_0= ruleXMember ) )* otherlv_19= '}' ) )
            // InternalXcore.g:1038:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'class' ) | ( (lv_interface_4_0= 'interface' ) ) ) ( (lv_name_5_0= RULE_ID ) ) (otherlv_6= '<' ( (lv_typeParameters_7_0= ruleXTypeParameter ) ) (otherlv_8= ',' ( (lv_typeParameters_9_0= ruleXTypeParameter ) ) )* otherlv_10= '>' )? (otherlv_11= 'extends' ( (lv_superTypes_12_0= ruleXGenericType ) ) (otherlv_13= ',' ( (lv_superTypes_14_0= ruleXGenericType ) ) )* )? (otherlv_15= 'wraps' ( (lv_instanceType_16_0= ruleJvmTypeReference ) ) )? otherlv_17= '{' ( (lv_members_18_0= ruleXMember ) )* otherlv_19= '}' )
            {
            // InternalXcore.g:1038:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'class' ) | ( (lv_interface_4_0= 'interface' ) ) ) ( (lv_name_5_0= RULE_ID ) ) (otherlv_6= '<' ( (lv_typeParameters_7_0= ruleXTypeParameter ) ) (otherlv_8= ',' ( (lv_typeParameters_9_0= ruleXTypeParameter ) ) )* otherlv_10= '>' )? (otherlv_11= 'extends' ( (lv_superTypes_12_0= ruleXGenericType ) ) (otherlv_13= ',' ( (lv_superTypes_14_0= ruleXGenericType ) ) )* )? (otherlv_15= 'wraps' ( (lv_instanceType_16_0= ruleJvmTypeReference ) ) )? otherlv_17= '{' ( (lv_members_18_0= ruleXMember ) )* otherlv_19= '}' )
            // InternalXcore.g:1039:3: () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'class' ) | ( (lv_interface_4_0= 'interface' ) ) ) ( (lv_name_5_0= RULE_ID ) ) (otherlv_6= '<' ( (lv_typeParameters_7_0= ruleXTypeParameter ) ) (otherlv_8= ',' ( (lv_typeParameters_9_0= ruleXTypeParameter ) ) )* otherlv_10= '>' )? (otherlv_11= 'extends' ( (lv_superTypes_12_0= ruleXGenericType ) ) (otherlv_13= ',' ( (lv_superTypes_14_0= ruleXGenericType ) ) )* )? (otherlv_15= 'wraps' ( (lv_instanceType_16_0= ruleJvmTypeReference ) ) )? otherlv_17= '{' ( (lv_members_18_0= ruleXMember ) )* otherlv_19= '}'
            {
            // InternalXcore.g:1039:3: ()
            // InternalXcore.g:1040:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXClassAccess().getXClassAction_0(),
              					current);
              			
            }

            }

            // InternalXcore.g:1046:3: ( (lv_annotations_1_0= ruleXAnnotation ) )*
            loop21:
            do {
                int alt21=2;
                int LA21_0 = input.LA(1);

                if ( (LA21_0==14) ) {
                    alt21=1;
                }


                switch (alt21) {
            	case 1 :
            	    // InternalXcore.g:1047:4: (lv_annotations_1_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:1047:4: (lv_annotations_1_0= ruleXAnnotation )
            	    // InternalXcore.g:1048:5: lv_annotations_1_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getXClassAccess().getAnnotationsXAnnotationParserRuleCall_1_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_30);
            	    lv_annotations_1_0=ruleXAnnotation();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getXClassRule());
            	      					}
            	      					add(
            	      						current,
            	      						"annotations",
            	      						lv_annotations_1_0,
            	      						"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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

            // InternalXcore.g:1065:3: ( ( ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'class' ) | ( (lv_interface_4_0= 'interface' ) ) )
            int alt23=2;
            int LA23_0 = input.LA(1);

            if ( ((LA23_0>=32 && LA23_0<=33)) ) {
                alt23=1;
            }
            else if ( (LA23_0==34) ) {
                alt23=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 23, 0, input);

                throw nvae;
            }
            switch (alt23) {
                case 1 :
                    // InternalXcore.g:1066:4: ( ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'class' )
                    {
                    // InternalXcore.g:1066:4: ( ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'class' )
                    // InternalXcore.g:1067:5: ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'class'
                    {
                    // InternalXcore.g:1067:5: ( (lv_abstract_2_0= 'abstract' ) )?
                    int alt22=2;
                    int LA22_0 = input.LA(1);

                    if ( (LA22_0==32) ) {
                        alt22=1;
                    }
                    switch (alt22) {
                        case 1 :
                            // InternalXcore.g:1068:6: (lv_abstract_2_0= 'abstract' )
                            {
                            // InternalXcore.g:1068:6: (lv_abstract_2_0= 'abstract' )
                            // InternalXcore.g:1069:7: lv_abstract_2_0= 'abstract'
                            {
                            lv_abstract_2_0=(Token)match(input,32,FOLLOW_31); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_abstract_2_0, grammarAccess.getXClassAccess().getAbstractAbstractKeyword_2_0_0_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getXClassRule());
                              							}
                              							setWithLastConsumed(current, "abstract", lv_abstract_2_0 != null, "abstract");
                              						
                            }

                            }


                            }
                            break;

                    }

                    otherlv_3=(Token)match(input,33,FOLLOW_15); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_3, grammarAccess.getXClassAccess().getClassKeyword_2_0_1());
                      				
                    }

                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:1087:4: ( (lv_interface_4_0= 'interface' ) )
                    {
                    // InternalXcore.g:1087:4: ( (lv_interface_4_0= 'interface' ) )
                    // InternalXcore.g:1088:5: (lv_interface_4_0= 'interface' )
                    {
                    // InternalXcore.g:1088:5: (lv_interface_4_0= 'interface' )
                    // InternalXcore.g:1089:6: lv_interface_4_0= 'interface'
                    {
                    lv_interface_4_0=(Token)match(input,34,FOLLOW_15); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_interface_4_0, grammarAccess.getXClassAccess().getInterfaceInterfaceKeyword_2_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getXClassRule());
                      						}
                      						setWithLastConsumed(current, "interface", lv_interface_4_0 != null, "interface");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalXcore.g:1102:3: ( (lv_name_5_0= RULE_ID ) )
            // InternalXcore.g:1103:4: (lv_name_5_0= RULE_ID )
            {
            // InternalXcore.g:1103:4: (lv_name_5_0= RULE_ID )
            // InternalXcore.g:1104:5: lv_name_5_0= RULE_ID
            {
            lv_name_5_0=(Token)match(input,RULE_ID,FOLLOW_32); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_5_0, grammarAccess.getXClassAccess().getNameIDTerminalRuleCall_3_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getXClassRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_5_0,
              						"org.eclipse.xtext.xbase.Xtype.ID");
              				
            }

            }


            }

            // InternalXcore.g:1120:3: (otherlv_6= '<' ( (lv_typeParameters_7_0= ruleXTypeParameter ) ) (otherlv_8= ',' ( (lv_typeParameters_9_0= ruleXTypeParameter ) ) )* otherlv_10= '>' )?
            int alt25=2;
            int LA25_0 = input.LA(1);

            if ( (LA25_0==23) ) {
                alt25=1;
            }
            switch (alt25) {
                case 1 :
                    // InternalXcore.g:1121:4: otherlv_6= '<' ( (lv_typeParameters_7_0= ruleXTypeParameter ) ) (otherlv_8= ',' ( (lv_typeParameters_9_0= ruleXTypeParameter ) ) )* otherlv_10= '>'
                    {
                    otherlv_6=(Token)match(input,23,FOLLOW_17); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_6, grammarAccess.getXClassAccess().getLessThanSignKeyword_4_0());
                      			
                    }
                    // InternalXcore.g:1125:4: ( (lv_typeParameters_7_0= ruleXTypeParameter ) )
                    // InternalXcore.g:1126:5: (lv_typeParameters_7_0= ruleXTypeParameter )
                    {
                    // InternalXcore.g:1126:5: (lv_typeParameters_7_0= ruleXTypeParameter )
                    // InternalXcore.g:1127:6: lv_typeParameters_7_0= ruleXTypeParameter
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXClassAccess().getTypeParametersXTypeParameterParserRuleCall_4_1_0());
                      					
                    }
                    pushFollow(FOLLOW_18);
                    lv_typeParameters_7_0=ruleXTypeParameter();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXClassRule());
                      						}
                      						add(
                      							current,
                      							"typeParameters",
                      							lv_typeParameters_7_0,
                      							"org.eclipse.emf.ecore.xcore.Xcore.XTypeParameter");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:1144:4: (otherlv_8= ',' ( (lv_typeParameters_9_0= ruleXTypeParameter ) ) )*
                    loop24:
                    do {
                        int alt24=2;
                        int LA24_0 = input.LA(1);

                        if ( (LA24_0==16) ) {
                            alt24=1;
                        }


                        switch (alt24) {
                    	case 1 :
                    	    // InternalXcore.g:1145:5: otherlv_8= ',' ( (lv_typeParameters_9_0= ruleXTypeParameter ) )
                    	    {
                    	    otherlv_8=(Token)match(input,16,FOLLOW_17); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_8, grammarAccess.getXClassAccess().getCommaKeyword_4_2_0());
                    	      				
                    	    }
                    	    // InternalXcore.g:1149:5: ( (lv_typeParameters_9_0= ruleXTypeParameter ) )
                    	    // InternalXcore.g:1150:6: (lv_typeParameters_9_0= ruleXTypeParameter )
                    	    {
                    	    // InternalXcore.g:1150:6: (lv_typeParameters_9_0= ruleXTypeParameter )
                    	    // InternalXcore.g:1151:7: lv_typeParameters_9_0= ruleXTypeParameter
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXClassAccess().getTypeParametersXTypeParameterParserRuleCall_4_2_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_18);
                    	    lv_typeParameters_9_0=ruleXTypeParameter();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getXClassRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"typeParameters",
                    	      								lv_typeParameters_9_0,
                    	      								"org.eclipse.emf.ecore.xcore.Xcore.XTypeParameter");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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

                    otherlv_10=(Token)match(input,24,FOLLOW_33); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_10, grammarAccess.getXClassAccess().getGreaterThanSignKeyword_4_3());
                      			
                    }

                    }
                    break;

            }

            // InternalXcore.g:1174:3: (otherlv_11= 'extends' ( (lv_superTypes_12_0= ruleXGenericType ) ) (otherlv_13= ',' ( (lv_superTypes_14_0= ruleXGenericType ) ) )* )?
            int alt27=2;
            int LA27_0 = input.LA(1);

            if ( (LA27_0==35) ) {
                alt27=1;
            }
            switch (alt27) {
                case 1 :
                    // InternalXcore.g:1175:4: otherlv_11= 'extends' ( (lv_superTypes_12_0= ruleXGenericType ) ) (otherlv_13= ',' ( (lv_superTypes_14_0= ruleXGenericType ) ) )*
                    {
                    otherlv_11=(Token)match(input,35,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_11, grammarAccess.getXClassAccess().getExtendsKeyword_5_0());
                      			
                    }
                    // InternalXcore.g:1179:4: ( (lv_superTypes_12_0= ruleXGenericType ) )
                    // InternalXcore.g:1180:5: (lv_superTypes_12_0= ruleXGenericType )
                    {
                    // InternalXcore.g:1180:5: (lv_superTypes_12_0= ruleXGenericType )
                    // InternalXcore.g:1181:6: lv_superTypes_12_0= ruleXGenericType
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXClassAccess().getSuperTypesXGenericTypeParserRuleCall_5_1_0());
                      					
                    }
                    pushFollow(FOLLOW_34);
                    lv_superTypes_12_0=ruleXGenericType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXClassRule());
                      						}
                      						add(
                      							current,
                      							"superTypes",
                      							lv_superTypes_12_0,
                      							"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:1198:4: (otherlv_13= ',' ( (lv_superTypes_14_0= ruleXGenericType ) ) )*
                    loop26:
                    do {
                        int alt26=2;
                        int LA26_0 = input.LA(1);

                        if ( (LA26_0==16) ) {
                            alt26=1;
                        }


                        switch (alt26) {
                    	case 1 :
                    	    // InternalXcore.g:1199:5: otherlv_13= ',' ( (lv_superTypes_14_0= ruleXGenericType ) )
                    	    {
                    	    otherlv_13=(Token)match(input,16,FOLLOW_8); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_13, grammarAccess.getXClassAccess().getCommaKeyword_5_2_0());
                    	      				
                    	    }
                    	    // InternalXcore.g:1203:5: ( (lv_superTypes_14_0= ruleXGenericType ) )
                    	    // InternalXcore.g:1204:6: (lv_superTypes_14_0= ruleXGenericType )
                    	    {
                    	    // InternalXcore.g:1204:6: (lv_superTypes_14_0= ruleXGenericType )
                    	    // InternalXcore.g:1205:7: lv_superTypes_14_0= ruleXGenericType
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXClassAccess().getSuperTypesXGenericTypeParserRuleCall_5_2_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_34);
                    	    lv_superTypes_14_0=ruleXGenericType();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getXClassRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"superTypes",
                    	      								lv_superTypes_14_0,
                    	      								"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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


                    }
                    break;

            }

            // InternalXcore.g:1224:3: (otherlv_15= 'wraps' ( (lv_instanceType_16_0= ruleJvmTypeReference ) ) )?
            int alt28=2;
            int LA28_0 = input.LA(1);

            if ( (LA28_0==25) ) {
                alt28=1;
            }
            switch (alt28) {
                case 1 :
                    // InternalXcore.g:1225:4: otherlv_15= 'wraps' ( (lv_instanceType_16_0= ruleJvmTypeReference ) )
                    {
                    otherlv_15=(Token)match(input,25,FOLLOW_20); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_15, grammarAccess.getXClassAccess().getWrapsKeyword_6_0());
                      			
                    }
                    // InternalXcore.g:1229:4: ( (lv_instanceType_16_0= ruleJvmTypeReference ) )
                    // InternalXcore.g:1230:5: (lv_instanceType_16_0= ruleJvmTypeReference )
                    {
                    // InternalXcore.g:1230:5: (lv_instanceType_16_0= ruleJvmTypeReference )
                    // InternalXcore.g:1231:6: lv_instanceType_16_0= ruleJvmTypeReference
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXClassAccess().getInstanceTypeJvmTypeReferenceParserRuleCall_6_1_0());
                      					
                    }
                    pushFollow(FOLLOW_22);
                    lv_instanceType_16_0=ruleJvmTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXClassRule());
                      						}
                      						set(
                      							current,
                      							"instanceType",
                      							lv_instanceType_16_0,
                      							"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_17=(Token)match(input,29,FOLLOW_35); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_17, grammarAccess.getXClassAccess().getLeftCurlyBracketKeyword_7());
              		
            }
            // InternalXcore.g:1253:3: ( (lv_members_18_0= ruleXMember ) )*
            loop29:
            do {
                int alt29=2;
                int LA29_0 = input.LA(1);

                if ( (LA29_0==RULE_ID||LA29_0==14||(LA29_0>=36 && LA29_0<=52)||LA29_0==55) ) {
                    alt29=1;
                }


                switch (alt29) {
            	case 1 :
            	    // InternalXcore.g:1254:4: (lv_members_18_0= ruleXMember )
            	    {
            	    // InternalXcore.g:1254:4: (lv_members_18_0= ruleXMember )
            	    // InternalXcore.g:1255:5: lv_members_18_0= ruleXMember
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getXClassAccess().getMembersXMemberParserRuleCall_8_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_35);
            	    lv_members_18_0=ruleXMember();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getXClassRule());
            	      					}
            	      					add(
            	      						current,
            	      						"members",
            	      						lv_members_18_0,
            	      						"org.eclipse.emf.ecore.xcore.Xcore.XMember");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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

            otherlv_19=(Token)match(input,30,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_19, grammarAccess.getXClassAccess().getRightCurlyBracketKeyword_9());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXClass"


    // $ANTLR start "entryRuleXMember"
    // InternalXcore.g:1280:1: entryRuleXMember returns [EObject current=null] : iv_ruleXMember= ruleXMember EOF ;
    public final EObject entryRuleXMember() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXMember = null;


        try {
            // InternalXcore.g:1280:48: (iv_ruleXMember= ruleXMember EOF )
            // InternalXcore.g:1281:2: iv_ruleXMember= ruleXMember EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXMemberRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXMember=ruleXMember();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXMember; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXMember"


    // $ANTLR start "ruleXMember"
    // InternalXcore.g:1287:1: ruleXMember returns [EObject current=null] : (this_XOperation_0= ruleXOperation | this_XAttribute_1= ruleXAttribute | this_XReference_2= ruleXReference ) ;
    public final EObject ruleXMember() throws RecognitionException {
        EObject current = null;

        EObject this_XOperation_0 = null;

        EObject this_XAttribute_1 = null;

        EObject this_XReference_2 = null;



        	enterRule();

        try {
            // InternalXcore.g:1293:2: ( (this_XOperation_0= ruleXOperation | this_XAttribute_1= ruleXAttribute | this_XReference_2= ruleXReference ) )
            // InternalXcore.g:1294:2: (this_XOperation_0= ruleXOperation | this_XAttribute_1= ruleXAttribute | this_XReference_2= ruleXReference )
            {
            // InternalXcore.g:1294:2: (this_XOperation_0= ruleXOperation | this_XAttribute_1= ruleXAttribute | this_XReference_2= ruleXReference )
            int alt30=3;
            alt30 = dfa30.predict(input);
            switch (alt30) {
                case 1 :
                    // InternalXcore.g:1295:3: this_XOperation_0= ruleXOperation
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXMemberAccess().getXOperationParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XOperation_0=ruleXOperation();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XOperation_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:1304:3: this_XAttribute_1= ruleXAttribute
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXMemberAccess().getXAttributeParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XAttribute_1=ruleXAttribute();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XAttribute_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalXcore.g:1313:3: this_XReference_2= ruleXReference
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXMemberAccess().getXReferenceParserRuleCall_2());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XReference_2=ruleXReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XReference_2;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXMember"


    // $ANTLR start "entryRuleXAttribute"
    // InternalXcore.g:1325:1: entryRuleXAttribute returns [EObject current=null] : iv_ruleXAttribute= ruleXAttribute EOF ;
    public final EObject entryRuleXAttribute() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXAttribute = null;


        try {
            // InternalXcore.g:1325:51: (iv_ruleXAttribute= ruleXAttribute EOF )
            // InternalXcore.g:1326:2: iv_ruleXAttribute= ruleXAttribute EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXAttributeRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXAttribute=ruleXAttribute();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXAttribute; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXAttribute"


    // $ANTLR start "ruleXAttribute"
    // InternalXcore.g:1332:1: ruleXAttribute returns [EObject current=null] : ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( ( ( ({...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) ) ) )* ) ) ) ( (lv_type_11_0= ruleXGenericType ) ) ( (lv_multiplicity_12_0= ruleXMultiplicity ) )? ( (lv_name_13_0= RULE_ID ) ) (otherlv_14= '=' ( (lv_defaultValueLiteral_15_0= RULE_STRING ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) ) ) ;
    public final EObject ruleXAttribute() throws RecognitionException {
        EObject current = null;

        Token lv_unordered_3_0=null;
        Token lv_unique_4_0=null;
        Token lv_readonly_5_0=null;
        Token lv_transient_6_0=null;
        Token lv_volatile_7_0=null;
        Token lv_unsettable_8_0=null;
        Token lv_derived_9_0=null;
        Token lv_iD_10_0=null;
        Token lv_name_13_0=null;
        Token otherlv_14=null;
        Token lv_defaultValueLiteral_15_0=null;
        Token otherlv_17=null;
        Token otherlv_19=null;
        Token otherlv_21=null;
        Token otherlv_23=null;
        EObject lv_annotations_1_0 = null;

        EObject lv_type_11_0 = null;

        AntlrDatatypeRuleToken lv_multiplicity_12_0 = null;

        EObject lv_getBody_18_0 = null;

        EObject lv_setBody_20_0 = null;

        EObject lv_isSetBody_22_0 = null;

        EObject lv_unsetBody_24_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:1338:2: ( ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( ( ( ({...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) ) ) )* ) ) ) ( (lv_type_11_0= ruleXGenericType ) ) ( (lv_multiplicity_12_0= ruleXMultiplicity ) )? ( (lv_name_13_0= RULE_ID ) ) (otherlv_14= '=' ( (lv_defaultValueLiteral_15_0= RULE_STRING ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) ) ) )
            // InternalXcore.g:1339:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( ( ( ({...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) ) ) )* ) ) ) ( (lv_type_11_0= ruleXGenericType ) ) ( (lv_multiplicity_12_0= ruleXMultiplicity ) )? ( (lv_name_13_0= RULE_ID ) ) (otherlv_14= '=' ( (lv_defaultValueLiteral_15_0= RULE_STRING ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) ) )
            {
            // InternalXcore.g:1339:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( ( ( ({...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) ) ) )* ) ) ) ( (lv_type_11_0= ruleXGenericType ) ) ( (lv_multiplicity_12_0= ruleXMultiplicity ) )? ( (lv_name_13_0= RULE_ID ) ) (otherlv_14= '=' ( (lv_defaultValueLiteral_15_0= RULE_STRING ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) ) )
            // InternalXcore.g:1340:3: () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( ( ( ({...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) ) ) )* ) ) ) ( (lv_type_11_0= ruleXGenericType ) ) ( (lv_multiplicity_12_0= ruleXMultiplicity ) )? ( (lv_name_13_0= RULE_ID ) ) (otherlv_14= '=' ( (lv_defaultValueLiteral_15_0= RULE_STRING ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) )
            {
            // InternalXcore.g:1340:3: ()
            // InternalXcore.g:1341:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXAttributeAccess().getXAttributeAction_0(),
              					current);
              			
            }

            }

            // InternalXcore.g:1347:3: ( (lv_annotations_1_0= ruleXAnnotation ) )*
            loop31:
            do {
                int alt31=2;
                int LA31_0 = input.LA(1);

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


                switch (alt31) {
            	case 1 :
            	    // InternalXcore.g:1348:4: (lv_annotations_1_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:1348:4: (lv_annotations_1_0= ruleXAnnotation )
            	    // InternalXcore.g:1349:5: lv_annotations_1_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getXAttributeAccess().getAnnotationsXAnnotationParserRuleCall_1_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_36);
            	    lv_annotations_1_0=ruleXAnnotation();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getXAttributeRule());
            	      					}
            	      					add(
            	      						current,
            	      						"annotations",
            	      						lv_annotations_1_0,
            	      						"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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

            // InternalXcore.g:1366:3: ( ( ( ( ({...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) ) ) )* ) ) )
            // InternalXcore.g:1367:4: ( ( ( ({...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) ) ) )* ) )
            {
            // InternalXcore.g:1367:4: ( ( ( ({...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) ) ) )* ) )
            // InternalXcore.g:1368:5: ( ( ({...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) ) ) )* )
            {
            getUnorderedGroupHelper().enter(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());
            // InternalXcore.g:1371:5: ( ( ({...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) ) ) )* )
            // InternalXcore.g:1372:6: ( ({...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) ) ) )*
            {
            // InternalXcore.g:1372:6: ( ({...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) ) ) )*
            loop32:
            do {
                int alt32=9;
                alt32 = dfa32.predict(input);
                switch (alt32) {
            	case 1 :
            	    // InternalXcore.g:1373:4: ({...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) ) )
            	    {
            	    // InternalXcore.g:1373:4: ({...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) ) )
            	    // InternalXcore.g:1374:5: {...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 0) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 0)");
            	    }
            	    // InternalXcore.g:1374:107: ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) )
            	    // InternalXcore.g:1375:6: ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 0);
            	    // InternalXcore.g:1378:9: ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) )
            	    // InternalXcore.g:1378:10: {...}? => ( (lv_unordered_3_0= 'unordered' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1378:19: ( (lv_unordered_3_0= 'unordered' ) )
            	    // InternalXcore.g:1378:20: (lv_unordered_3_0= 'unordered' )
            	    {
            	    // InternalXcore.g:1378:20: (lv_unordered_3_0= 'unordered' )
            	    // InternalXcore.g:1379:10: lv_unordered_3_0= 'unordered'
            	    {
            	    lv_unordered_3_0=(Token)match(input,36,FOLLOW_37); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										newLeafNode(lv_unordered_3_0, grammarAccess.getXAttributeAccess().getUnorderedUnorderedKeyword_2_0_0());
            	      									
            	    }
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElement(grammarAccess.getXAttributeRule());
            	      										}
            	      										setWithLastConsumed(current, "unordered", lv_unordered_3_0 != null, "unordered");
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalXcore.g:1396:4: ({...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) ) )
            	    {
            	    // InternalXcore.g:1396:4: ({...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) ) )
            	    // InternalXcore.g:1397:5: {...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 1) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 1)");
            	    }
            	    // InternalXcore.g:1397:107: ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) )
            	    // InternalXcore.g:1398:6: ({...}? => ( (lv_unique_4_0= 'unique' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 1);
            	    // InternalXcore.g:1401:9: ({...}? => ( (lv_unique_4_0= 'unique' ) ) )
            	    // InternalXcore.g:1401:10: {...}? => ( (lv_unique_4_0= 'unique' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1401:19: ( (lv_unique_4_0= 'unique' ) )
            	    // InternalXcore.g:1401:20: (lv_unique_4_0= 'unique' )
            	    {
            	    // InternalXcore.g:1401:20: (lv_unique_4_0= 'unique' )
            	    // InternalXcore.g:1402:10: lv_unique_4_0= 'unique'
            	    {
            	    lv_unique_4_0=(Token)match(input,37,FOLLOW_37); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										newLeafNode(lv_unique_4_0, grammarAccess.getXAttributeAccess().getUniqueUniqueKeyword_2_1_0());
            	      									
            	    }
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElement(grammarAccess.getXAttributeRule());
            	      										}
            	      										setWithLastConsumed(current, "unique", lv_unique_4_0 != null, "unique");
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalXcore.g:1419:4: ({...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) ) )
            	    {
            	    // InternalXcore.g:1419:4: ({...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) ) )
            	    // InternalXcore.g:1420:5: {...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 2) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 2)");
            	    }
            	    // InternalXcore.g:1420:107: ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) )
            	    // InternalXcore.g:1421:6: ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 2);
            	    // InternalXcore.g:1424:9: ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) )
            	    // InternalXcore.g:1424:10: {...}? => ( (lv_readonly_5_0= 'readonly' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1424:19: ( (lv_readonly_5_0= 'readonly' ) )
            	    // InternalXcore.g:1424:20: (lv_readonly_5_0= 'readonly' )
            	    {
            	    // InternalXcore.g:1424:20: (lv_readonly_5_0= 'readonly' )
            	    // InternalXcore.g:1425:10: lv_readonly_5_0= 'readonly'
            	    {
            	    lv_readonly_5_0=(Token)match(input,38,FOLLOW_37); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										newLeafNode(lv_readonly_5_0, grammarAccess.getXAttributeAccess().getReadonlyReadonlyKeyword_2_2_0());
            	      									
            	    }
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElement(grammarAccess.getXAttributeRule());
            	      										}
            	      										setWithLastConsumed(current, "readonly", lv_readonly_5_0 != null, "readonly");
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalXcore.g:1442:4: ({...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) ) )
            	    {
            	    // InternalXcore.g:1442:4: ({...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) ) )
            	    // InternalXcore.g:1443:5: {...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 3) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 3)");
            	    }
            	    // InternalXcore.g:1443:107: ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) )
            	    // InternalXcore.g:1444:6: ({...}? => ( (lv_transient_6_0= 'transient' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 3);
            	    // InternalXcore.g:1447:9: ({...}? => ( (lv_transient_6_0= 'transient' ) ) )
            	    // InternalXcore.g:1447:10: {...}? => ( (lv_transient_6_0= 'transient' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1447:19: ( (lv_transient_6_0= 'transient' ) )
            	    // InternalXcore.g:1447:20: (lv_transient_6_0= 'transient' )
            	    {
            	    // InternalXcore.g:1447:20: (lv_transient_6_0= 'transient' )
            	    // InternalXcore.g:1448:10: lv_transient_6_0= 'transient'
            	    {
            	    lv_transient_6_0=(Token)match(input,39,FOLLOW_37); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										newLeafNode(lv_transient_6_0, grammarAccess.getXAttributeAccess().getTransientTransientKeyword_2_3_0());
            	      									
            	    }
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElement(grammarAccess.getXAttributeRule());
            	      										}
            	      										setWithLastConsumed(current, "transient", lv_transient_6_0 != null, "transient");
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalXcore.g:1465:4: ({...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) ) )
            	    {
            	    // InternalXcore.g:1465:4: ({...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) ) )
            	    // InternalXcore.g:1466:5: {...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 4) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 4)");
            	    }
            	    // InternalXcore.g:1466:107: ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) )
            	    // InternalXcore.g:1467:6: ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 4);
            	    // InternalXcore.g:1470:9: ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) )
            	    // InternalXcore.g:1470:10: {...}? => ( (lv_volatile_7_0= 'volatile' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1470:19: ( (lv_volatile_7_0= 'volatile' ) )
            	    // InternalXcore.g:1470:20: (lv_volatile_7_0= 'volatile' )
            	    {
            	    // InternalXcore.g:1470:20: (lv_volatile_7_0= 'volatile' )
            	    // InternalXcore.g:1471:10: lv_volatile_7_0= 'volatile'
            	    {
            	    lv_volatile_7_0=(Token)match(input,40,FOLLOW_37); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										newLeafNode(lv_volatile_7_0, grammarAccess.getXAttributeAccess().getVolatileVolatileKeyword_2_4_0());
            	      									
            	    }
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElement(grammarAccess.getXAttributeRule());
            	      										}
            	      										setWithLastConsumed(current, "volatile", lv_volatile_7_0 != null, "volatile");
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());

            	    }


            	    }


            	    }
            	    break;
            	case 6 :
            	    // InternalXcore.g:1488:4: ({...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) ) )
            	    {
            	    // InternalXcore.g:1488:4: ({...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) ) )
            	    // InternalXcore.g:1489:5: {...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 5) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 5)");
            	    }
            	    // InternalXcore.g:1489:107: ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) )
            	    // InternalXcore.g:1490:6: ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 5);
            	    // InternalXcore.g:1493:9: ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) )
            	    // InternalXcore.g:1493:10: {...}? => ( (lv_unsettable_8_0= 'unsettable' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1493:19: ( (lv_unsettable_8_0= 'unsettable' ) )
            	    // InternalXcore.g:1493:20: (lv_unsettable_8_0= 'unsettable' )
            	    {
            	    // InternalXcore.g:1493:20: (lv_unsettable_8_0= 'unsettable' )
            	    // InternalXcore.g:1494:10: lv_unsettable_8_0= 'unsettable'
            	    {
            	    lv_unsettable_8_0=(Token)match(input,41,FOLLOW_37); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										newLeafNode(lv_unsettable_8_0, grammarAccess.getXAttributeAccess().getUnsettableUnsettableKeyword_2_5_0());
            	      									
            	    }
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElement(grammarAccess.getXAttributeRule());
            	      										}
            	      										setWithLastConsumed(current, "unsettable", lv_unsettable_8_0 != null, "unsettable");
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());

            	    }


            	    }


            	    }
            	    break;
            	case 7 :
            	    // InternalXcore.g:1511:4: ({...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) ) )
            	    {
            	    // InternalXcore.g:1511:4: ({...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) ) )
            	    // InternalXcore.g:1512:5: {...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 6) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 6)");
            	    }
            	    // InternalXcore.g:1512:107: ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) )
            	    // InternalXcore.g:1513:6: ({...}? => ( (lv_derived_9_0= 'derived' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 6);
            	    // InternalXcore.g:1516:9: ({...}? => ( (lv_derived_9_0= 'derived' ) ) )
            	    // InternalXcore.g:1516:10: {...}? => ( (lv_derived_9_0= 'derived' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1516:19: ( (lv_derived_9_0= 'derived' ) )
            	    // InternalXcore.g:1516:20: (lv_derived_9_0= 'derived' )
            	    {
            	    // InternalXcore.g:1516:20: (lv_derived_9_0= 'derived' )
            	    // InternalXcore.g:1517:10: lv_derived_9_0= 'derived'
            	    {
            	    lv_derived_9_0=(Token)match(input,42,FOLLOW_37); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										newLeafNode(lv_derived_9_0, grammarAccess.getXAttributeAccess().getDerivedDerivedKeyword_2_6_0());
            	      									
            	    }
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElement(grammarAccess.getXAttributeRule());
            	      										}
            	      										setWithLastConsumed(current, "derived", lv_derived_9_0 != null, "derived");
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());

            	    }


            	    }


            	    }
            	    break;
            	case 8 :
            	    // InternalXcore.g:1534:4: ({...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) ) )
            	    {
            	    // InternalXcore.g:1534:4: ({...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) ) )
            	    // InternalXcore.g:1535:5: {...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 7) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 7)");
            	    }
            	    // InternalXcore.g:1535:107: ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) )
            	    // InternalXcore.g:1536:6: ({...}? => ( (lv_iD_10_0= 'id' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 7);
            	    // InternalXcore.g:1539:9: ({...}? => ( (lv_iD_10_0= 'id' ) ) )
            	    // InternalXcore.g:1539:10: {...}? => ( (lv_iD_10_0= 'id' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1539:19: ( (lv_iD_10_0= 'id' ) )
            	    // InternalXcore.g:1539:20: (lv_iD_10_0= 'id' )
            	    {
            	    // InternalXcore.g:1539:20: (lv_iD_10_0= 'id' )
            	    // InternalXcore.g:1540:10: lv_iD_10_0= 'id'
            	    {
            	    lv_iD_10_0=(Token)match(input,43,FOLLOW_37); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										newLeafNode(lv_iD_10_0, grammarAccess.getXAttributeAccess().getIDIdKeyword_2_7_0());
            	      									
            	    }
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElement(grammarAccess.getXAttributeRule());
            	      										}
            	      										setWithLastConsumed(current, "iD", lv_iD_10_0 != null, "id");
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            getUnorderedGroupHelper().leave(grammarAccess.getXAttributeAccess().getUnorderedGroup_2());

            }

            // InternalXcore.g:1564:3: ( (lv_type_11_0= ruleXGenericType ) )
            // InternalXcore.g:1565:4: (lv_type_11_0= ruleXGenericType )
            {
            // InternalXcore.g:1565:4: (lv_type_11_0= ruleXGenericType )
            // InternalXcore.g:1566:5: lv_type_11_0= ruleXGenericType
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXAttributeAccess().getTypeXGenericTypeParserRuleCall_3_0());
              				
            }
            pushFollow(FOLLOW_38);
            lv_type_11_0=ruleXGenericType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXAttributeRule());
              					}
              					set(
              						current,
              						"type",
              						lv_type_11_0,
              						"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalXcore.g:1583:3: ( (lv_multiplicity_12_0= ruleXMultiplicity ) )?
            int alt33=2;
            int LA33_0 = input.LA(1);

            if ( (LA33_0==59) ) {
                alt33=1;
            }
            switch (alt33) {
                case 1 :
                    // InternalXcore.g:1584:4: (lv_multiplicity_12_0= ruleXMultiplicity )
                    {
                    // InternalXcore.g:1584:4: (lv_multiplicity_12_0= ruleXMultiplicity )
                    // InternalXcore.g:1585:5: lv_multiplicity_12_0= ruleXMultiplicity
                    {
                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getXAttributeAccess().getMultiplicityXMultiplicityParserRuleCall_4_0());
                      				
                    }
                    pushFollow(FOLLOW_15);
                    lv_multiplicity_12_0=ruleXMultiplicity();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElementForParent(grammarAccess.getXAttributeRule());
                      					}
                      					set(
                      						current,
                      						"multiplicity",
                      						lv_multiplicity_12_0,
                      						"org.eclipse.emf.ecore.xcore.Xcore.XMultiplicity");
                      					afterParserOrEnumRuleCall();
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalXcore.g:1602:3: ( (lv_name_13_0= RULE_ID ) )
            // InternalXcore.g:1603:4: (lv_name_13_0= RULE_ID )
            {
            // InternalXcore.g:1603:4: (lv_name_13_0= RULE_ID )
            // InternalXcore.g:1604:5: lv_name_13_0= RULE_ID
            {
            lv_name_13_0=(Token)match(input,RULE_ID,FOLLOW_39); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_13_0, grammarAccess.getXAttributeAccess().getNameIDTerminalRuleCall_5_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getXAttributeRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_13_0,
              						"org.eclipse.xtext.xbase.Xtype.ID");
              				
            }

            }


            }

            // InternalXcore.g:1620:3: (otherlv_14= '=' ( (lv_defaultValueLiteral_15_0= RULE_STRING ) ) )?
            int alt34=2;
            int LA34_0 = input.LA(1);

            if ( (LA34_0==18) ) {
                alt34=1;
            }
            switch (alt34) {
                case 1 :
                    // InternalXcore.g:1621:4: otherlv_14= '=' ( (lv_defaultValueLiteral_15_0= RULE_STRING ) )
                    {
                    otherlv_14=(Token)match(input,18,FOLLOW_12); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_14, grammarAccess.getXAttributeAccess().getEqualsSignKeyword_6_0());
                      			
                    }
                    // InternalXcore.g:1625:4: ( (lv_defaultValueLiteral_15_0= RULE_STRING ) )
                    // InternalXcore.g:1626:5: (lv_defaultValueLiteral_15_0= RULE_STRING )
                    {
                    // InternalXcore.g:1626:5: (lv_defaultValueLiteral_15_0= RULE_STRING )
                    // InternalXcore.g:1627:6: lv_defaultValueLiteral_15_0= RULE_STRING
                    {
                    lv_defaultValueLiteral_15_0=(Token)match(input,RULE_STRING,FOLLOW_40); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_defaultValueLiteral_15_0, grammarAccess.getXAttributeAccess().getDefaultValueLiteralSTRINGTerminalRuleCall_6_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getXAttributeRule());
                      						}
                      						setWithLastConsumed(
                      							current,
                      							"defaultValueLiteral",
                      							lv_defaultValueLiteral_15_0,
                      							"org.eclipse.xtext.xbase.Xtype.STRING");
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalXcore.g:1644:3: ( ( ( ( ({...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) )
            // InternalXcore.g:1645:4: ( ( ( ({...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) ) ) )* ) )
            {
            // InternalXcore.g:1645:4: ( ( ( ({...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) ) ) )* ) )
            // InternalXcore.g:1646:5: ( ( ({...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) ) ) )* )
            {
            getUnorderedGroupHelper().enter(grammarAccess.getXAttributeAccess().getUnorderedGroup_7());
            // InternalXcore.g:1649:5: ( ( ({...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) ) ) )* )
            // InternalXcore.g:1650:6: ( ({...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) ) ) )*
            {
            // InternalXcore.g:1650:6: ( ({...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) ) ) )*
            loop35:
            do {
                int alt35=5;
                alt35 = dfa35.predict(input);
                switch (alt35) {
            	case 1 :
            	    // InternalXcore.g:1651:4: ({...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:1651:4: ({...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:1652:5: {...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 0) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 0)");
            	    }
            	    // InternalXcore.g:1652:107: ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:1653:6: ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 0);
            	    // InternalXcore.g:1656:9: ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:1656:10: {...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1656:19: (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:1656:20: otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_17=(Token)match(input,44,FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_17, grammarAccess.getXAttributeAccess().getGetKeyword_7_0_0());
            	      								
            	    }
            	    // InternalXcore.g:1660:9: ( (lv_getBody_18_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:1661:10: (lv_getBody_18_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:1661:10: (lv_getBody_18_0= ruleXBlockExpression )
            	    // InternalXcore.g:1662:11: lv_getBody_18_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      											newCompositeNode(grammarAccess.getXAttributeAccess().getGetBodyXBlockExpressionParserRuleCall_7_0_1_0());
            	      										
            	    }
            	    pushFollow(FOLLOW_40);
            	    lv_getBody_18_0=ruleXBlockExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElementForParent(grammarAccess.getXAttributeRule());
            	      											}
            	      											set(
            	      												current,
            	      												"getBody",
            	      												lv_getBody_18_0,
            	      												"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
            	      											afterParserOrEnumRuleCall();
            	      										
            	    }

            	    }


            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_7());

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalXcore.g:1685:4: ({...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:1685:4: ({...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:1686:5: {...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 1) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 1)");
            	    }
            	    // InternalXcore.g:1686:107: ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:1687:6: ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 1);
            	    // InternalXcore.g:1690:9: ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:1690:10: {...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1690:19: (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:1690:20: otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_19=(Token)match(input,45,FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_19, grammarAccess.getXAttributeAccess().getSetKeyword_7_1_0());
            	      								
            	    }
            	    // InternalXcore.g:1694:9: ( (lv_setBody_20_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:1695:10: (lv_setBody_20_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:1695:10: (lv_setBody_20_0= ruleXBlockExpression )
            	    // InternalXcore.g:1696:11: lv_setBody_20_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      											newCompositeNode(grammarAccess.getXAttributeAccess().getSetBodyXBlockExpressionParserRuleCall_7_1_1_0());
            	      										
            	    }
            	    pushFollow(FOLLOW_40);
            	    lv_setBody_20_0=ruleXBlockExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElementForParent(grammarAccess.getXAttributeRule());
            	      											}
            	      											set(
            	      												current,
            	      												"setBody",
            	      												lv_setBody_20_0,
            	      												"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
            	      											afterParserOrEnumRuleCall();
            	      										
            	    }

            	    }


            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_7());

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalXcore.g:1719:4: ({...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:1719:4: ({...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:1720:5: {...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 2) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 2)");
            	    }
            	    // InternalXcore.g:1720:107: ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:1721:6: ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 2);
            	    // InternalXcore.g:1724:9: ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:1724:10: {...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1724:19: (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:1724:20: otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_21=(Token)match(input,46,FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_21, grammarAccess.getXAttributeAccess().getIsSetKeyword_7_2_0());
            	      								
            	    }
            	    // InternalXcore.g:1728:9: ( (lv_isSetBody_22_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:1729:10: (lv_isSetBody_22_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:1729:10: (lv_isSetBody_22_0= ruleXBlockExpression )
            	    // InternalXcore.g:1730:11: lv_isSetBody_22_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      											newCompositeNode(grammarAccess.getXAttributeAccess().getIsSetBodyXBlockExpressionParserRuleCall_7_2_1_0());
            	      										
            	    }
            	    pushFollow(FOLLOW_40);
            	    lv_isSetBody_22_0=ruleXBlockExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElementForParent(grammarAccess.getXAttributeRule());
            	      											}
            	      											set(
            	      												current,
            	      												"isSetBody",
            	      												lv_isSetBody_22_0,
            	      												"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
            	      											afterParserOrEnumRuleCall();
            	      										
            	    }

            	    }


            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_7());

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalXcore.g:1753:4: ({...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:1753:4: ({...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:1754:5: {...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 3) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 3)");
            	    }
            	    // InternalXcore.g:1754:107: ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:1755:6: ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 3);
            	    // InternalXcore.g:1758:9: ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:1758:10: {...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1758:19: (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:1758:20: otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_23=(Token)match(input,47,FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_23, grammarAccess.getXAttributeAccess().getUnsetKeyword_7_3_0());
            	      								
            	    }
            	    // InternalXcore.g:1762:9: ( (lv_unsetBody_24_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:1763:10: (lv_unsetBody_24_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:1763:10: (lv_unsetBody_24_0= ruleXBlockExpression )
            	    // InternalXcore.g:1764:11: lv_unsetBody_24_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      											newCompositeNode(grammarAccess.getXAttributeAccess().getUnsetBodyXBlockExpressionParserRuleCall_7_3_1_0());
            	      										
            	    }
            	    pushFollow(FOLLOW_40);
            	    lv_unsetBody_24_0=ruleXBlockExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElementForParent(grammarAccess.getXAttributeRule());
            	      											}
            	      											set(
            	      												current,
            	      												"unsetBody",
            	      												lv_unsetBody_24_0,
            	      												"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
            	      											afterParserOrEnumRuleCall();
            	      										
            	    }

            	    }


            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXAttributeAccess().getUnorderedGroup_7());

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            getUnorderedGroupHelper().leave(grammarAccess.getXAttributeAccess().getUnorderedGroup_7());

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXAttribute"


    // $ANTLR start "entryRuleXReference"
    // InternalXcore.g:1798:1: entryRuleXReference returns [EObject current=null] : iv_ruleXReference= ruleXReference EOF ;
    public final EObject entryRuleXReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXReference = null;


        try {
            // InternalXcore.g:1798:51: (iv_ruleXReference= ruleXReference EOF )
            // InternalXcore.g:1799:2: iv_ruleXReference= ruleXReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXReferenceRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXReference=ruleXReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXReference; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXReference"


    // $ANTLR start "ruleXReference"
    // InternalXcore.g:1805:1: ruleXReference returns [EObject current=null] : ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( ( (lv_containment_2_0= 'contains' ) ) ( (lv_resolveProxies_3_0= 'resolving' ) )? ) | ( ( (lv_resolveProxies_4_0= 'resolving' ) ) ( (lv_containment_5_0= 'contains' ) ) ) | ( ( (lv_container_6_0= 'container' ) ) ( (lv_resolveProxies_7_0= 'resolving' ) )? ) | ( ( (lv_resolveProxies_8_0= 'resolving' ) ) ( (lv_container_9_0= 'container' ) ) ) | (otherlv_10= 'refers' ( (lv_local_11_0= 'local' ) )? ) | ( ( (lv_local_12_0= 'local' ) ) otherlv_13= 'refers' ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_18_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) ) ) )* ) ) ) ( (lv_type_22_0= ruleXGenericType ) ) ( (lv_multiplicity_23_0= ruleXMultiplicity ) )? ( (lv_name_24_0= RULE_ID ) ) (otherlv_25= 'opposite' ( ( ruleValidID ) ) )? (otherlv_27= 'keys' ( ( ruleValidID ) ) (otherlv_29= ',' ( ( ruleValidID ) ) )* )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) ) ) ;
    public final EObject ruleXReference() throws RecognitionException {
        EObject current = null;

        Token lv_containment_2_0=null;
        Token lv_resolveProxies_3_0=null;
        Token lv_resolveProxies_4_0=null;
        Token lv_containment_5_0=null;
        Token lv_container_6_0=null;
        Token lv_resolveProxies_7_0=null;
        Token lv_resolveProxies_8_0=null;
        Token lv_container_9_0=null;
        Token otherlv_10=null;
        Token lv_local_11_0=null;
        Token lv_local_12_0=null;
        Token otherlv_13=null;
        Token lv_unordered_15_0=null;
        Token lv_unique_16_0=null;
        Token lv_readonly_17_0=null;
        Token lv_transient_18_0=null;
        Token lv_volatile_19_0=null;
        Token lv_unsettable_20_0=null;
        Token lv_derived_21_0=null;
        Token lv_name_24_0=null;
        Token otherlv_25=null;
        Token otherlv_27=null;
        Token otherlv_29=null;
        Token otherlv_32=null;
        Token otherlv_34=null;
        Token otherlv_36=null;
        Token otherlv_38=null;
        EObject lv_annotations_1_0 = null;

        EObject lv_type_22_0 = null;

        AntlrDatatypeRuleToken lv_multiplicity_23_0 = null;

        EObject lv_getBody_33_0 = null;

        EObject lv_setBody_35_0 = null;

        EObject lv_isSetBody_37_0 = null;

        EObject lv_unsetBody_39_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:1811:2: ( ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( ( (lv_containment_2_0= 'contains' ) ) ( (lv_resolveProxies_3_0= 'resolving' ) )? ) | ( ( (lv_resolveProxies_4_0= 'resolving' ) ) ( (lv_containment_5_0= 'contains' ) ) ) | ( ( (lv_container_6_0= 'container' ) ) ( (lv_resolveProxies_7_0= 'resolving' ) )? ) | ( ( (lv_resolveProxies_8_0= 'resolving' ) ) ( (lv_container_9_0= 'container' ) ) ) | (otherlv_10= 'refers' ( (lv_local_11_0= 'local' ) )? ) | ( ( (lv_local_12_0= 'local' ) ) otherlv_13= 'refers' ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_18_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) ) ) )* ) ) ) ( (lv_type_22_0= ruleXGenericType ) ) ( (lv_multiplicity_23_0= ruleXMultiplicity ) )? ( (lv_name_24_0= RULE_ID ) ) (otherlv_25= 'opposite' ( ( ruleValidID ) ) )? (otherlv_27= 'keys' ( ( ruleValidID ) ) (otherlv_29= ',' ( ( ruleValidID ) ) )* )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) ) ) )
            // InternalXcore.g:1812:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( ( (lv_containment_2_0= 'contains' ) ) ( (lv_resolveProxies_3_0= 'resolving' ) )? ) | ( ( (lv_resolveProxies_4_0= 'resolving' ) ) ( (lv_containment_5_0= 'contains' ) ) ) | ( ( (lv_container_6_0= 'container' ) ) ( (lv_resolveProxies_7_0= 'resolving' ) )? ) | ( ( (lv_resolveProxies_8_0= 'resolving' ) ) ( (lv_container_9_0= 'container' ) ) ) | (otherlv_10= 'refers' ( (lv_local_11_0= 'local' ) )? ) | ( ( (lv_local_12_0= 'local' ) ) otherlv_13= 'refers' ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_18_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) ) ) )* ) ) ) ( (lv_type_22_0= ruleXGenericType ) ) ( (lv_multiplicity_23_0= ruleXMultiplicity ) )? ( (lv_name_24_0= RULE_ID ) ) (otherlv_25= 'opposite' ( ( ruleValidID ) ) )? (otherlv_27= 'keys' ( ( ruleValidID ) ) (otherlv_29= ',' ( ( ruleValidID ) ) )* )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) ) )
            {
            // InternalXcore.g:1812:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( ( (lv_containment_2_0= 'contains' ) ) ( (lv_resolveProxies_3_0= 'resolving' ) )? ) | ( ( (lv_resolveProxies_4_0= 'resolving' ) ) ( (lv_containment_5_0= 'contains' ) ) ) | ( ( (lv_container_6_0= 'container' ) ) ( (lv_resolveProxies_7_0= 'resolving' ) )? ) | ( ( (lv_resolveProxies_8_0= 'resolving' ) ) ( (lv_container_9_0= 'container' ) ) ) | (otherlv_10= 'refers' ( (lv_local_11_0= 'local' ) )? ) | ( ( (lv_local_12_0= 'local' ) ) otherlv_13= 'refers' ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_18_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) ) ) )* ) ) ) ( (lv_type_22_0= ruleXGenericType ) ) ( (lv_multiplicity_23_0= ruleXMultiplicity ) )? ( (lv_name_24_0= RULE_ID ) ) (otherlv_25= 'opposite' ( ( ruleValidID ) ) )? (otherlv_27= 'keys' ( ( ruleValidID ) ) (otherlv_29= ',' ( ( ruleValidID ) ) )* )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) ) )
            // InternalXcore.g:1813:3: () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( ( (lv_containment_2_0= 'contains' ) ) ( (lv_resolveProxies_3_0= 'resolving' ) )? ) | ( ( (lv_resolveProxies_4_0= 'resolving' ) ) ( (lv_containment_5_0= 'contains' ) ) ) | ( ( (lv_container_6_0= 'container' ) ) ( (lv_resolveProxies_7_0= 'resolving' ) )? ) | ( ( (lv_resolveProxies_8_0= 'resolving' ) ) ( (lv_container_9_0= 'container' ) ) ) | (otherlv_10= 'refers' ( (lv_local_11_0= 'local' ) )? ) | ( ( (lv_local_12_0= 'local' ) ) otherlv_13= 'refers' ) ) ( ( ( ( ({...}? => ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_18_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) ) ) )* ) ) ) ( (lv_type_22_0= ruleXGenericType ) ) ( (lv_multiplicity_23_0= ruleXMultiplicity ) )? ( (lv_name_24_0= RULE_ID ) ) (otherlv_25= 'opposite' ( ( ruleValidID ) ) )? (otherlv_27= 'keys' ( ( ruleValidID ) ) (otherlv_29= ',' ( ( ruleValidID ) ) )* )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) )
            {
            // InternalXcore.g:1813:3: ()
            // InternalXcore.g:1814:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXReferenceAccess().getXReferenceAction_0(),
              					current);
              			
            }

            }

            // InternalXcore.g:1820:3: ( (lv_annotations_1_0= ruleXAnnotation ) )*
            loop36:
            do {
                int alt36=2;
                int LA36_0 = input.LA(1);

                if ( (LA36_0==14) ) {
                    alt36=1;
                }


                switch (alt36) {
            	case 1 :
            	    // InternalXcore.g:1821:4: (lv_annotations_1_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:1821:4: (lv_annotations_1_0= ruleXAnnotation )
            	    // InternalXcore.g:1822:5: lv_annotations_1_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getXReferenceAccess().getAnnotationsXAnnotationParserRuleCall_1_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_41);
            	    lv_annotations_1_0=ruleXAnnotation();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getXReferenceRule());
            	      					}
            	      					add(
            	      						current,
            	      						"annotations",
            	      						lv_annotations_1_0,
            	      						"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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

            // InternalXcore.g:1839:3: ( ( ( (lv_containment_2_0= 'contains' ) ) ( (lv_resolveProxies_3_0= 'resolving' ) )? ) | ( ( (lv_resolveProxies_4_0= 'resolving' ) ) ( (lv_containment_5_0= 'contains' ) ) ) | ( ( (lv_container_6_0= 'container' ) ) ( (lv_resolveProxies_7_0= 'resolving' ) )? ) | ( ( (lv_resolveProxies_8_0= 'resolving' ) ) ( (lv_container_9_0= 'container' ) ) ) | (otherlv_10= 'refers' ( (lv_local_11_0= 'local' ) )? ) | ( ( (lv_local_12_0= 'local' ) ) otherlv_13= 'refers' ) )
            int alt40=6;
            switch ( input.LA(1) ) {
            case 48:
                {
                alt40=1;
                }
                break;
            case 49:
                {
                int LA40_2 = input.LA(2);

                if ( (LA40_2==48) ) {
                    alt40=2;
                }
                else if ( (LA40_2==50) ) {
                    alt40=4;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return current;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 40, 2, input);

                    throw nvae;
                }
                }
                break;
            case 50:
                {
                alt40=3;
                }
                break;
            case 51:
                {
                alt40=5;
                }
                break;
            case 52:
                {
                alt40=6;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 40, 0, input);

                throw nvae;
            }

            switch (alt40) {
                case 1 :
                    // InternalXcore.g:1840:4: ( ( (lv_containment_2_0= 'contains' ) ) ( (lv_resolveProxies_3_0= 'resolving' ) )? )
                    {
                    // InternalXcore.g:1840:4: ( ( (lv_containment_2_0= 'contains' ) ) ( (lv_resolveProxies_3_0= 'resolving' ) )? )
                    // InternalXcore.g:1841:5: ( (lv_containment_2_0= 'contains' ) ) ( (lv_resolveProxies_3_0= 'resolving' ) )?
                    {
                    // InternalXcore.g:1841:5: ( (lv_containment_2_0= 'contains' ) )
                    // InternalXcore.g:1842:6: (lv_containment_2_0= 'contains' )
                    {
                    // InternalXcore.g:1842:6: (lv_containment_2_0= 'contains' )
                    // InternalXcore.g:1843:7: lv_containment_2_0= 'contains'
                    {
                    lv_containment_2_0=(Token)match(input,48,FOLLOW_42); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_containment_2_0, grammarAccess.getXReferenceAccess().getContainmentContainsKeyword_2_0_0_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getXReferenceRule());
                      							}
                      							setWithLastConsumed(current, "containment", lv_containment_2_0 != null, "contains");
                      						
                    }

                    }


                    }

                    // InternalXcore.g:1855:5: ( (lv_resolveProxies_3_0= 'resolving' ) )?
                    int alt37=2;
                    int LA37_0 = input.LA(1);

                    if ( (LA37_0==49) ) {
                        alt37=1;
                    }
                    switch (alt37) {
                        case 1 :
                            // InternalXcore.g:1856:6: (lv_resolveProxies_3_0= 'resolving' )
                            {
                            // InternalXcore.g:1856:6: (lv_resolveProxies_3_0= 'resolving' )
                            // InternalXcore.g:1857:7: lv_resolveProxies_3_0= 'resolving'
                            {
                            lv_resolveProxies_3_0=(Token)match(input,49,FOLLOW_43); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_resolveProxies_3_0, grammarAccess.getXReferenceAccess().getResolveProxiesResolvingKeyword_2_0_1_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getXReferenceRule());
                              							}
                              							setWithLastConsumed(current, "resolveProxies", lv_resolveProxies_3_0 != null, "resolving");
                              						
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:1871:4: ( ( (lv_resolveProxies_4_0= 'resolving' ) ) ( (lv_containment_5_0= 'contains' ) ) )
                    {
                    // InternalXcore.g:1871:4: ( ( (lv_resolveProxies_4_0= 'resolving' ) ) ( (lv_containment_5_0= 'contains' ) ) )
                    // InternalXcore.g:1872:5: ( (lv_resolveProxies_4_0= 'resolving' ) ) ( (lv_containment_5_0= 'contains' ) )
                    {
                    // InternalXcore.g:1872:5: ( (lv_resolveProxies_4_0= 'resolving' ) )
                    // InternalXcore.g:1873:6: (lv_resolveProxies_4_0= 'resolving' )
                    {
                    // InternalXcore.g:1873:6: (lv_resolveProxies_4_0= 'resolving' )
                    // InternalXcore.g:1874:7: lv_resolveProxies_4_0= 'resolving'
                    {
                    lv_resolveProxies_4_0=(Token)match(input,49,FOLLOW_44); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_resolveProxies_4_0, grammarAccess.getXReferenceAccess().getResolveProxiesResolvingKeyword_2_1_0_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getXReferenceRule());
                      							}
                      							setWithLastConsumed(current, "resolveProxies", lv_resolveProxies_4_0 != null, "resolving");
                      						
                    }

                    }


                    }

                    // InternalXcore.g:1886:5: ( (lv_containment_5_0= 'contains' ) )
                    // InternalXcore.g:1887:6: (lv_containment_5_0= 'contains' )
                    {
                    // InternalXcore.g:1887:6: (lv_containment_5_0= 'contains' )
                    // InternalXcore.g:1888:7: lv_containment_5_0= 'contains'
                    {
                    lv_containment_5_0=(Token)match(input,48,FOLLOW_43); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_containment_5_0, grammarAccess.getXReferenceAccess().getContainmentContainsKeyword_2_1_1_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getXReferenceRule());
                      							}
                      							setWithLastConsumed(current, "containment", lv_containment_5_0 != null, "contains");
                      						
                    }

                    }


                    }


                    }


                    }
                    break;
                case 3 :
                    // InternalXcore.g:1902:4: ( ( (lv_container_6_0= 'container' ) ) ( (lv_resolveProxies_7_0= 'resolving' ) )? )
                    {
                    // InternalXcore.g:1902:4: ( ( (lv_container_6_0= 'container' ) ) ( (lv_resolveProxies_7_0= 'resolving' ) )? )
                    // InternalXcore.g:1903:5: ( (lv_container_6_0= 'container' ) ) ( (lv_resolveProxies_7_0= 'resolving' ) )?
                    {
                    // InternalXcore.g:1903:5: ( (lv_container_6_0= 'container' ) )
                    // InternalXcore.g:1904:6: (lv_container_6_0= 'container' )
                    {
                    // InternalXcore.g:1904:6: (lv_container_6_0= 'container' )
                    // InternalXcore.g:1905:7: lv_container_6_0= 'container'
                    {
                    lv_container_6_0=(Token)match(input,50,FOLLOW_42); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_container_6_0, grammarAccess.getXReferenceAccess().getContainerContainerKeyword_2_2_0_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getXReferenceRule());
                      							}
                      							setWithLastConsumed(current, "container", lv_container_6_0 != null, "container");
                      						
                    }

                    }


                    }

                    // InternalXcore.g:1917:5: ( (lv_resolveProxies_7_0= 'resolving' ) )?
                    int alt38=2;
                    int LA38_0 = input.LA(1);

                    if ( (LA38_0==49) ) {
                        alt38=1;
                    }
                    switch (alt38) {
                        case 1 :
                            // InternalXcore.g:1918:6: (lv_resolveProxies_7_0= 'resolving' )
                            {
                            // InternalXcore.g:1918:6: (lv_resolveProxies_7_0= 'resolving' )
                            // InternalXcore.g:1919:7: lv_resolveProxies_7_0= 'resolving'
                            {
                            lv_resolveProxies_7_0=(Token)match(input,49,FOLLOW_43); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_resolveProxies_7_0, grammarAccess.getXReferenceAccess().getResolveProxiesResolvingKeyword_2_2_1_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getXReferenceRule());
                              							}
                              							setWithLastConsumed(current, "resolveProxies", lv_resolveProxies_7_0 != null, "resolving");
                              						
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 4 :
                    // InternalXcore.g:1933:4: ( ( (lv_resolveProxies_8_0= 'resolving' ) ) ( (lv_container_9_0= 'container' ) ) )
                    {
                    // InternalXcore.g:1933:4: ( ( (lv_resolveProxies_8_0= 'resolving' ) ) ( (lv_container_9_0= 'container' ) ) )
                    // InternalXcore.g:1934:5: ( (lv_resolveProxies_8_0= 'resolving' ) ) ( (lv_container_9_0= 'container' ) )
                    {
                    // InternalXcore.g:1934:5: ( (lv_resolveProxies_8_0= 'resolving' ) )
                    // InternalXcore.g:1935:6: (lv_resolveProxies_8_0= 'resolving' )
                    {
                    // InternalXcore.g:1935:6: (lv_resolveProxies_8_0= 'resolving' )
                    // InternalXcore.g:1936:7: lv_resolveProxies_8_0= 'resolving'
                    {
                    lv_resolveProxies_8_0=(Token)match(input,49,FOLLOW_45); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_resolveProxies_8_0, grammarAccess.getXReferenceAccess().getResolveProxiesResolvingKeyword_2_3_0_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getXReferenceRule());
                      							}
                      							setWithLastConsumed(current, "resolveProxies", lv_resolveProxies_8_0 != null, "resolving");
                      						
                    }

                    }


                    }

                    // InternalXcore.g:1948:5: ( (lv_container_9_0= 'container' ) )
                    // InternalXcore.g:1949:6: (lv_container_9_0= 'container' )
                    {
                    // InternalXcore.g:1949:6: (lv_container_9_0= 'container' )
                    // InternalXcore.g:1950:7: lv_container_9_0= 'container'
                    {
                    lv_container_9_0=(Token)match(input,50,FOLLOW_43); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_container_9_0, grammarAccess.getXReferenceAccess().getContainerContainerKeyword_2_3_1_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getXReferenceRule());
                      							}
                      							setWithLastConsumed(current, "container", lv_container_9_0 != null, "container");
                      						
                    }

                    }


                    }


                    }


                    }
                    break;
                case 5 :
                    // InternalXcore.g:1964:4: (otherlv_10= 'refers' ( (lv_local_11_0= 'local' ) )? )
                    {
                    // InternalXcore.g:1964:4: (otherlv_10= 'refers' ( (lv_local_11_0= 'local' ) )? )
                    // InternalXcore.g:1965:5: otherlv_10= 'refers' ( (lv_local_11_0= 'local' ) )?
                    {
                    otherlv_10=(Token)match(input,51,FOLLOW_46); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_10, grammarAccess.getXReferenceAccess().getRefersKeyword_2_4_0());
                      				
                    }
                    // InternalXcore.g:1969:5: ( (lv_local_11_0= 'local' ) )?
                    int alt39=2;
                    int LA39_0 = input.LA(1);

                    if ( (LA39_0==52) ) {
                        alt39=1;
                    }
                    switch (alt39) {
                        case 1 :
                            // InternalXcore.g:1970:6: (lv_local_11_0= 'local' )
                            {
                            // InternalXcore.g:1970:6: (lv_local_11_0= 'local' )
                            // InternalXcore.g:1971:7: lv_local_11_0= 'local'
                            {
                            lv_local_11_0=(Token)match(input,52,FOLLOW_43); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_local_11_0, grammarAccess.getXReferenceAccess().getLocalLocalKeyword_2_4_1_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getXReferenceRule());
                              							}
                              							setWithLastConsumed(current, "local", lv_local_11_0 != null, "local");
                              						
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 6 :
                    // InternalXcore.g:1985:4: ( ( (lv_local_12_0= 'local' ) ) otherlv_13= 'refers' )
                    {
                    // InternalXcore.g:1985:4: ( ( (lv_local_12_0= 'local' ) ) otherlv_13= 'refers' )
                    // InternalXcore.g:1986:5: ( (lv_local_12_0= 'local' ) ) otherlv_13= 'refers'
                    {
                    // InternalXcore.g:1986:5: ( (lv_local_12_0= 'local' ) )
                    // InternalXcore.g:1987:6: (lv_local_12_0= 'local' )
                    {
                    // InternalXcore.g:1987:6: (lv_local_12_0= 'local' )
                    // InternalXcore.g:1988:7: lv_local_12_0= 'local'
                    {
                    lv_local_12_0=(Token)match(input,52,FOLLOW_47); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_local_12_0, grammarAccess.getXReferenceAccess().getLocalLocalKeyword_2_5_0_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getXReferenceRule());
                      							}
                      							setWithLastConsumed(current, "local", lv_local_12_0 != null, "local");
                      						
                    }

                    }


                    }

                    otherlv_13=(Token)match(input,51,FOLLOW_43); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_13, grammarAccess.getXReferenceAccess().getRefersKeyword_2_5_1());
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalXcore.g:2006:3: ( ( ( ( ({...}? => ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_18_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) ) ) )* ) ) )
            // InternalXcore.g:2007:4: ( ( ( ({...}? => ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_18_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) ) ) )* ) )
            {
            // InternalXcore.g:2007:4: ( ( ( ({...}? => ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_18_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) ) ) )* ) )
            // InternalXcore.g:2008:5: ( ( ({...}? => ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_18_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) ) ) )* )
            {
            getUnorderedGroupHelper().enter(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());
            // InternalXcore.g:2011:5: ( ( ({...}? => ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_18_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) ) ) )* )
            // InternalXcore.g:2012:6: ( ({...}? => ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_18_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) ) ) )*
            {
            // InternalXcore.g:2012:6: ( ({...}? => ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_18_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) ) ) )*
            loop41:
            do {
                int alt41=8;
                int LA41_0 = input.LA(1);

                if ( LA41_0 == 36 && getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 0) ) {
                    alt41=1;
                }
                else if ( LA41_0 == 37 && getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 1) ) {
                    alt41=2;
                }
                else if ( LA41_0 == 38 && getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 2) ) {
                    alt41=3;
                }
                else if ( LA41_0 == 39 && getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 3) ) {
                    alt41=4;
                }
                else if ( LA41_0 == 40 && getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 4) ) {
                    alt41=5;
                }
                else if ( LA41_0 == 41 && getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 5) ) {
                    alt41=6;
                }
                else if ( LA41_0 == 42 && getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 6) ) {
                    alt41=7;
                }


                switch (alt41) {
            	case 1 :
            	    // InternalXcore.g:2013:4: ({...}? => ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) ) )
            	    {
            	    // InternalXcore.g:2013:4: ({...}? => ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) ) )
            	    // InternalXcore.g:2014:5: {...}? => ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 0) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 0)");
            	    }
            	    // InternalXcore.g:2014:107: ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) )
            	    // InternalXcore.g:2015:6: ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 0);
            	    // InternalXcore.g:2018:9: ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) )
            	    // InternalXcore.g:2018:10: {...}? => ( (lv_unordered_15_0= 'unordered' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "true");
            	    }
            	    // InternalXcore.g:2018:19: ( (lv_unordered_15_0= 'unordered' ) )
            	    // InternalXcore.g:2018:20: (lv_unordered_15_0= 'unordered' )
            	    {
            	    // InternalXcore.g:2018:20: (lv_unordered_15_0= 'unordered' )
            	    // InternalXcore.g:2019:10: lv_unordered_15_0= 'unordered'
            	    {
            	    lv_unordered_15_0=(Token)match(input,36,FOLLOW_43); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										newLeafNode(lv_unordered_15_0, grammarAccess.getXReferenceAccess().getUnorderedUnorderedKeyword_3_0_0());
            	      									
            	    }
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElement(grammarAccess.getXReferenceRule());
            	      										}
            	      										setWithLastConsumed(current, "unordered", lv_unordered_15_0 != null, "unordered");
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalXcore.g:2036:4: ({...}? => ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) ) )
            	    {
            	    // InternalXcore.g:2036:4: ({...}? => ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) ) )
            	    // InternalXcore.g:2037:5: {...}? => ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 1) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 1)");
            	    }
            	    // InternalXcore.g:2037:107: ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) )
            	    // InternalXcore.g:2038:6: ({...}? => ( (lv_unique_16_0= 'unique' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 1);
            	    // InternalXcore.g:2041:9: ({...}? => ( (lv_unique_16_0= 'unique' ) ) )
            	    // InternalXcore.g:2041:10: {...}? => ( (lv_unique_16_0= 'unique' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "true");
            	    }
            	    // InternalXcore.g:2041:19: ( (lv_unique_16_0= 'unique' ) )
            	    // InternalXcore.g:2041:20: (lv_unique_16_0= 'unique' )
            	    {
            	    // InternalXcore.g:2041:20: (lv_unique_16_0= 'unique' )
            	    // InternalXcore.g:2042:10: lv_unique_16_0= 'unique'
            	    {
            	    lv_unique_16_0=(Token)match(input,37,FOLLOW_43); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										newLeafNode(lv_unique_16_0, grammarAccess.getXReferenceAccess().getUniqueUniqueKeyword_3_1_0());
            	      									
            	    }
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElement(grammarAccess.getXReferenceRule());
            	      										}
            	      										setWithLastConsumed(current, "unique", lv_unique_16_0 != null, "unique");
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalXcore.g:2059:4: ({...}? => ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) ) )
            	    {
            	    // InternalXcore.g:2059:4: ({...}? => ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) ) )
            	    // InternalXcore.g:2060:5: {...}? => ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 2) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 2)");
            	    }
            	    // InternalXcore.g:2060:107: ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) )
            	    // InternalXcore.g:2061:6: ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 2);
            	    // InternalXcore.g:2064:9: ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) )
            	    // InternalXcore.g:2064:10: {...}? => ( (lv_readonly_17_0= 'readonly' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "true");
            	    }
            	    // InternalXcore.g:2064:19: ( (lv_readonly_17_0= 'readonly' ) )
            	    // InternalXcore.g:2064:20: (lv_readonly_17_0= 'readonly' )
            	    {
            	    // InternalXcore.g:2064:20: (lv_readonly_17_0= 'readonly' )
            	    // InternalXcore.g:2065:10: lv_readonly_17_0= 'readonly'
            	    {
            	    lv_readonly_17_0=(Token)match(input,38,FOLLOW_43); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										newLeafNode(lv_readonly_17_0, grammarAccess.getXReferenceAccess().getReadonlyReadonlyKeyword_3_2_0());
            	      									
            	    }
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElement(grammarAccess.getXReferenceRule());
            	      										}
            	      										setWithLastConsumed(current, "readonly", lv_readonly_17_0 != null, "readonly");
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalXcore.g:2082:4: ({...}? => ( ({...}? => ( (lv_transient_18_0= 'transient' ) ) ) ) )
            	    {
            	    // InternalXcore.g:2082:4: ({...}? => ( ({...}? => ( (lv_transient_18_0= 'transient' ) ) ) ) )
            	    // InternalXcore.g:2083:5: {...}? => ( ({...}? => ( (lv_transient_18_0= 'transient' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 3) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 3)");
            	    }
            	    // InternalXcore.g:2083:107: ( ({...}? => ( (lv_transient_18_0= 'transient' ) ) ) )
            	    // InternalXcore.g:2084:6: ({...}? => ( (lv_transient_18_0= 'transient' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 3);
            	    // InternalXcore.g:2087:9: ({...}? => ( (lv_transient_18_0= 'transient' ) ) )
            	    // InternalXcore.g:2087:10: {...}? => ( (lv_transient_18_0= 'transient' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "true");
            	    }
            	    // InternalXcore.g:2087:19: ( (lv_transient_18_0= 'transient' ) )
            	    // InternalXcore.g:2087:20: (lv_transient_18_0= 'transient' )
            	    {
            	    // InternalXcore.g:2087:20: (lv_transient_18_0= 'transient' )
            	    // InternalXcore.g:2088:10: lv_transient_18_0= 'transient'
            	    {
            	    lv_transient_18_0=(Token)match(input,39,FOLLOW_43); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										newLeafNode(lv_transient_18_0, grammarAccess.getXReferenceAccess().getTransientTransientKeyword_3_3_0());
            	      									
            	    }
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElement(grammarAccess.getXReferenceRule());
            	      										}
            	      										setWithLastConsumed(current, "transient", lv_transient_18_0 != null, "transient");
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalXcore.g:2105:4: ({...}? => ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) ) )
            	    {
            	    // InternalXcore.g:2105:4: ({...}? => ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) ) )
            	    // InternalXcore.g:2106:5: {...}? => ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 4) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 4)");
            	    }
            	    // InternalXcore.g:2106:107: ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) )
            	    // InternalXcore.g:2107:6: ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 4);
            	    // InternalXcore.g:2110:9: ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) )
            	    // InternalXcore.g:2110:10: {...}? => ( (lv_volatile_19_0= 'volatile' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "true");
            	    }
            	    // InternalXcore.g:2110:19: ( (lv_volatile_19_0= 'volatile' ) )
            	    // InternalXcore.g:2110:20: (lv_volatile_19_0= 'volatile' )
            	    {
            	    // InternalXcore.g:2110:20: (lv_volatile_19_0= 'volatile' )
            	    // InternalXcore.g:2111:10: lv_volatile_19_0= 'volatile'
            	    {
            	    lv_volatile_19_0=(Token)match(input,40,FOLLOW_43); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										newLeafNode(lv_volatile_19_0, grammarAccess.getXReferenceAccess().getVolatileVolatileKeyword_3_4_0());
            	      									
            	    }
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElement(grammarAccess.getXReferenceRule());
            	      										}
            	      										setWithLastConsumed(current, "volatile", lv_volatile_19_0 != null, "volatile");
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());

            	    }


            	    }


            	    }
            	    break;
            	case 6 :
            	    // InternalXcore.g:2128:4: ({...}? => ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) ) )
            	    {
            	    // InternalXcore.g:2128:4: ({...}? => ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) ) )
            	    // InternalXcore.g:2129:5: {...}? => ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 5) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 5)");
            	    }
            	    // InternalXcore.g:2129:107: ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) )
            	    // InternalXcore.g:2130:6: ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 5);
            	    // InternalXcore.g:2133:9: ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) )
            	    // InternalXcore.g:2133:10: {...}? => ( (lv_unsettable_20_0= 'unsettable' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "true");
            	    }
            	    // InternalXcore.g:2133:19: ( (lv_unsettable_20_0= 'unsettable' ) )
            	    // InternalXcore.g:2133:20: (lv_unsettable_20_0= 'unsettable' )
            	    {
            	    // InternalXcore.g:2133:20: (lv_unsettable_20_0= 'unsettable' )
            	    // InternalXcore.g:2134:10: lv_unsettable_20_0= 'unsettable'
            	    {
            	    lv_unsettable_20_0=(Token)match(input,41,FOLLOW_43); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										newLeafNode(lv_unsettable_20_0, grammarAccess.getXReferenceAccess().getUnsettableUnsettableKeyword_3_5_0());
            	      									
            	    }
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElement(grammarAccess.getXReferenceRule());
            	      										}
            	      										setWithLastConsumed(current, "unsettable", lv_unsettable_20_0 != null, "unsettable");
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());

            	    }


            	    }


            	    }
            	    break;
            	case 7 :
            	    // InternalXcore.g:2151:4: ({...}? => ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) ) )
            	    {
            	    // InternalXcore.g:2151:4: ({...}? => ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) ) )
            	    // InternalXcore.g:2152:5: {...}? => ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 6) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 6)");
            	    }
            	    // InternalXcore.g:2152:107: ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) )
            	    // InternalXcore.g:2153:6: ({...}? => ( (lv_derived_21_0= 'derived' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 6);
            	    // InternalXcore.g:2156:9: ({...}? => ( (lv_derived_21_0= 'derived' ) ) )
            	    // InternalXcore.g:2156:10: {...}? => ( (lv_derived_21_0= 'derived' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "true");
            	    }
            	    // InternalXcore.g:2156:19: ( (lv_derived_21_0= 'derived' ) )
            	    // InternalXcore.g:2156:20: (lv_derived_21_0= 'derived' )
            	    {
            	    // InternalXcore.g:2156:20: (lv_derived_21_0= 'derived' )
            	    // InternalXcore.g:2157:10: lv_derived_21_0= 'derived'
            	    {
            	    lv_derived_21_0=(Token)match(input,42,FOLLOW_43); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      										newLeafNode(lv_derived_21_0, grammarAccess.getXReferenceAccess().getDerivedDerivedKeyword_3_6_0());
            	      									
            	    }
            	    if ( state.backtracking==0 ) {

            	      										if (current==null) {
            	      											current = createModelElement(grammarAccess.getXReferenceRule());
            	      										}
            	      										setWithLastConsumed(current, "derived", lv_derived_21_0 != null, "derived");
            	      									
            	    }

            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            getUnorderedGroupHelper().leave(grammarAccess.getXReferenceAccess().getUnorderedGroup_3());

            }

            // InternalXcore.g:2181:3: ( (lv_type_22_0= ruleXGenericType ) )
            // InternalXcore.g:2182:4: (lv_type_22_0= ruleXGenericType )
            {
            // InternalXcore.g:2182:4: (lv_type_22_0= ruleXGenericType )
            // InternalXcore.g:2183:5: lv_type_22_0= ruleXGenericType
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXReferenceAccess().getTypeXGenericTypeParserRuleCall_4_0());
              				
            }
            pushFollow(FOLLOW_38);
            lv_type_22_0=ruleXGenericType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXReferenceRule());
              					}
              					set(
              						current,
              						"type",
              						lv_type_22_0,
              						"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalXcore.g:2200:3: ( (lv_multiplicity_23_0= ruleXMultiplicity ) )?
            int alt42=2;
            int LA42_0 = input.LA(1);

            if ( (LA42_0==59) ) {
                alt42=1;
            }
            switch (alt42) {
                case 1 :
                    // InternalXcore.g:2201:4: (lv_multiplicity_23_0= ruleXMultiplicity )
                    {
                    // InternalXcore.g:2201:4: (lv_multiplicity_23_0= ruleXMultiplicity )
                    // InternalXcore.g:2202:5: lv_multiplicity_23_0= ruleXMultiplicity
                    {
                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getXReferenceAccess().getMultiplicityXMultiplicityParserRuleCall_5_0());
                      				
                    }
                    pushFollow(FOLLOW_15);
                    lv_multiplicity_23_0=ruleXMultiplicity();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElementForParent(grammarAccess.getXReferenceRule());
                      					}
                      					set(
                      						current,
                      						"multiplicity",
                      						lv_multiplicity_23_0,
                      						"org.eclipse.emf.ecore.xcore.Xcore.XMultiplicity");
                      					afterParserOrEnumRuleCall();
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalXcore.g:2219:3: ( (lv_name_24_0= RULE_ID ) )
            // InternalXcore.g:2220:4: (lv_name_24_0= RULE_ID )
            {
            // InternalXcore.g:2220:4: (lv_name_24_0= RULE_ID )
            // InternalXcore.g:2221:5: lv_name_24_0= RULE_ID
            {
            lv_name_24_0=(Token)match(input,RULE_ID,FOLLOW_48); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_24_0, grammarAccess.getXReferenceAccess().getNameIDTerminalRuleCall_6_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getXReferenceRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_24_0,
              						"org.eclipse.xtext.xbase.Xtype.ID");
              				
            }

            }


            }

            // InternalXcore.g:2237:3: (otherlv_25= 'opposite' ( ( ruleValidID ) ) )?
            int alt43=2;
            int LA43_0 = input.LA(1);

            if ( (LA43_0==53) ) {
                alt43=1;
            }
            switch (alt43) {
                case 1 :
                    // InternalXcore.g:2238:4: otherlv_25= 'opposite' ( ( ruleValidID ) )
                    {
                    otherlv_25=(Token)match(input,53,FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_25, grammarAccess.getXReferenceAccess().getOppositeKeyword_7_0());
                      			
                    }
                    // InternalXcore.g:2242:4: ( ( ruleValidID ) )
                    // InternalXcore.g:2243:5: ( ruleValidID )
                    {
                    // InternalXcore.g:2243:5: ( ruleValidID )
                    // InternalXcore.g:2244:6: ruleValidID
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getXReferenceRule());
                      						}
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXReferenceAccess().getOppositeGenFeatureCrossReference_7_1_0());
                      					
                    }
                    pushFollow(FOLLOW_49);
                    ruleValidID();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalXcore.g:2259:3: (otherlv_27= 'keys' ( ( ruleValidID ) ) (otherlv_29= ',' ( ( ruleValidID ) ) )* )?
            int alt45=2;
            int LA45_0 = input.LA(1);

            if ( (LA45_0==54) ) {
                alt45=1;
            }
            switch (alt45) {
                case 1 :
                    // InternalXcore.g:2260:4: otherlv_27= 'keys' ( ( ruleValidID ) ) (otherlv_29= ',' ( ( ruleValidID ) ) )*
                    {
                    otherlv_27=(Token)match(input,54,FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_27, grammarAccess.getXReferenceAccess().getKeysKeyword_8_0());
                      			
                    }
                    // InternalXcore.g:2264:4: ( ( ruleValidID ) )
                    // InternalXcore.g:2265:5: ( ruleValidID )
                    {
                    // InternalXcore.g:2265:5: ( ruleValidID )
                    // InternalXcore.g:2266:6: ruleValidID
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getXReferenceRule());
                      						}
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXReferenceAccess().getKeysGenFeatureCrossReference_8_1_0());
                      					
                    }
                    pushFollow(FOLLOW_50);
                    ruleValidID();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:2280:4: (otherlv_29= ',' ( ( ruleValidID ) ) )*
                    loop44:
                    do {
                        int alt44=2;
                        int LA44_0 = input.LA(1);

                        if ( (LA44_0==16) ) {
                            alt44=1;
                        }


                        switch (alt44) {
                    	case 1 :
                    	    // InternalXcore.g:2281:5: otherlv_29= ',' ( ( ruleValidID ) )
                    	    {
                    	    otherlv_29=(Token)match(input,16,FOLLOW_4); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_29, grammarAccess.getXReferenceAccess().getCommaKeyword_8_2_0());
                    	      				
                    	    }
                    	    // InternalXcore.g:2285:5: ( ( ruleValidID ) )
                    	    // InternalXcore.g:2286:6: ( ruleValidID )
                    	    {
                    	    // InternalXcore.g:2286:6: ( ruleValidID )
                    	    // InternalXcore.g:2287:7: ruleValidID
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElement(grammarAccess.getXReferenceRule());
                    	      							}
                    	      						
                    	    }
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXReferenceAccess().getKeysGenFeatureCrossReference_8_2_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_50);
                    	    ruleValidID();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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


                    }
                    break;

            }

            // InternalXcore.g:2303:3: ( ( ( ( ({...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) )
            // InternalXcore.g:2304:4: ( ( ( ({...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) ) ) )* ) )
            {
            // InternalXcore.g:2304:4: ( ( ( ({...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) ) ) )* ) )
            // InternalXcore.g:2305:5: ( ( ({...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) ) ) )* )
            {
            getUnorderedGroupHelper().enter(grammarAccess.getXReferenceAccess().getUnorderedGroup_9());
            // InternalXcore.g:2308:5: ( ( ({...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) ) ) )* )
            // InternalXcore.g:2309:6: ( ({...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) ) ) )*
            {
            // InternalXcore.g:2309:6: ( ({...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) ) ) )*
            loop46:
            do {
                int alt46=5;
                alt46 = dfa46.predict(input);
                switch (alt46) {
            	case 1 :
            	    // InternalXcore.g:2310:4: ({...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:2310:4: ({...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:2311:5: {...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 0) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 0)");
            	    }
            	    // InternalXcore.g:2311:107: ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:2312:6: ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 0);
            	    // InternalXcore.g:2315:9: ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:2315:10: {...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "true");
            	    }
            	    // InternalXcore.g:2315:19: (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:2315:20: otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_32=(Token)match(input,44,FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_32, grammarAccess.getXReferenceAccess().getGetKeyword_9_0_0());
            	      								
            	    }
            	    // InternalXcore.g:2319:9: ( (lv_getBody_33_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:2320:10: (lv_getBody_33_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:2320:10: (lv_getBody_33_0= ruleXBlockExpression )
            	    // InternalXcore.g:2321:11: lv_getBody_33_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      											newCompositeNode(grammarAccess.getXReferenceAccess().getGetBodyXBlockExpressionParserRuleCall_9_0_1_0());
            	      										
            	    }
            	    pushFollow(FOLLOW_40);
            	    lv_getBody_33_0=ruleXBlockExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElementForParent(grammarAccess.getXReferenceRule());
            	      											}
            	      											set(
            	      												current,
            	      												"getBody",
            	      												lv_getBody_33_0,
            	      												"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
            	      											afterParserOrEnumRuleCall();
            	      										
            	    }

            	    }


            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_9());

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalXcore.g:2344:4: ({...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:2344:4: ({...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:2345:5: {...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 1) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 1)");
            	    }
            	    // InternalXcore.g:2345:107: ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:2346:6: ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 1);
            	    // InternalXcore.g:2349:9: ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:2349:10: {...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "true");
            	    }
            	    // InternalXcore.g:2349:19: (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:2349:20: otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_34=(Token)match(input,45,FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_34, grammarAccess.getXReferenceAccess().getSetKeyword_9_1_0());
            	      								
            	    }
            	    // InternalXcore.g:2353:9: ( (lv_setBody_35_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:2354:10: (lv_setBody_35_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:2354:10: (lv_setBody_35_0= ruleXBlockExpression )
            	    // InternalXcore.g:2355:11: lv_setBody_35_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      											newCompositeNode(grammarAccess.getXReferenceAccess().getSetBodyXBlockExpressionParserRuleCall_9_1_1_0());
            	      										
            	    }
            	    pushFollow(FOLLOW_40);
            	    lv_setBody_35_0=ruleXBlockExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElementForParent(grammarAccess.getXReferenceRule());
            	      											}
            	      											set(
            	      												current,
            	      												"setBody",
            	      												lv_setBody_35_0,
            	      												"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
            	      											afterParserOrEnumRuleCall();
            	      										
            	    }

            	    }


            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_9());

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalXcore.g:2378:4: ({...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:2378:4: ({...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:2379:5: {...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 2) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 2)");
            	    }
            	    // InternalXcore.g:2379:107: ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:2380:6: ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 2);
            	    // InternalXcore.g:2383:9: ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:2383:10: {...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "true");
            	    }
            	    // InternalXcore.g:2383:19: (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:2383:20: otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_36=(Token)match(input,46,FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_36, grammarAccess.getXReferenceAccess().getIsSetKeyword_9_2_0());
            	      								
            	    }
            	    // InternalXcore.g:2387:9: ( (lv_isSetBody_37_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:2388:10: (lv_isSetBody_37_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:2388:10: (lv_isSetBody_37_0= ruleXBlockExpression )
            	    // InternalXcore.g:2389:11: lv_isSetBody_37_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      											newCompositeNode(grammarAccess.getXReferenceAccess().getIsSetBodyXBlockExpressionParserRuleCall_9_2_1_0());
            	      										
            	    }
            	    pushFollow(FOLLOW_40);
            	    lv_isSetBody_37_0=ruleXBlockExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElementForParent(grammarAccess.getXReferenceRule());
            	      											}
            	      											set(
            	      												current,
            	      												"isSetBody",
            	      												lv_isSetBody_37_0,
            	      												"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
            	      											afterParserOrEnumRuleCall();
            	      										
            	    }

            	    }


            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_9());

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalXcore.g:2412:4: ({...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:2412:4: ({...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:2413:5: {...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) )
            	    {
            	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 3) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 3)");
            	    }
            	    // InternalXcore.g:2413:107: ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:2414:6: ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 3);
            	    // InternalXcore.g:2417:9: ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:2417:10: {...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "true");
            	    }
            	    // InternalXcore.g:2417:19: (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:2417:20: otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_38=(Token)match(input,47,FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									newLeafNode(otherlv_38, grammarAccess.getXReferenceAccess().getUnsetKeyword_9_3_0());
            	      								
            	    }
            	    // InternalXcore.g:2421:9: ( (lv_unsetBody_39_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:2422:10: (lv_unsetBody_39_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:2422:10: (lv_unsetBody_39_0= ruleXBlockExpression )
            	    // InternalXcore.g:2423:11: lv_unsetBody_39_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      											newCompositeNode(grammarAccess.getXReferenceAccess().getUnsetBodyXBlockExpressionParserRuleCall_9_3_1_0());
            	      										
            	    }
            	    pushFollow(FOLLOW_40);
            	    lv_unsetBody_39_0=ruleXBlockExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      											if (current==null) {
            	      												current = createModelElementForParent(grammarAccess.getXReferenceRule());
            	      											}
            	      											set(
            	      												current,
            	      												"unsetBody",
            	      												lv_unsetBody_39_0,
            	      												"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
            	      											afterParserOrEnumRuleCall();
            	      										
            	    }

            	    }


            	    }


            	    }


            	    }

            	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getXReferenceAccess().getUnorderedGroup_9());

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            getUnorderedGroupHelper().leave(grammarAccess.getXReferenceAccess().getUnorderedGroup_9());

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXReference"


    // $ANTLR start "entryRuleXOperation"
    // InternalXcore.g:2457:1: entryRuleXOperation returns [EObject current=null] : iv_ruleXOperation= ruleXOperation EOF ;
    public final EObject entryRuleXOperation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXOperation = null;


        try {
            // InternalXcore.g:2457:51: (iv_ruleXOperation= ruleXOperation EOF )
            // InternalXcore.g:2458:2: iv_ruleXOperation= ruleXOperation EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXOperationRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXOperation=ruleXOperation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXOperation; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXOperation"


    // $ANTLR start "ruleXOperation"
    // InternalXcore.g:2464:1: ruleXOperation returns [EObject current=null] : ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* otherlv_2= 'op' ( ( ( (lv_unordered_3_0= 'unordered' ) ) ( (lv_unique_4_0= 'unique' ) )? ) | ( ( (lv_unique_5_0= 'unique' ) ) ( (lv_unordered_6_0= 'unordered' ) )? ) )? (otherlv_7= '<' ( (lv_typeParameters_8_0= ruleXTypeParameter ) ) (otherlv_9= ',' ( (lv_typeParameters_10_0= ruleXTypeParameter ) ) )* otherlv_11= '>' )? ( ( (lv_type_12_0= ruleXGenericType ) ) | otherlv_13= 'void' ) ( (lv_multiplicity_14_0= ruleXMultiplicity ) )? ( (lv_name_15_0= RULE_ID ) ) otherlv_16= '(' ( ( (lv_parameters_17_0= ruleXParameter ) ) (otherlv_18= ',' ( (lv_parameters_19_0= ruleXParameter ) ) )* )? otherlv_20= ')' (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleXGenericType ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleXGenericType ) ) )* )? ( (lv_body_25_0= ruleXBlockExpression ) )? ) ;
    public final EObject ruleXOperation() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        Token lv_unordered_3_0=null;
        Token lv_unique_4_0=null;
        Token lv_unique_5_0=null;
        Token lv_unordered_6_0=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        Token lv_name_15_0=null;
        Token otherlv_16=null;
        Token otherlv_18=null;
        Token otherlv_20=null;
        Token otherlv_21=null;
        Token otherlv_23=null;
        EObject lv_annotations_1_0 = null;

        EObject lv_typeParameters_8_0 = null;

        EObject lv_typeParameters_10_0 = null;

        EObject lv_type_12_0 = null;

        AntlrDatatypeRuleToken lv_multiplicity_14_0 = null;

        EObject lv_parameters_17_0 = null;

        EObject lv_parameters_19_0 = null;

        EObject lv_exceptions_22_0 = null;

        EObject lv_exceptions_24_0 = null;

        EObject lv_body_25_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:2470:2: ( ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* otherlv_2= 'op' ( ( ( (lv_unordered_3_0= 'unordered' ) ) ( (lv_unique_4_0= 'unique' ) )? ) | ( ( (lv_unique_5_0= 'unique' ) ) ( (lv_unordered_6_0= 'unordered' ) )? ) )? (otherlv_7= '<' ( (lv_typeParameters_8_0= ruleXTypeParameter ) ) (otherlv_9= ',' ( (lv_typeParameters_10_0= ruleXTypeParameter ) ) )* otherlv_11= '>' )? ( ( (lv_type_12_0= ruleXGenericType ) ) | otherlv_13= 'void' ) ( (lv_multiplicity_14_0= ruleXMultiplicity ) )? ( (lv_name_15_0= RULE_ID ) ) otherlv_16= '(' ( ( (lv_parameters_17_0= ruleXParameter ) ) (otherlv_18= ',' ( (lv_parameters_19_0= ruleXParameter ) ) )* )? otherlv_20= ')' (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleXGenericType ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleXGenericType ) ) )* )? ( (lv_body_25_0= ruleXBlockExpression ) )? ) )
            // InternalXcore.g:2471:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* otherlv_2= 'op' ( ( ( (lv_unordered_3_0= 'unordered' ) ) ( (lv_unique_4_0= 'unique' ) )? ) | ( ( (lv_unique_5_0= 'unique' ) ) ( (lv_unordered_6_0= 'unordered' ) )? ) )? (otherlv_7= '<' ( (lv_typeParameters_8_0= ruleXTypeParameter ) ) (otherlv_9= ',' ( (lv_typeParameters_10_0= ruleXTypeParameter ) ) )* otherlv_11= '>' )? ( ( (lv_type_12_0= ruleXGenericType ) ) | otherlv_13= 'void' ) ( (lv_multiplicity_14_0= ruleXMultiplicity ) )? ( (lv_name_15_0= RULE_ID ) ) otherlv_16= '(' ( ( (lv_parameters_17_0= ruleXParameter ) ) (otherlv_18= ',' ( (lv_parameters_19_0= ruleXParameter ) ) )* )? otherlv_20= ')' (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleXGenericType ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleXGenericType ) ) )* )? ( (lv_body_25_0= ruleXBlockExpression ) )? )
            {
            // InternalXcore.g:2471:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* otherlv_2= 'op' ( ( ( (lv_unordered_3_0= 'unordered' ) ) ( (lv_unique_4_0= 'unique' ) )? ) | ( ( (lv_unique_5_0= 'unique' ) ) ( (lv_unordered_6_0= 'unordered' ) )? ) )? (otherlv_7= '<' ( (lv_typeParameters_8_0= ruleXTypeParameter ) ) (otherlv_9= ',' ( (lv_typeParameters_10_0= ruleXTypeParameter ) ) )* otherlv_11= '>' )? ( ( (lv_type_12_0= ruleXGenericType ) ) | otherlv_13= 'void' ) ( (lv_multiplicity_14_0= ruleXMultiplicity ) )? ( (lv_name_15_0= RULE_ID ) ) otherlv_16= '(' ( ( (lv_parameters_17_0= ruleXParameter ) ) (otherlv_18= ',' ( (lv_parameters_19_0= ruleXParameter ) ) )* )? otherlv_20= ')' (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleXGenericType ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleXGenericType ) ) )* )? ( (lv_body_25_0= ruleXBlockExpression ) )? )
            // InternalXcore.g:2472:3: () ( (lv_annotations_1_0= ruleXAnnotation ) )* otherlv_2= 'op' ( ( ( (lv_unordered_3_0= 'unordered' ) ) ( (lv_unique_4_0= 'unique' ) )? ) | ( ( (lv_unique_5_0= 'unique' ) ) ( (lv_unordered_6_0= 'unordered' ) )? ) )? (otherlv_7= '<' ( (lv_typeParameters_8_0= ruleXTypeParameter ) ) (otherlv_9= ',' ( (lv_typeParameters_10_0= ruleXTypeParameter ) ) )* otherlv_11= '>' )? ( ( (lv_type_12_0= ruleXGenericType ) ) | otherlv_13= 'void' ) ( (lv_multiplicity_14_0= ruleXMultiplicity ) )? ( (lv_name_15_0= RULE_ID ) ) otherlv_16= '(' ( ( (lv_parameters_17_0= ruleXParameter ) ) (otherlv_18= ',' ( (lv_parameters_19_0= ruleXParameter ) ) )* )? otherlv_20= ')' (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleXGenericType ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleXGenericType ) ) )* )? ( (lv_body_25_0= ruleXBlockExpression ) )?
            {
            // InternalXcore.g:2472:3: ()
            // InternalXcore.g:2473:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXOperationAccess().getXOperationAction_0(),
              					current);
              			
            }

            }

            // InternalXcore.g:2479:3: ( (lv_annotations_1_0= ruleXAnnotation ) )*
            loop47:
            do {
                int alt47=2;
                int LA47_0 = input.LA(1);

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


                switch (alt47) {
            	case 1 :
            	    // InternalXcore.g:2480:4: (lv_annotations_1_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:2480:4: (lv_annotations_1_0= ruleXAnnotation )
            	    // InternalXcore.g:2481:5: lv_annotations_1_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getXOperationAccess().getAnnotationsXAnnotationParserRuleCall_1_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_51);
            	    lv_annotations_1_0=ruleXAnnotation();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getXOperationRule());
            	      					}
            	      					add(
            	      						current,
            	      						"annotations",
            	      						lv_annotations_1_0,
            	      						"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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

            otherlv_2=(Token)match(input,55,FOLLOW_52); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getXOperationAccess().getOpKeyword_2());
              		
            }
            // InternalXcore.g:2502:3: ( ( ( (lv_unordered_3_0= 'unordered' ) ) ( (lv_unique_4_0= 'unique' ) )? ) | ( ( (lv_unique_5_0= 'unique' ) ) ( (lv_unordered_6_0= 'unordered' ) )? ) )?
            int alt50=3;
            int LA50_0 = input.LA(1);

            if ( (LA50_0==36) ) {
                alt50=1;
            }
            else if ( (LA50_0==37) ) {
                alt50=2;
            }
            switch (alt50) {
                case 1 :
                    // InternalXcore.g:2503:4: ( ( (lv_unordered_3_0= 'unordered' ) ) ( (lv_unique_4_0= 'unique' ) )? )
                    {
                    // InternalXcore.g:2503:4: ( ( (lv_unordered_3_0= 'unordered' ) ) ( (lv_unique_4_0= 'unique' ) )? )
                    // InternalXcore.g:2504:5: ( (lv_unordered_3_0= 'unordered' ) ) ( (lv_unique_4_0= 'unique' ) )?
                    {
                    // InternalXcore.g:2504:5: ( (lv_unordered_3_0= 'unordered' ) )
                    // InternalXcore.g:2505:6: (lv_unordered_3_0= 'unordered' )
                    {
                    // InternalXcore.g:2505:6: (lv_unordered_3_0= 'unordered' )
                    // InternalXcore.g:2506:7: lv_unordered_3_0= 'unordered'
                    {
                    lv_unordered_3_0=(Token)match(input,36,FOLLOW_53); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_unordered_3_0, grammarAccess.getXOperationAccess().getUnorderedUnorderedKeyword_3_0_0_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getXOperationRule());
                      							}
                      							setWithLastConsumed(current, "unordered", lv_unordered_3_0 != null, "unordered");
                      						
                    }

                    }


                    }

                    // InternalXcore.g:2518:5: ( (lv_unique_4_0= 'unique' ) )?
                    int alt48=2;
                    int LA48_0 = input.LA(1);

                    if ( (LA48_0==37) ) {
                        alt48=1;
                    }
                    switch (alt48) {
                        case 1 :
                            // InternalXcore.g:2519:6: (lv_unique_4_0= 'unique' )
                            {
                            // InternalXcore.g:2519:6: (lv_unique_4_0= 'unique' )
                            // InternalXcore.g:2520:7: lv_unique_4_0= 'unique'
                            {
                            lv_unique_4_0=(Token)match(input,37,FOLLOW_54); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_unique_4_0, grammarAccess.getXOperationAccess().getUniqueUniqueKeyword_3_0_1_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getXOperationRule());
                              							}
                              							setWithLastConsumed(current, "unique", lv_unique_4_0 != null, "unique");
                              						
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:2534:4: ( ( (lv_unique_5_0= 'unique' ) ) ( (lv_unordered_6_0= 'unordered' ) )? )
                    {
                    // InternalXcore.g:2534:4: ( ( (lv_unique_5_0= 'unique' ) ) ( (lv_unordered_6_0= 'unordered' ) )? )
                    // InternalXcore.g:2535:5: ( (lv_unique_5_0= 'unique' ) ) ( (lv_unordered_6_0= 'unordered' ) )?
                    {
                    // InternalXcore.g:2535:5: ( (lv_unique_5_0= 'unique' ) )
                    // InternalXcore.g:2536:6: (lv_unique_5_0= 'unique' )
                    {
                    // InternalXcore.g:2536:6: (lv_unique_5_0= 'unique' )
                    // InternalXcore.g:2537:7: lv_unique_5_0= 'unique'
                    {
                    lv_unique_5_0=(Token)match(input,37,FOLLOW_55); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_unique_5_0, grammarAccess.getXOperationAccess().getUniqueUniqueKeyword_3_1_0_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getXOperationRule());
                      							}
                      							setWithLastConsumed(current, "unique", lv_unique_5_0 != null, "unique");
                      						
                    }

                    }


                    }

                    // InternalXcore.g:2549:5: ( (lv_unordered_6_0= 'unordered' ) )?
                    int alt49=2;
                    int LA49_0 = input.LA(1);

                    if ( (LA49_0==36) ) {
                        alt49=1;
                    }
                    switch (alt49) {
                        case 1 :
                            // InternalXcore.g:2550:6: (lv_unordered_6_0= 'unordered' )
                            {
                            // InternalXcore.g:2550:6: (lv_unordered_6_0= 'unordered' )
                            // InternalXcore.g:2551:7: lv_unordered_6_0= 'unordered'
                            {
                            lv_unordered_6_0=(Token)match(input,36,FOLLOW_54); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_unordered_6_0, grammarAccess.getXOperationAccess().getUnorderedUnorderedKeyword_3_1_1_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getXOperationRule());
                              							}
                              							setWithLastConsumed(current, "unordered", lv_unordered_6_0 != null, "unordered");
                              						
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;

            }

            // InternalXcore.g:2565:3: (otherlv_7= '<' ( (lv_typeParameters_8_0= ruleXTypeParameter ) ) (otherlv_9= ',' ( (lv_typeParameters_10_0= ruleXTypeParameter ) ) )* otherlv_11= '>' )?
            int alt52=2;
            int LA52_0 = input.LA(1);

            if ( (LA52_0==23) ) {
                alt52=1;
            }
            switch (alt52) {
                case 1 :
                    // InternalXcore.g:2566:4: otherlv_7= '<' ( (lv_typeParameters_8_0= ruleXTypeParameter ) ) (otherlv_9= ',' ( (lv_typeParameters_10_0= ruleXTypeParameter ) ) )* otherlv_11= '>'
                    {
                    otherlv_7=(Token)match(input,23,FOLLOW_17); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_7, grammarAccess.getXOperationAccess().getLessThanSignKeyword_4_0());
                      			
                    }
                    // InternalXcore.g:2570:4: ( (lv_typeParameters_8_0= ruleXTypeParameter ) )
                    // InternalXcore.g:2571:5: (lv_typeParameters_8_0= ruleXTypeParameter )
                    {
                    // InternalXcore.g:2571:5: (lv_typeParameters_8_0= ruleXTypeParameter )
                    // InternalXcore.g:2572:6: lv_typeParameters_8_0= ruleXTypeParameter
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXOperationAccess().getTypeParametersXTypeParameterParserRuleCall_4_1_0());
                      					
                    }
                    pushFollow(FOLLOW_18);
                    lv_typeParameters_8_0=ruleXTypeParameter();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXOperationRule());
                      						}
                      						add(
                      							current,
                      							"typeParameters",
                      							lv_typeParameters_8_0,
                      							"org.eclipse.emf.ecore.xcore.Xcore.XTypeParameter");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:2589:4: (otherlv_9= ',' ( (lv_typeParameters_10_0= ruleXTypeParameter ) ) )*
                    loop51:
                    do {
                        int alt51=2;
                        int LA51_0 = input.LA(1);

                        if ( (LA51_0==16) ) {
                            alt51=1;
                        }


                        switch (alt51) {
                    	case 1 :
                    	    // InternalXcore.g:2590:5: otherlv_9= ',' ( (lv_typeParameters_10_0= ruleXTypeParameter ) )
                    	    {
                    	    otherlv_9=(Token)match(input,16,FOLLOW_17); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_9, grammarAccess.getXOperationAccess().getCommaKeyword_4_2_0());
                    	      				
                    	    }
                    	    // InternalXcore.g:2594:5: ( (lv_typeParameters_10_0= ruleXTypeParameter ) )
                    	    // InternalXcore.g:2595:6: (lv_typeParameters_10_0= ruleXTypeParameter )
                    	    {
                    	    // InternalXcore.g:2595:6: (lv_typeParameters_10_0= ruleXTypeParameter )
                    	    // InternalXcore.g:2596:7: lv_typeParameters_10_0= ruleXTypeParameter
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXOperationAccess().getTypeParametersXTypeParameterParserRuleCall_4_2_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_18);
                    	    lv_typeParameters_10_0=ruleXTypeParameter();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getXOperationRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"typeParameters",
                    	      								lv_typeParameters_10_0,
                    	      								"org.eclipse.emf.ecore.xcore.Xcore.XTypeParameter");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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

                    otherlv_11=(Token)match(input,24,FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_11, grammarAccess.getXOperationAccess().getGreaterThanSignKeyword_4_3());
                      			
                    }

                    }
                    break;

            }

            // InternalXcore.g:2619:3: ( ( (lv_type_12_0= ruleXGenericType ) ) | otherlv_13= 'void' )
            int alt53=2;
            int LA53_0 = input.LA(1);

            if ( (LA53_0==RULE_ID||(LA53_0>=44 && LA53_0<=47)) ) {
                alt53=1;
            }
            else if ( (LA53_0==56) ) {
                alt53=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 53, 0, input);

                throw nvae;
            }
            switch (alt53) {
                case 1 :
                    // InternalXcore.g:2620:4: ( (lv_type_12_0= ruleXGenericType ) )
                    {
                    // InternalXcore.g:2620:4: ( (lv_type_12_0= ruleXGenericType ) )
                    // InternalXcore.g:2621:5: (lv_type_12_0= ruleXGenericType )
                    {
                    // InternalXcore.g:2621:5: (lv_type_12_0= ruleXGenericType )
                    // InternalXcore.g:2622:6: lv_type_12_0= ruleXGenericType
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXOperationAccess().getTypeXGenericTypeParserRuleCall_5_0_0());
                      					
                    }
                    pushFollow(FOLLOW_38);
                    lv_type_12_0=ruleXGenericType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXOperationRule());
                      						}
                      						set(
                      							current,
                      							"type",
                      							lv_type_12_0,
                      							"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:2640:4: otherlv_13= 'void'
                    {
                    otherlv_13=(Token)match(input,56,FOLLOW_38); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_13, grammarAccess.getXOperationAccess().getVoidKeyword_5_1());
                      			
                    }

                    }
                    break;

            }

            // InternalXcore.g:2645:3: ( (lv_multiplicity_14_0= ruleXMultiplicity ) )?
            int alt54=2;
            int LA54_0 = input.LA(1);

            if ( (LA54_0==59) ) {
                alt54=1;
            }
            switch (alt54) {
                case 1 :
                    // InternalXcore.g:2646:4: (lv_multiplicity_14_0= ruleXMultiplicity )
                    {
                    // InternalXcore.g:2646:4: (lv_multiplicity_14_0= ruleXMultiplicity )
                    // InternalXcore.g:2647:5: lv_multiplicity_14_0= ruleXMultiplicity
                    {
                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getXOperationAccess().getMultiplicityXMultiplicityParserRuleCall_6_0());
                      				
                    }
                    pushFollow(FOLLOW_15);
                    lv_multiplicity_14_0=ruleXMultiplicity();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElementForParent(grammarAccess.getXOperationRule());
                      					}
                      					set(
                      						current,
                      						"multiplicity",
                      						lv_multiplicity_14_0,
                      						"org.eclipse.emf.ecore.xcore.Xcore.XMultiplicity");
                      					afterParserOrEnumRuleCall();
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalXcore.g:2664:3: ( (lv_name_15_0= RULE_ID ) )
            // InternalXcore.g:2665:4: (lv_name_15_0= RULE_ID )
            {
            // InternalXcore.g:2665:4: (lv_name_15_0= RULE_ID )
            // InternalXcore.g:2666:5: lv_name_15_0= RULE_ID
            {
            lv_name_15_0=(Token)match(input,RULE_ID,FOLLOW_56); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_15_0, grammarAccess.getXOperationAccess().getNameIDTerminalRuleCall_7_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getXOperationRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_15_0,
              						"org.eclipse.xtext.xbase.Xtype.ID");
              				
            }

            }


            }

            otherlv_16=(Token)match(input,15,FOLLOW_57); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_16, grammarAccess.getXOperationAccess().getLeftParenthesisKeyword_8());
              		
            }
            // InternalXcore.g:2686:3: ( ( (lv_parameters_17_0= ruleXParameter ) ) (otherlv_18= ',' ( (lv_parameters_19_0= ruleXParameter ) ) )* )?
            int alt56=2;
            int LA56_0 = input.LA(1);

            if ( (LA56_0==RULE_ID||LA56_0==14||(LA56_0>=36 && LA56_0<=37)||(LA56_0>=44 && LA56_0<=47)) ) {
                alt56=1;
            }
            switch (alt56) {
                case 1 :
                    // InternalXcore.g:2687:4: ( (lv_parameters_17_0= ruleXParameter ) ) (otherlv_18= ',' ( (lv_parameters_19_0= ruleXParameter ) ) )*
                    {
                    // InternalXcore.g:2687:4: ( (lv_parameters_17_0= ruleXParameter ) )
                    // InternalXcore.g:2688:5: (lv_parameters_17_0= ruleXParameter )
                    {
                    // InternalXcore.g:2688:5: (lv_parameters_17_0= ruleXParameter )
                    // InternalXcore.g:2689:6: lv_parameters_17_0= ruleXParameter
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXOperationAccess().getParametersXParameterParserRuleCall_9_0_0());
                      					
                    }
                    pushFollow(FOLLOW_10);
                    lv_parameters_17_0=ruleXParameter();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXOperationRule());
                      						}
                      						add(
                      							current,
                      							"parameters",
                      							lv_parameters_17_0,
                      							"org.eclipse.emf.ecore.xcore.Xcore.XParameter");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:2706:4: (otherlv_18= ',' ( (lv_parameters_19_0= ruleXParameter ) ) )*
                    loop55:
                    do {
                        int alt55=2;
                        int LA55_0 = input.LA(1);

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


                        switch (alt55) {
                    	case 1 :
                    	    // InternalXcore.g:2707:5: otherlv_18= ',' ( (lv_parameters_19_0= ruleXParameter ) )
                    	    {
                    	    otherlv_18=(Token)match(input,16,FOLLOW_58); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_18, grammarAccess.getXOperationAccess().getCommaKeyword_9_1_0());
                    	      				
                    	    }
                    	    // InternalXcore.g:2711:5: ( (lv_parameters_19_0= ruleXParameter ) )
                    	    // InternalXcore.g:2712:6: (lv_parameters_19_0= ruleXParameter )
                    	    {
                    	    // InternalXcore.g:2712:6: (lv_parameters_19_0= ruleXParameter )
                    	    // InternalXcore.g:2713:7: lv_parameters_19_0= ruleXParameter
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXOperationAccess().getParametersXParameterParserRuleCall_9_1_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_10);
                    	    lv_parameters_19_0=ruleXParameter();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getXOperationRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"parameters",
                    	      								lv_parameters_19_0,
                    	      								"org.eclipse.emf.ecore.xcore.Xcore.XParameter");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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


                    }
                    break;

            }

            otherlv_20=(Token)match(input,17,FOLLOW_59); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_20, grammarAccess.getXOperationAccess().getRightParenthesisKeyword_10());
              		
            }
            // InternalXcore.g:2736:3: (otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleXGenericType ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleXGenericType ) ) )* )?
            int alt58=2;
            int LA58_0 = input.LA(1);

            if ( (LA58_0==57) ) {
                alt58=1;
            }
            switch (alt58) {
                case 1 :
                    // InternalXcore.g:2737:4: otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleXGenericType ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleXGenericType ) ) )*
                    {
                    otherlv_21=(Token)match(input,57,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_21, grammarAccess.getXOperationAccess().getThrowsKeyword_11_0());
                      			
                    }
                    // InternalXcore.g:2741:4: ( (lv_exceptions_22_0= ruleXGenericType ) )
                    // InternalXcore.g:2742:5: (lv_exceptions_22_0= ruleXGenericType )
                    {
                    // InternalXcore.g:2742:5: (lv_exceptions_22_0= ruleXGenericType )
                    // InternalXcore.g:2743:6: lv_exceptions_22_0= ruleXGenericType
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXOperationAccess().getExceptionsXGenericTypeParserRuleCall_11_1_0());
                      					
                    }
                    pushFollow(FOLLOW_60);
                    lv_exceptions_22_0=ruleXGenericType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXOperationRule());
                      						}
                      						add(
                      							current,
                      							"exceptions",
                      							lv_exceptions_22_0,
                      							"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:2760:4: (otherlv_23= ',' ( (lv_exceptions_24_0= ruleXGenericType ) ) )*
                    loop57:
                    do {
                        int alt57=2;
                        int LA57_0 = input.LA(1);

                        if ( (LA57_0==16) ) {
                            alt57=1;
                        }


                        switch (alt57) {
                    	case 1 :
                    	    // InternalXcore.g:2761:5: otherlv_23= ',' ( (lv_exceptions_24_0= ruleXGenericType ) )
                    	    {
                    	    otherlv_23=(Token)match(input,16,FOLLOW_8); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_23, grammarAccess.getXOperationAccess().getCommaKeyword_11_2_0());
                    	      				
                    	    }
                    	    // InternalXcore.g:2765:5: ( (lv_exceptions_24_0= ruleXGenericType ) )
                    	    // InternalXcore.g:2766:6: (lv_exceptions_24_0= ruleXGenericType )
                    	    {
                    	    // InternalXcore.g:2766:6: (lv_exceptions_24_0= ruleXGenericType )
                    	    // InternalXcore.g:2767:7: lv_exceptions_24_0= ruleXGenericType
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXOperationAccess().getExceptionsXGenericTypeParserRuleCall_11_2_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_60);
                    	    lv_exceptions_24_0=ruleXGenericType();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getXOperationRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"exceptions",
                    	      								lv_exceptions_24_0,
                    	      								"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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


                    }
                    break;

            }

            // InternalXcore.g:2786:3: ( (lv_body_25_0= ruleXBlockExpression ) )?
            int alt59=2;
            int LA59_0 = input.LA(1);

            if ( (LA59_0==29) ) {
                alt59=1;
            }
            switch (alt59) {
                case 1 :
                    // InternalXcore.g:2787:4: (lv_body_25_0= ruleXBlockExpression )
                    {
                    // InternalXcore.g:2787:4: (lv_body_25_0= ruleXBlockExpression )
                    // InternalXcore.g:2788:5: lv_body_25_0= ruleXBlockExpression
                    {
                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getXOperationAccess().getBodyXBlockExpressionParserRuleCall_12_0());
                      				
                    }
                    pushFollow(FOLLOW_2);
                    lv_body_25_0=ruleXBlockExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElementForParent(grammarAccess.getXOperationRule());
                      					}
                      					set(
                      						current,
                      						"body",
                      						lv_body_25_0,
                      						"org.eclipse.emf.ecore.xcore.Xcore.XBlockExpression");
                      					afterParserOrEnumRuleCall();
                      				
                    }

                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXOperation"


    // $ANTLR start "entryRuleXParameter"
    // InternalXcore.g:2809:1: entryRuleXParameter returns [EObject current=null] : iv_ruleXParameter= ruleXParameter EOF ;
    public final EObject entryRuleXParameter() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXParameter = null;


        try {
            // InternalXcore.g:2809:51: (iv_ruleXParameter= ruleXParameter EOF )
            // InternalXcore.g:2810:2: iv_ruleXParameter= ruleXParameter EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXParameterRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXParameter=ruleXParameter();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXParameter; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXParameter"


    // $ANTLR start "ruleXParameter"
    // InternalXcore.g:2816:1: ruleXParameter returns [EObject current=null] : ( ( (lv_annotations_0_0= ruleXAnnotation ) )* ( ( ( (lv_unordered_1_0= 'unordered' ) ) ( (lv_unique_2_0= 'unique' ) )? ) | ( ( (lv_unique_3_0= 'unique' ) ) ( (lv_unordered_4_0= 'unordered' ) )? ) )? ( (lv_type_5_0= ruleXGenericType ) ) ( (lv_multiplicity_6_0= ruleXMultiplicity ) )? ( (lv_name_7_0= RULE_ID ) ) ) ;
    public final EObject ruleXParameter() throws RecognitionException {
        EObject current = null;

        Token lv_unordered_1_0=null;
        Token lv_unique_2_0=null;
        Token lv_unique_3_0=null;
        Token lv_unordered_4_0=null;
        Token lv_name_7_0=null;
        EObject lv_annotations_0_0 = null;

        EObject lv_type_5_0 = null;

        AntlrDatatypeRuleToken lv_multiplicity_6_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:2822:2: ( ( ( (lv_annotations_0_0= ruleXAnnotation ) )* ( ( ( (lv_unordered_1_0= 'unordered' ) ) ( (lv_unique_2_0= 'unique' ) )? ) | ( ( (lv_unique_3_0= 'unique' ) ) ( (lv_unordered_4_0= 'unordered' ) )? ) )? ( (lv_type_5_0= ruleXGenericType ) ) ( (lv_multiplicity_6_0= ruleXMultiplicity ) )? ( (lv_name_7_0= RULE_ID ) ) ) )
            // InternalXcore.g:2823:2: ( ( (lv_annotations_0_0= ruleXAnnotation ) )* ( ( ( (lv_unordered_1_0= 'unordered' ) ) ( (lv_unique_2_0= 'unique' ) )? ) | ( ( (lv_unique_3_0= 'unique' ) ) ( (lv_unordered_4_0= 'unordered' ) )? ) )? ( (lv_type_5_0= ruleXGenericType ) ) ( (lv_multiplicity_6_0= ruleXMultiplicity ) )? ( (lv_name_7_0= RULE_ID ) ) )
            {
            // InternalXcore.g:2823:2: ( ( (lv_annotations_0_0= ruleXAnnotation ) )* ( ( ( (lv_unordered_1_0= 'unordered' ) ) ( (lv_unique_2_0= 'unique' ) )? ) | ( ( (lv_unique_3_0= 'unique' ) ) ( (lv_unordered_4_0= 'unordered' ) )? ) )? ( (lv_type_5_0= ruleXGenericType ) ) ( (lv_multiplicity_6_0= ruleXMultiplicity ) )? ( (lv_name_7_0= RULE_ID ) ) )
            // InternalXcore.g:2824:3: ( (lv_annotations_0_0= ruleXAnnotation ) )* ( ( ( (lv_unordered_1_0= 'unordered' ) ) ( (lv_unique_2_0= 'unique' ) )? ) | ( ( (lv_unique_3_0= 'unique' ) ) ( (lv_unordered_4_0= 'unordered' ) )? ) )? ( (lv_type_5_0= ruleXGenericType ) ) ( (lv_multiplicity_6_0= ruleXMultiplicity ) )? ( (lv_name_7_0= RULE_ID ) )
            {
            // InternalXcore.g:2824:3: ( (lv_annotations_0_0= ruleXAnnotation ) )*
            loop60:
            do {
                int alt60=2;
                int LA60_0 = input.LA(1);

                if ( (LA60_0==14) ) {
                    alt60=1;
                }


                switch (alt60) {
            	case 1 :
            	    // InternalXcore.g:2825:4: (lv_annotations_0_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:2825:4: (lv_annotations_0_0= ruleXAnnotation )
            	    // InternalXcore.g:2826:5: lv_annotations_0_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getXParameterAccess().getAnnotationsXAnnotationParserRuleCall_0_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_58);
            	    lv_annotations_0_0=ruleXAnnotation();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getXParameterRule());
            	      					}
            	      					add(
            	      						current,
            	      						"annotations",
            	      						lv_annotations_0_0,
            	      						"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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

            // InternalXcore.g:2843:3: ( ( ( (lv_unordered_1_0= 'unordered' ) ) ( (lv_unique_2_0= 'unique' ) )? ) | ( ( (lv_unique_3_0= 'unique' ) ) ( (lv_unordered_4_0= 'unordered' ) )? ) )?
            int alt63=3;
            int LA63_0 = input.LA(1);

            if ( (LA63_0==36) ) {
                alt63=1;
            }
            else if ( (LA63_0==37) ) {
                alt63=2;
            }
            switch (alt63) {
                case 1 :
                    // InternalXcore.g:2844:4: ( ( (lv_unordered_1_0= 'unordered' ) ) ( (lv_unique_2_0= 'unique' ) )? )
                    {
                    // InternalXcore.g:2844:4: ( ( (lv_unordered_1_0= 'unordered' ) ) ( (lv_unique_2_0= 'unique' ) )? )
                    // InternalXcore.g:2845:5: ( (lv_unordered_1_0= 'unordered' ) ) ( (lv_unique_2_0= 'unique' ) )?
                    {
                    // InternalXcore.g:2845:5: ( (lv_unordered_1_0= 'unordered' ) )
                    // InternalXcore.g:2846:6: (lv_unordered_1_0= 'unordered' )
                    {
                    // InternalXcore.g:2846:6: (lv_unordered_1_0= 'unordered' )
                    // InternalXcore.g:2847:7: lv_unordered_1_0= 'unordered'
                    {
                    lv_unordered_1_0=(Token)match(input,36,FOLLOW_61); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_unordered_1_0, grammarAccess.getXParameterAccess().getUnorderedUnorderedKeyword_1_0_0_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getXParameterRule());
                      							}
                      							setWithLastConsumed(current, "unordered", lv_unordered_1_0 != null, "unordered");
                      						
                    }

                    }


                    }

                    // InternalXcore.g:2859:5: ( (lv_unique_2_0= 'unique' ) )?
                    int alt61=2;
                    int LA61_0 = input.LA(1);

                    if ( (LA61_0==37) ) {
                        alt61=1;
                    }
                    switch (alt61) {
                        case 1 :
                            // InternalXcore.g:2860:6: (lv_unique_2_0= 'unique' )
                            {
                            // InternalXcore.g:2860:6: (lv_unique_2_0= 'unique' )
                            // InternalXcore.g:2861:7: lv_unique_2_0= 'unique'
                            {
                            lv_unique_2_0=(Token)match(input,37,FOLLOW_8); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_unique_2_0, grammarAccess.getXParameterAccess().getUniqueUniqueKeyword_1_0_1_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getXParameterRule());
                              							}
                              							setWithLastConsumed(current, "unique", lv_unique_2_0 != null, "unique");
                              						
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:2875:4: ( ( (lv_unique_3_0= 'unique' ) ) ( (lv_unordered_4_0= 'unordered' ) )? )
                    {
                    // InternalXcore.g:2875:4: ( ( (lv_unique_3_0= 'unique' ) ) ( (lv_unordered_4_0= 'unordered' ) )? )
                    // InternalXcore.g:2876:5: ( (lv_unique_3_0= 'unique' ) ) ( (lv_unordered_4_0= 'unordered' ) )?
                    {
                    // InternalXcore.g:2876:5: ( (lv_unique_3_0= 'unique' ) )
                    // InternalXcore.g:2877:6: (lv_unique_3_0= 'unique' )
                    {
                    // InternalXcore.g:2877:6: (lv_unique_3_0= 'unique' )
                    // InternalXcore.g:2878:7: lv_unique_3_0= 'unique'
                    {
                    lv_unique_3_0=(Token)match(input,37,FOLLOW_62); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_unique_3_0, grammarAccess.getXParameterAccess().getUniqueUniqueKeyword_1_1_0_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getXParameterRule());
                      							}
                      							setWithLastConsumed(current, "unique", lv_unique_3_0 != null, "unique");
                      						
                    }

                    }


                    }

                    // InternalXcore.g:2890:5: ( (lv_unordered_4_0= 'unordered' ) )?
                    int alt62=2;
                    int LA62_0 = input.LA(1);

                    if ( (LA62_0==36) ) {
                        alt62=1;
                    }
                    switch (alt62) {
                        case 1 :
                            // InternalXcore.g:2891:6: (lv_unordered_4_0= 'unordered' )
                            {
                            // InternalXcore.g:2891:6: (lv_unordered_4_0= 'unordered' )
                            // InternalXcore.g:2892:7: lv_unordered_4_0= 'unordered'
                            {
                            lv_unordered_4_0=(Token)match(input,36,FOLLOW_8); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_unordered_4_0, grammarAccess.getXParameterAccess().getUnorderedUnorderedKeyword_1_1_1_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getXParameterRule());
                              							}
                              							setWithLastConsumed(current, "unordered", lv_unordered_4_0 != null, "unordered");
                              						
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;

            }

            // InternalXcore.g:2906:3: ( (lv_type_5_0= ruleXGenericType ) )
            // InternalXcore.g:2907:4: (lv_type_5_0= ruleXGenericType )
            {
            // InternalXcore.g:2907:4: (lv_type_5_0= ruleXGenericType )
            // InternalXcore.g:2908:5: lv_type_5_0= ruleXGenericType
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXParameterAccess().getTypeXGenericTypeParserRuleCall_2_0());
              				
            }
            pushFollow(FOLLOW_38);
            lv_type_5_0=ruleXGenericType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXParameterRule());
              					}
              					set(
              						current,
              						"type",
              						lv_type_5_0,
              						"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalXcore.g:2925:3: ( (lv_multiplicity_6_0= ruleXMultiplicity ) )?
            int alt64=2;
            int LA64_0 = input.LA(1);

            if ( (LA64_0==59) ) {
                alt64=1;
            }
            switch (alt64) {
                case 1 :
                    // InternalXcore.g:2926:4: (lv_multiplicity_6_0= ruleXMultiplicity )
                    {
                    // InternalXcore.g:2926:4: (lv_multiplicity_6_0= ruleXMultiplicity )
                    // InternalXcore.g:2927:5: lv_multiplicity_6_0= ruleXMultiplicity
                    {
                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getXParameterAccess().getMultiplicityXMultiplicityParserRuleCall_3_0());
                      				
                    }
                    pushFollow(FOLLOW_15);
                    lv_multiplicity_6_0=ruleXMultiplicity();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElementForParent(grammarAccess.getXParameterRule());
                      					}
                      					set(
                      						current,
                      						"multiplicity",
                      						lv_multiplicity_6_0,
                      						"org.eclipse.emf.ecore.xcore.Xcore.XMultiplicity");
                      					afterParserOrEnumRuleCall();
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalXcore.g:2944:3: ( (lv_name_7_0= RULE_ID ) )
            // InternalXcore.g:2945:4: (lv_name_7_0= RULE_ID )
            {
            // InternalXcore.g:2945:4: (lv_name_7_0= RULE_ID )
            // InternalXcore.g:2946:5: lv_name_7_0= RULE_ID
            {
            lv_name_7_0=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_7_0, grammarAccess.getXParameterAccess().getNameIDTerminalRuleCall_4_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getXParameterRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_7_0,
              						"org.eclipse.xtext.xbase.Xtype.ID");
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXParameter"


    // $ANTLR start "entryRuleXTypeParameter"
    // InternalXcore.g:2966:1: entryRuleXTypeParameter returns [EObject current=null] : iv_ruleXTypeParameter= ruleXTypeParameter EOF ;
    public final EObject entryRuleXTypeParameter() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXTypeParameter = null;


        try {
            // InternalXcore.g:2966:55: (iv_ruleXTypeParameter= ruleXTypeParameter EOF )
            // InternalXcore.g:2967:2: iv_ruleXTypeParameter= ruleXTypeParameter EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXTypeParameterRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXTypeParameter=ruleXTypeParameter();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXTypeParameter; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXTypeParameter"


    // $ANTLR start "ruleXTypeParameter"
    // InternalXcore.g:2973:1: ruleXTypeParameter returns [EObject current=null] : ( ( (lv_annotations_0_0= ruleXAnnotation ) )* ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (lv_bounds_3_0= ruleXGenericType ) ) (otherlv_4= '&' ( (lv_bounds_5_0= ruleXGenericType ) ) )* )? ) ;
    public final EObject ruleXTypeParameter() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        EObject lv_annotations_0_0 = null;

        EObject lv_bounds_3_0 = null;

        EObject lv_bounds_5_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:2979:2: ( ( ( (lv_annotations_0_0= ruleXAnnotation ) )* ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (lv_bounds_3_0= ruleXGenericType ) ) (otherlv_4= '&' ( (lv_bounds_5_0= ruleXGenericType ) ) )* )? ) )
            // InternalXcore.g:2980:2: ( ( (lv_annotations_0_0= ruleXAnnotation ) )* ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (lv_bounds_3_0= ruleXGenericType ) ) (otherlv_4= '&' ( (lv_bounds_5_0= ruleXGenericType ) ) )* )? )
            {
            // InternalXcore.g:2980:2: ( ( (lv_annotations_0_0= ruleXAnnotation ) )* ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (lv_bounds_3_0= ruleXGenericType ) ) (otherlv_4= '&' ( (lv_bounds_5_0= ruleXGenericType ) ) )* )? )
            // InternalXcore.g:2981:3: ( (lv_annotations_0_0= ruleXAnnotation ) )* ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (lv_bounds_3_0= ruleXGenericType ) ) (otherlv_4= '&' ( (lv_bounds_5_0= ruleXGenericType ) ) )* )?
            {
            // InternalXcore.g:2981:3: ( (lv_annotations_0_0= ruleXAnnotation ) )*
            loop65:
            do {
                int alt65=2;
                int LA65_0 = input.LA(1);

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


                switch (alt65) {
            	case 1 :
            	    // InternalXcore.g:2982:4: (lv_annotations_0_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:2982:4: (lv_annotations_0_0= ruleXAnnotation )
            	    // InternalXcore.g:2983:5: lv_annotations_0_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getXTypeParameterAccess().getAnnotationsXAnnotationParserRuleCall_0_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_17);
            	    lv_annotations_0_0=ruleXAnnotation();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getXTypeParameterRule());
            	      					}
            	      					add(
            	      						current,
            	      						"annotations",
            	      						lv_annotations_0_0,
            	      						"org.eclipse.emf.ecore.xcore.Xcore.XAnnotation");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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

            // InternalXcore.g:3000:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalXcore.g:3001:4: (lv_name_1_0= RULE_ID )
            {
            // InternalXcore.g:3001:4: (lv_name_1_0= RULE_ID )
            // InternalXcore.g:3002:5: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_63); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_name_1_0, grammarAccess.getXTypeParameterAccess().getNameIDTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getXTypeParameterRule());
              					}
              					setWithLastConsumed(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.xtext.xbase.Xtype.ID");
              				
            }

            }


            }

            // InternalXcore.g:3018:3: (otherlv_2= 'extends' ( (lv_bounds_3_0= ruleXGenericType ) ) (otherlv_4= '&' ( (lv_bounds_5_0= ruleXGenericType ) ) )* )?
            int alt67=2;
            int LA67_0 = input.LA(1);

            if ( (LA67_0==35) ) {
                alt67=1;
            }
            switch (alt67) {
                case 1 :
                    // InternalXcore.g:3019:4: otherlv_2= 'extends' ( (lv_bounds_3_0= ruleXGenericType ) ) (otherlv_4= '&' ( (lv_bounds_5_0= ruleXGenericType ) ) )*
                    {
                    otherlv_2=(Token)match(input,35,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getXTypeParameterAccess().getExtendsKeyword_2_0());
                      			
                    }
                    // InternalXcore.g:3023:4: ( (lv_bounds_3_0= ruleXGenericType ) )
                    // InternalXcore.g:3024:5: (lv_bounds_3_0= ruleXGenericType )
                    {
                    // InternalXcore.g:3024:5: (lv_bounds_3_0= ruleXGenericType )
                    // InternalXcore.g:3025:6: lv_bounds_3_0= ruleXGenericType
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXTypeParameterAccess().getBoundsXGenericTypeParserRuleCall_2_1_0());
                      					
                    }
                    pushFollow(FOLLOW_64);
                    lv_bounds_3_0=ruleXGenericType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXTypeParameterRule());
                      						}
                      						add(
                      							current,
                      							"bounds",
                      							lv_bounds_3_0,
                      							"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:3042:4: (otherlv_4= '&' ( (lv_bounds_5_0= ruleXGenericType ) ) )*
                    loop66:
                    do {
                        int alt66=2;
                        int LA66_0 = input.LA(1);

                        if ( (LA66_0==58) ) {
                            alt66=1;
                        }


                        switch (alt66) {
                    	case 1 :
                    	    // InternalXcore.g:3043:5: otherlv_4= '&' ( (lv_bounds_5_0= ruleXGenericType ) )
                    	    {
                    	    otherlv_4=(Token)match(input,58,FOLLOW_8); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_4, grammarAccess.getXTypeParameterAccess().getAmpersandKeyword_2_2_0());
                    	      				
                    	    }
                    	    // InternalXcore.g:3047:5: ( (lv_bounds_5_0= ruleXGenericType ) )
                    	    // InternalXcore.g:3048:6: (lv_bounds_5_0= ruleXGenericType )
                    	    {
                    	    // InternalXcore.g:3048:6: (lv_bounds_5_0= ruleXGenericType )
                    	    // InternalXcore.g:3049:7: lv_bounds_5_0= ruleXGenericType
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXTypeParameterAccess().getBoundsXGenericTypeParserRuleCall_2_2_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_64);
                    	    lv_bounds_5_0=ruleXGenericType();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getXTypeParameterRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"bounds",
                    	      								lv_bounds_5_0,
                    	      								"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXTypeParameter"


    // $ANTLR start "entryRuleXMultiplicity"
    // InternalXcore.g:3072:1: entryRuleXMultiplicity returns [String current=null] : iv_ruleXMultiplicity= ruleXMultiplicity EOF ;
    public final String entryRuleXMultiplicity() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleXMultiplicity = null;


        try {
            // InternalXcore.g:3072:53: (iv_ruleXMultiplicity= ruleXMultiplicity EOF )
            // InternalXcore.g:3073:2: iv_ruleXMultiplicity= ruleXMultiplicity EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXMultiplicityRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXMultiplicity=ruleXMultiplicity();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXMultiplicity.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXMultiplicity"


    // $ANTLR start "ruleXMultiplicity"
    // InternalXcore.g:3079:1: ruleXMultiplicity returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '[' (kw= '?' | kw= '*' | kw= '+' | (this_INT_4= RULE_INT (kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' ) )? ) )? kw= ']' ) ;
    public final AntlrDatatypeRuleToken ruleXMultiplicity() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        Token this_INT_4=null;
        Token this_INT_6=null;


        	enterRule();

        try {
            // InternalXcore.g:3085:2: ( (kw= '[' (kw= '?' | kw= '*' | kw= '+' | (this_INT_4= RULE_INT (kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' ) )? ) )? kw= ']' ) )
            // InternalXcore.g:3086:2: (kw= '[' (kw= '?' | kw= '*' | kw= '+' | (this_INT_4= RULE_INT (kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' ) )? ) )? kw= ']' )
            {
            // InternalXcore.g:3086:2: (kw= '[' (kw= '?' | kw= '*' | kw= '+' | (this_INT_4= RULE_INT (kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' ) )? ) )? kw= ']' )
            // InternalXcore.g:3087:3: kw= '[' (kw= '?' | kw= '*' | kw= '+' | (this_INT_4= RULE_INT (kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' ) )? ) )? kw= ']'
            {
            kw=(Token)match(input,59,FOLLOW_65); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(kw);
              			newLeafNode(kw, grammarAccess.getXMultiplicityAccess().getLeftSquareBracketKeyword_0());
              		
            }
            // InternalXcore.g:3092:3: (kw= '?' | kw= '*' | kw= '+' | (this_INT_4= RULE_INT (kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' ) )? ) )?
            int alt70=5;
            switch ( input.LA(1) ) {
                case 60:
                    {
                    alt70=1;
                    }
                    break;
                case 61:
                    {
                    alt70=2;
                    }
                    break;
                case 62:
                    {
                    alt70=3;
                    }
                    break;
                case RULE_INT:
                    {
                    alt70=4;
                    }
                    break;
            }

            switch (alt70) {
                case 1 :
                    // InternalXcore.g:3093:4: kw= '?'
                    {
                    kw=(Token)match(input,60,FOLLOW_66); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getXMultiplicityAccess().getQuestionMarkKeyword_1_0());
                      			
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:3099:4: kw= '*'
                    {
                    kw=(Token)match(input,61,FOLLOW_66); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getXMultiplicityAccess().getAsteriskKeyword_1_1());
                      			
                    }

                    }
                    break;
                case 3 :
                    // InternalXcore.g:3105:4: kw= '+'
                    {
                    kw=(Token)match(input,62,FOLLOW_66); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getXMultiplicityAccess().getPlusSignKeyword_1_2());
                      			
                    }

                    }
                    break;
                case 4 :
                    // InternalXcore.g:3111:4: (this_INT_4= RULE_INT (kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' ) )? )
                    {
                    // InternalXcore.g:3111:4: (this_INT_4= RULE_INT (kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' ) )? )
                    // InternalXcore.g:3112:5: this_INT_4= RULE_INT (kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' ) )?
                    {
                    this_INT_4=(Token)match(input,RULE_INT,FOLLOW_67); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					current.merge(this_INT_4);
                      				
                    }
                    if ( state.backtracking==0 ) {

                      					newLeafNode(this_INT_4, grammarAccess.getXMultiplicityAccess().getINTTerminalRuleCall_1_3_0());
                      				
                    }
                    // InternalXcore.g:3119:5: (kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' ) )?
                    int alt69=2;
                    int LA69_0 = input.LA(1);

                    if ( (LA69_0==63) ) {
                        alt69=1;
                    }
                    switch (alt69) {
                        case 1 :
                            // InternalXcore.g:3120:6: kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' )
                            {
                            kw=(Token)match(input,63,FOLLOW_68); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              						current.merge(kw);
                              						newLeafNode(kw, grammarAccess.getXMultiplicityAccess().getFullStopFullStopKeyword_1_3_1_0());
                              					
                            }
                            // InternalXcore.g:3125:6: (this_INT_6= RULE_INT | kw= '?' | kw= '*' )
                            int alt68=3;
                            switch ( input.LA(1) ) {
                            case RULE_INT:
                                {
                                alt68=1;
                                }
                                break;
                            case 60:
                                {
                                alt68=2;
                                }
                                break;
                            case 61:
                                {
                                alt68=3;
                                }
                                break;
                            default:
                                if (state.backtracking>0) {state.failed=true; return current;}
                                NoViableAltException nvae =
                                    new NoViableAltException("", 68, 0, input);

                                throw nvae;
                            }

                            switch (alt68) {
                                case 1 :
                                    // InternalXcore.g:3126:7: this_INT_6= RULE_INT
                                    {
                                    this_INT_6=(Token)match(input,RULE_INT,FOLLOW_66); if (state.failed) return current;
                                    if ( state.backtracking==0 ) {

                                      							current.merge(this_INT_6);
                                      						
                                    }
                                    if ( state.backtracking==0 ) {

                                      							newLeafNode(this_INT_6, grammarAccess.getXMultiplicityAccess().getINTTerminalRuleCall_1_3_1_1_0());
                                      						
                                    }

                                    }
                                    break;
                                case 2 :
                                    // InternalXcore.g:3134:7: kw= '?'
                                    {
                                    kw=(Token)match(input,60,FOLLOW_66); if (state.failed) return current;
                                    if ( state.backtracking==0 ) {

                                      							current.merge(kw);
                                      							newLeafNode(kw, grammarAccess.getXMultiplicityAccess().getQuestionMarkKeyword_1_3_1_1_1());
                                      						
                                    }

                                    }
                                    break;
                                case 3 :
                                    // InternalXcore.g:3140:7: kw= '*'
                                    {
                                    kw=(Token)match(input,61,FOLLOW_66); if (state.failed) return current;
                                    if ( state.backtracking==0 ) {

                                      							current.merge(kw);
                                      							newLeafNode(kw, grammarAccess.getXMultiplicityAccess().getAsteriskKeyword_1_3_1_1_2());
                                      						
                                    }

                                    }
                                    break;

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;

            }

            kw=(Token)match(input,64,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(kw);
              			newLeafNode(kw, grammarAccess.getXMultiplicityAccess().getRightSquareBracketKeyword_2());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXMultiplicity"


    // $ANTLR start "entryRuleXBlockExpression"
    // InternalXcore.g:3158:1: entryRuleXBlockExpression returns [EObject current=null] : iv_ruleXBlockExpression= ruleXBlockExpression EOF ;
    public final EObject entryRuleXBlockExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXBlockExpression = null;


        try {
            // InternalXcore.g:3158:57: (iv_ruleXBlockExpression= ruleXBlockExpression EOF )
            // InternalXcore.g:3159:2: iv_ruleXBlockExpression= ruleXBlockExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXBlockExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXBlockExpression=ruleXBlockExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXBlockExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXBlockExpression"


    // $ANTLR start "ruleXBlockExpression"
    // InternalXcore.g:3165:1: ruleXBlockExpression returns [EObject current=null] : ( () otherlv_1= '{' ( ( (lv_expressions_2_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_3= ';' )? )* otherlv_4= '}' ) ;
    public final EObject ruleXBlockExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        EObject lv_expressions_2_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:3171:2: ( ( () otherlv_1= '{' ( ( (lv_expressions_2_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_3= ';' )? )* otherlv_4= '}' ) )
            // InternalXcore.g:3172:2: ( () otherlv_1= '{' ( ( (lv_expressions_2_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_3= ';' )? )* otherlv_4= '}' )
            {
            // InternalXcore.g:3172:2: ( () otherlv_1= '{' ( ( (lv_expressions_2_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_3= ';' )? )* otherlv_4= '}' )
            // InternalXcore.g:3173:3: () otherlv_1= '{' ( ( (lv_expressions_2_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_3= ';' )? )* otherlv_4= '}'
            {
            // InternalXcore.g:3173:3: ()
            // InternalXcore.g:3174:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXBlockExpressionAccess().getXBlockExpressionAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,29,FOLLOW_69); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXBlockExpressionAccess().getLeftCurlyBracketKeyword_1());
              		
            }
            // InternalXcore.g:3184:3: ( ( (lv_expressions_2_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_3= ';' )? )*
            loop72:
            do {
                int alt72=2;
                int LA72_0 = input.LA(1);

                if ( ((LA72_0>=RULE_STRING && LA72_0<=RULE_DECIMAL)||LA72_0==13||LA72_0==15||(LA72_0>=19 && LA72_0<=21)||LA72_0==23||(LA72_0>=25 && LA72_0<=29)||(LA72_0>=31 && LA72_0<=57)||LA72_0==59||LA72_0==62||LA72_0==66||(LA72_0>=68 && LA72_0<=69)||LA72_0==91||LA72_0==96||LA72_0==98||LA72_0==100||(LA72_0>=104 && LA72_0<=116)||LA72_0==118) ) {
                    alt72=1;
                }


                switch (alt72) {
            	case 1 :
            	    // InternalXcore.g:3185:4: ( (lv_expressions_2_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_3= ';' )?
            	    {
            	    // InternalXcore.g:3185:4: ( (lv_expressions_2_0= ruleXExpressionOrVarDeclaration ) )
            	    // InternalXcore.g:3186:5: (lv_expressions_2_0= ruleXExpressionOrVarDeclaration )
            	    {
            	    // InternalXcore.g:3186:5: (lv_expressions_2_0= ruleXExpressionOrVarDeclaration )
            	    // InternalXcore.g:3187:6: lv_expressions_2_0= ruleXExpressionOrVarDeclaration
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getXBlockExpressionAccess().getExpressionsXExpressionOrVarDeclarationParserRuleCall_2_0_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_70);
            	    lv_expressions_2_0=ruleXExpressionOrVarDeclaration();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getXBlockExpressionRule());
            	      						}
            	      						add(
            	      							current,
            	      							"expressions",
            	      							lv_expressions_2_0,
            	      							"org.eclipse.xtext.xbase.Xbase.XExpressionOrVarDeclaration");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }

            	    // InternalXcore.g:3204:4: (otherlv_3= ';' )?
            	    int alt71=2;
            	    int LA71_0 = input.LA(1);

            	    if ( (LA71_0==65) ) {
            	        alt71=1;
            	    }
            	    switch (alt71) {
            	        case 1 :
            	            // InternalXcore.g:3205:5: otherlv_3= ';'
            	            {
            	            otherlv_3=(Token)match(input,65,FOLLOW_69); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              					newLeafNode(otherlv_3, grammarAccess.getXBlockExpressionAccess().getSemicolonKeyword_2_1());
            	              				
            	            }

            	            }
            	            break;

            	    }


            	    }
            	    break;

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

            otherlv_4=(Token)match(input,30,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_4, grammarAccess.getXBlockExpressionAccess().getRightCurlyBracketKeyword_3());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXBlockExpression"


    // $ANTLR start "entryRuleXGenericType"
    // InternalXcore.g:3219:1: entryRuleXGenericType returns [EObject current=null] : iv_ruleXGenericType= ruleXGenericType EOF ;
    public final EObject entryRuleXGenericType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXGenericType = null;


        try {
            // InternalXcore.g:3219:53: (iv_ruleXGenericType= ruleXGenericType EOF )
            // InternalXcore.g:3220:2: iv_ruleXGenericType= ruleXGenericType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXGenericTypeRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXGenericType=ruleXGenericType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXGenericType; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXGenericType"


    // $ANTLR start "ruleXGenericType"
    // InternalXcore.g:3226:1: ruleXGenericType returns [EObject current=null] : ( ( ( ruleXQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_typeArguments_2_0= ruleXGenericTypeArgument ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleXGenericTypeArgument ) ) )* otherlv_5= '>' )? ) ;
    public final EObject ruleXGenericType() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_typeArguments_2_0 = null;

        EObject lv_typeArguments_4_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:3232:2: ( ( ( ( ruleXQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_typeArguments_2_0= ruleXGenericTypeArgument ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleXGenericTypeArgument ) ) )* otherlv_5= '>' )? ) )
            // InternalXcore.g:3233:2: ( ( ( ruleXQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_typeArguments_2_0= ruleXGenericTypeArgument ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleXGenericTypeArgument ) ) )* otherlv_5= '>' )? )
            {
            // InternalXcore.g:3233:2: ( ( ( ruleXQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_typeArguments_2_0= ruleXGenericTypeArgument ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleXGenericTypeArgument ) ) )* otherlv_5= '>' )? )
            // InternalXcore.g:3234:3: ( ( ruleXQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_typeArguments_2_0= ruleXGenericTypeArgument ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleXGenericTypeArgument ) ) )* otherlv_5= '>' )?
            {
            // InternalXcore.g:3234:3: ( ( ruleXQualifiedName ) )
            // InternalXcore.g:3235:4: ( ruleXQualifiedName )
            {
            // InternalXcore.g:3235:4: ( ruleXQualifiedName )
            // InternalXcore.g:3236:5: ruleXQualifiedName
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getXGenericTypeRule());
              					}
              				
            }
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXGenericTypeAccess().getTypeGenBaseCrossReference_0_0());
              				
            }
            pushFollow(FOLLOW_71);
            ruleXQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalXcore.g:3250:3: ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_typeArguments_2_0= ruleXGenericTypeArgument ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleXGenericTypeArgument ) ) )* otherlv_5= '>' )?
            int alt74=2;
            int LA74_0 = input.LA(1);

            if ( (LA74_0==23) && (synpred3_InternalXcore())) {
                alt74=1;
            }
            switch (alt74) {
                case 1 :
                    // InternalXcore.g:3251:4: ( ( '<' )=>otherlv_1= '<' ) ( (lv_typeArguments_2_0= ruleXGenericTypeArgument ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleXGenericTypeArgument ) ) )* otherlv_5= '>'
                    {
                    // InternalXcore.g:3251:4: ( ( '<' )=>otherlv_1= '<' )
                    // InternalXcore.g:3252:5: ( '<' )=>otherlv_1= '<'
                    {
                    otherlv_1=(Token)match(input,23,FOLLOW_72); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_1, grammarAccess.getXGenericTypeAccess().getLessThanSignKeyword_1_0());
                      				
                    }

                    }

                    // InternalXcore.g:3258:4: ( (lv_typeArguments_2_0= ruleXGenericTypeArgument ) )
                    // InternalXcore.g:3259:5: (lv_typeArguments_2_0= ruleXGenericTypeArgument )
                    {
                    // InternalXcore.g:3259:5: (lv_typeArguments_2_0= ruleXGenericTypeArgument )
                    // InternalXcore.g:3260:6: lv_typeArguments_2_0= ruleXGenericTypeArgument
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXGenericTypeAccess().getTypeArgumentsXGenericTypeArgumentParserRuleCall_1_1_0());
                      					
                    }
                    pushFollow(FOLLOW_18);
                    lv_typeArguments_2_0=ruleXGenericTypeArgument();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXGenericTypeRule());
                      						}
                      						add(
                      							current,
                      							"typeArguments",
                      							lv_typeArguments_2_0,
                      							"org.eclipse.emf.ecore.xcore.Xcore.XGenericTypeArgument");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:3277:4: (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleXGenericTypeArgument ) ) )*
                    loop73:
                    do {
                        int alt73=2;
                        int LA73_0 = input.LA(1);

                        if ( (LA73_0==16) ) {
                            alt73=1;
                        }


                        switch (alt73) {
                    	case 1 :
                    	    // InternalXcore.g:3278:5: otherlv_3= ',' ( (lv_typeArguments_4_0= ruleXGenericTypeArgument ) )
                    	    {
                    	    otherlv_3=(Token)match(input,16,FOLLOW_72); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_3, grammarAccess.getXGenericTypeAccess().getCommaKeyword_1_2_0());
                    	      				
                    	    }
                    	    // InternalXcore.g:3282:5: ( (lv_typeArguments_4_0= ruleXGenericTypeArgument ) )
                    	    // InternalXcore.g:3283:6: (lv_typeArguments_4_0= ruleXGenericTypeArgument )
                    	    {
                    	    // InternalXcore.g:3283:6: (lv_typeArguments_4_0= ruleXGenericTypeArgument )
                    	    // InternalXcore.g:3284:7: lv_typeArguments_4_0= ruleXGenericTypeArgument
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXGenericTypeAccess().getTypeArgumentsXGenericTypeArgumentParserRuleCall_1_2_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_18);
                    	    lv_typeArguments_4_0=ruleXGenericTypeArgument();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getXGenericTypeRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"typeArguments",
                    	      								lv_typeArguments_4_0,
                    	      								"org.eclipse.emf.ecore.xcore.Xcore.XGenericTypeArgument");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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

                    otherlv_5=(Token)match(input,24,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_5, grammarAccess.getXGenericTypeAccess().getGreaterThanSignKeyword_1_3());
                      			
                    }

                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXGenericType"


    // $ANTLR start "entryRuleXGenericTypeArgument"
    // InternalXcore.g:3311:1: entryRuleXGenericTypeArgument returns [EObject current=null] : iv_ruleXGenericTypeArgument= ruleXGenericTypeArgument EOF ;
    public final EObject entryRuleXGenericTypeArgument() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXGenericTypeArgument = null;


        try {
            // InternalXcore.g:3311:61: (iv_ruleXGenericTypeArgument= ruleXGenericTypeArgument EOF )
            // InternalXcore.g:3312:2: iv_ruleXGenericTypeArgument= ruleXGenericTypeArgument EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXGenericTypeArgumentRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXGenericTypeArgument=ruleXGenericTypeArgument();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXGenericTypeArgument; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXGenericTypeArgument"


    // $ANTLR start "ruleXGenericTypeArgument"
    // InternalXcore.g:3318:1: ruleXGenericTypeArgument returns [EObject current=null] : (this_XGenericType_0= ruleXGenericType | this_XGenericWildcardTypeArgument_1= ruleXGenericWildcardTypeArgument ) ;
    public final EObject ruleXGenericTypeArgument() throws RecognitionException {
        EObject current = null;

        EObject this_XGenericType_0 = null;

        EObject this_XGenericWildcardTypeArgument_1 = null;



        	enterRule();

        try {
            // InternalXcore.g:3324:2: ( (this_XGenericType_0= ruleXGenericType | this_XGenericWildcardTypeArgument_1= ruleXGenericWildcardTypeArgument ) )
            // InternalXcore.g:3325:2: (this_XGenericType_0= ruleXGenericType | this_XGenericWildcardTypeArgument_1= ruleXGenericWildcardTypeArgument )
            {
            // InternalXcore.g:3325:2: (this_XGenericType_0= ruleXGenericType | this_XGenericWildcardTypeArgument_1= ruleXGenericWildcardTypeArgument )
            int alt75=2;
            int LA75_0 = input.LA(1);

            if ( (LA75_0==RULE_ID||(LA75_0>=44 && LA75_0<=47)) ) {
                alt75=1;
            }
            else if ( (LA75_0==60) ) {
                alt75=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 75, 0, input);

                throw nvae;
            }
            switch (alt75) {
                case 1 :
                    // InternalXcore.g:3326:3: this_XGenericType_0= ruleXGenericType
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXGenericTypeArgumentAccess().getXGenericTypeParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XGenericType_0=ruleXGenericType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XGenericType_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:3335:3: this_XGenericWildcardTypeArgument_1= ruleXGenericWildcardTypeArgument
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXGenericTypeArgumentAccess().getXGenericWildcardTypeArgumentParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XGenericWildcardTypeArgument_1=ruleXGenericWildcardTypeArgument();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XGenericWildcardTypeArgument_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXGenericTypeArgument"


    // $ANTLR start "entryRuleXGenericWildcardTypeArgument"
    // InternalXcore.g:3347:1: entryRuleXGenericWildcardTypeArgument returns [EObject current=null] : iv_ruleXGenericWildcardTypeArgument= ruleXGenericWildcardTypeArgument EOF ;
    public final EObject entryRuleXGenericWildcardTypeArgument() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXGenericWildcardTypeArgument = null;


        try {
            // InternalXcore.g:3347:69: (iv_ruleXGenericWildcardTypeArgument= ruleXGenericWildcardTypeArgument EOF )
            // InternalXcore.g:3348:2: iv_ruleXGenericWildcardTypeArgument= ruleXGenericWildcardTypeArgument EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXGenericWildcardTypeArgumentRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXGenericWildcardTypeArgument=ruleXGenericWildcardTypeArgument();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXGenericWildcardTypeArgument; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXGenericWildcardTypeArgument"


    // $ANTLR start "ruleXGenericWildcardTypeArgument"
    // InternalXcore.g:3354:1: ruleXGenericWildcardTypeArgument returns [EObject current=null] : ( () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_upperBound_3_0= ruleXGenericType ) ) ) | (otherlv_4= 'super' ( (lv_lowerBound_5_0= ruleXGenericType ) ) ) )? ) ;
    public final EObject ruleXGenericWildcardTypeArgument() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        EObject lv_upperBound_3_0 = null;

        EObject lv_lowerBound_5_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:3360:2: ( ( () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_upperBound_3_0= ruleXGenericType ) ) ) | (otherlv_4= 'super' ( (lv_lowerBound_5_0= ruleXGenericType ) ) ) )? ) )
            // InternalXcore.g:3361:2: ( () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_upperBound_3_0= ruleXGenericType ) ) ) | (otherlv_4= 'super' ( (lv_lowerBound_5_0= ruleXGenericType ) ) ) )? )
            {
            // InternalXcore.g:3361:2: ( () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_upperBound_3_0= ruleXGenericType ) ) ) | (otherlv_4= 'super' ( (lv_lowerBound_5_0= ruleXGenericType ) ) ) )? )
            // InternalXcore.g:3362:3: () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_upperBound_3_0= ruleXGenericType ) ) ) | (otherlv_4= 'super' ( (lv_lowerBound_5_0= ruleXGenericType ) ) ) )?
            {
            // InternalXcore.g:3362:3: ()
            // InternalXcore.g:3363:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXGenericWildcardTypeArgumentAccess().getXGenericTypeAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,60,FOLLOW_73); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXGenericWildcardTypeArgumentAccess().getQuestionMarkKeyword_1());
              		
            }
            // InternalXcore.g:3373:3: ( (otherlv_2= 'extends' ( (lv_upperBound_3_0= ruleXGenericType ) ) ) | (otherlv_4= 'super' ( (lv_lowerBound_5_0= ruleXGenericType ) ) ) )?
            int alt76=3;
            int LA76_0 = input.LA(1);

            if ( (LA76_0==35) ) {
                alt76=1;
            }
            else if ( (LA76_0==66) ) {
                alt76=2;
            }
            switch (alt76) {
                case 1 :
                    // InternalXcore.g:3374:4: (otherlv_2= 'extends' ( (lv_upperBound_3_0= ruleXGenericType ) ) )
                    {
                    // InternalXcore.g:3374:4: (otherlv_2= 'extends' ( (lv_upperBound_3_0= ruleXGenericType ) ) )
                    // InternalXcore.g:3375:5: otherlv_2= 'extends' ( (lv_upperBound_3_0= ruleXGenericType ) )
                    {
                    otherlv_2=(Token)match(input,35,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_2, grammarAccess.getXGenericWildcardTypeArgumentAccess().getExtendsKeyword_2_0_0());
                      				
                    }
                    // InternalXcore.g:3379:5: ( (lv_upperBound_3_0= ruleXGenericType ) )
                    // InternalXcore.g:3380:6: (lv_upperBound_3_0= ruleXGenericType )
                    {
                    // InternalXcore.g:3380:6: (lv_upperBound_3_0= ruleXGenericType )
                    // InternalXcore.g:3381:7: lv_upperBound_3_0= ruleXGenericType
                    {
                    if ( state.backtracking==0 ) {

                      							newCompositeNode(grammarAccess.getXGenericWildcardTypeArgumentAccess().getUpperBoundXGenericTypeParserRuleCall_2_0_1_0());
                      						
                    }
                    pushFollow(FOLLOW_2);
                    lv_upperBound_3_0=ruleXGenericType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElementForParent(grammarAccess.getXGenericWildcardTypeArgumentRule());
                      							}
                      							set(
                      								current,
                      								"upperBound",
                      								lv_upperBound_3_0,
                      								"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
                      							afterParserOrEnumRuleCall();
                      						
                    }

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:3400:4: (otherlv_4= 'super' ( (lv_lowerBound_5_0= ruleXGenericType ) ) )
                    {
                    // InternalXcore.g:3400:4: (otherlv_4= 'super' ( (lv_lowerBound_5_0= ruleXGenericType ) ) )
                    // InternalXcore.g:3401:5: otherlv_4= 'super' ( (lv_lowerBound_5_0= ruleXGenericType ) )
                    {
                    otherlv_4=(Token)match(input,66,FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_4, grammarAccess.getXGenericWildcardTypeArgumentAccess().getSuperKeyword_2_1_0());
                      				
                    }
                    // InternalXcore.g:3405:5: ( (lv_lowerBound_5_0= ruleXGenericType ) )
                    // InternalXcore.g:3406:6: (lv_lowerBound_5_0= ruleXGenericType )
                    {
                    // InternalXcore.g:3406:6: (lv_lowerBound_5_0= ruleXGenericType )
                    // InternalXcore.g:3407:7: lv_lowerBound_5_0= ruleXGenericType
                    {
                    if ( state.backtracking==0 ) {

                      							newCompositeNode(grammarAccess.getXGenericWildcardTypeArgumentAccess().getLowerBoundXGenericTypeParserRuleCall_2_1_1_0());
                      						
                    }
                    pushFollow(FOLLOW_2);
                    lv_lowerBound_5_0=ruleXGenericType();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElementForParent(grammarAccess.getXGenericWildcardTypeArgumentRule());
                      							}
                      							set(
                      								current,
                      								"lowerBound",
                      								lv_lowerBound_5_0,
                      								"org.eclipse.emf.ecore.xcore.Xcore.XGenericType");
                      							afterParserOrEnumRuleCall();
                      						
                    }

                    }


                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXGenericWildcardTypeArgument"


    // $ANTLR start "entryRuleXQualifiedName"
    // InternalXcore.g:3430:1: entryRuleXQualifiedName returns [String current=null] : iv_ruleXQualifiedName= ruleXQualifiedName EOF ;
    public final String entryRuleXQualifiedName() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleXQualifiedName = null;


        try {
            // InternalXcore.g:3430:54: (iv_ruleXQualifiedName= ruleXQualifiedName EOF )
            // InternalXcore.g:3431:2: iv_ruleXQualifiedName= ruleXQualifiedName EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXQualifiedNameRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXQualifiedName=ruleXQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXQualifiedName.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXQualifiedName"


    // $ANTLR start "ruleXQualifiedName"
    // InternalXcore.g:3437:1: ruleXQualifiedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_XID_0= ruleXID (kw= '.' this_XID_2= ruleXID )* ) ;
    public final AntlrDatatypeRuleToken ruleXQualifiedName() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_XID_0 = null;

        AntlrDatatypeRuleToken this_XID_2 = null;



        	enterRule();

        try {
            // InternalXcore.g:3443:2: ( (this_XID_0= ruleXID (kw= '.' this_XID_2= ruleXID )* ) )
            // InternalXcore.g:3444:2: (this_XID_0= ruleXID (kw= '.' this_XID_2= ruleXID )* )
            {
            // InternalXcore.g:3444:2: (this_XID_0= ruleXID (kw= '.' this_XID_2= ruleXID )* )
            // InternalXcore.g:3445:3: this_XID_0= ruleXID (kw= '.' this_XID_2= ruleXID )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getXQualifiedNameAccess().getXIDParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_74);
            this_XID_0=ruleXID();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_XID_0);
              		
            }
            if ( state.backtracking==0 ) {

              			afterParserOrEnumRuleCall();
              		
            }
            // InternalXcore.g:3455:3: (kw= '.' this_XID_2= ruleXID )*
            loop77:
            do {
                int alt77=2;
                int LA77_0 = input.LA(1);

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


                switch (alt77) {
            	case 1 :
            	    // InternalXcore.g:3456:4: kw= '.' this_XID_2= ruleXID
            	    {
            	    kw=(Token)match(input,67,FOLLOW_8); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(kw);
            	      				newLeafNode(kw, grammarAccess.getXQualifiedNameAccess().getFullStopKeyword_1_0());
            	      			
            	    }
            	    if ( state.backtracking==0 ) {

            	      				newCompositeNode(grammarAccess.getXQualifiedNameAccess().getXIDParserRuleCall_1_1());
            	      			
            	    }
            	    pushFollow(FOLLOW_74);
            	    this_XID_2=ruleXID();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(this_XID_2);
            	      			
            	    }
            	    if ( state.backtracking==0 ) {

            	      				afterParserOrEnumRuleCall();
            	      			
            	    }

            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXQualifiedName"


    // $ANTLR start "entryRuleXID"
    // InternalXcore.g:3476:1: entryRuleXID returns [String current=null] : iv_ruleXID= ruleXID EOF ;
    public final String entryRuleXID() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleXID = null;


        try {
            // InternalXcore.g:3476:43: (iv_ruleXID= ruleXID EOF )
            // InternalXcore.g:3477:2: iv_ruleXID= ruleXID EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXIDRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXID=ruleXID();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXID.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXID"


    // $ANTLR start "ruleXID"
    // InternalXcore.g:3483:1: ruleXID returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID | kw= 'get' | kw= 'isSet' | kw= 'set' | kw= 'unset' ) ;
    public final AntlrDatatypeRuleToken ruleXID() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;
        Token kw=null;


        	enterRule();

        try {
            // InternalXcore.g:3489:2: ( (this_ID_0= RULE_ID | kw= 'get' | kw= 'isSet' | kw= 'set' | kw= 'unset' ) )
            // InternalXcore.g:3490:2: (this_ID_0= RULE_ID | kw= 'get' | kw= 'isSet' | kw= 'set' | kw= 'unset' )
            {
            // InternalXcore.g:3490:2: (this_ID_0= RULE_ID | kw= 'get' | kw= 'isSet' | kw= 'set' | kw= 'unset' )
            int alt78=5;
            switch ( input.LA(1) ) {
            case RULE_ID:
                {
                alt78=1;
                }
                break;
            case 44:
                {
                alt78=2;
                }
                break;
            case 46:
                {
                alt78=3;
                }
                break;
            case 45:
                {
                alt78=4;
                }
                break;
            case 47:
                {
                alt78=5;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 78, 0, input);

                throw nvae;
            }

            switch (alt78) {
                case 1 :
                    // InternalXcore.g:3491:3: this_ID_0= RULE_ID
                    {
                    this_ID_0=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(this_ID_0);
                      		
                    }
                    if ( state.backtracking==0 ) {

                      			newLeafNode(this_ID_0, grammarAccess.getXIDAccess().getIDTerminalRuleCall_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:3499:3: kw= 'get'
                    {
                    kw=(Token)match(input,44,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getXIDAccess().getGetKeyword_1());
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalXcore.g:3505:3: kw= 'isSet'
                    {
                    kw=(Token)match(input,46,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getXIDAccess().getIsSetKeyword_2());
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalXcore.g:3511:3: kw= 'set'
                    {
                    kw=(Token)match(input,45,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getXIDAccess().getSetKeyword_3());
                      		
                    }

                    }
                    break;
                case 5 :
                    // InternalXcore.g:3517:3: kw= 'unset'
                    {
                    kw=(Token)match(input,47,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getXIDAccess().getUnsetKeyword_4());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXID"


    // $ANTLR start "entryRuleValidID"
    // InternalXcore.g:3526:1: entryRuleValidID returns [String current=null] : iv_ruleValidID= ruleValidID EOF ;
    public final String entryRuleValidID() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleValidID = null;


        try {
            // InternalXcore.g:3526:47: (iv_ruleValidID= ruleValidID EOF )
            // InternalXcore.g:3527:2: iv_ruleValidID= ruleValidID EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getValidIDRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleValidID=ruleValidID();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleValidID.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleValidID"


    // $ANTLR start "ruleValidID"
    // InternalXcore.g:3533:1: ruleValidID returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_XID_0= ruleXID | kw= 'void' ) ;
    public final AntlrDatatypeRuleToken ruleValidID() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_XID_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:3539:2: ( (this_XID_0= ruleXID | kw= 'void' ) )
            // InternalXcore.g:3540:2: (this_XID_0= ruleXID | kw= 'void' )
            {
            // InternalXcore.g:3540:2: (this_XID_0= ruleXID | kw= 'void' )
            int alt79=2;
            int LA79_0 = input.LA(1);

            if ( (LA79_0==RULE_ID||(LA79_0>=44 && LA79_0<=47)) ) {
                alt79=1;
            }
            else if ( (LA79_0==56) ) {
                alt79=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 79, 0, input);

                throw nvae;
            }
            switch (alt79) {
                case 1 :
                    // InternalXcore.g:3541:3: this_XID_0= ruleXID
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getValidIDAccess().getXIDParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XID_0=ruleXID();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(this_XID_0);
                      		
                    }
                    if ( state.backtracking==0 ) {

                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:3552:3: kw= 'void'
                    {
                    kw=(Token)match(input,56,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getValidIDAccess().getVoidKeyword_1());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleValidID"


    // $ANTLR start "entryRuleFeatureCallID"
    // InternalXcore.g:3561:1: entryRuleFeatureCallID returns [String current=null] : iv_ruleFeatureCallID= ruleFeatureCallID EOF ;
    public final String entryRuleFeatureCallID() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleFeatureCallID = null;


        try {
            // InternalXcore.g:3561:53: (iv_ruleFeatureCallID= ruleFeatureCallID EOF )
            // InternalXcore.g:3562:2: iv_ruleFeatureCallID= ruleFeatureCallID EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getFeatureCallIDRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleFeatureCallID=ruleFeatureCallID();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleFeatureCallID.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleFeatureCallID"


    // $ANTLR start "ruleFeatureCallID"
    // InternalXcore.g:3568:1: ruleFeatureCallID returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ValidID_0= ruleValidID | kw= 'abstract' | kw= 'annotation' | kw= 'as' | kw= 'class' | kw= 'container' | kw= 'contains' | kw= 'convert' | kw= 'create' | kw= 'derived' | kw= 'enum' | kw= 'extends' | kw= 'extension' | kw= 'id' | kw= 'import' | kw= 'keys' | kw= 'interface' | kw= 'local' | kw= 'op' | kw= 'opposite' | kw= 'package' | kw= 'readonly' | kw= 'refers' | kw= 'resolving' | kw= 'static' | kw= 'throws' | kw= 'transient' | kw= 'unique' | kw= 'unordered' | kw= 'unsettable' | kw= 'volatile' | kw= 'wraps' ) ;
    public final AntlrDatatypeRuleToken ruleFeatureCallID() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_ValidID_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:3574:2: ( (this_ValidID_0= ruleValidID | kw= 'abstract' | kw= 'annotation' | kw= 'as' | kw= 'class' | kw= 'container' | kw= 'contains' | kw= 'convert' | kw= 'create' | kw= 'derived' | kw= 'enum' | kw= 'extends' | kw= 'extension' | kw= 'id' | kw= 'import' | kw= 'keys' | kw= 'interface' | kw= 'local' | kw= 'op' | kw= 'opposite' | kw= 'package' | kw= 'readonly' | kw= 'refers' | kw= 'resolving' | kw= 'static' | kw= 'throws' | kw= 'transient' | kw= 'unique' | kw= 'unordered' | kw= 'unsettable' | kw= 'volatile' | kw= 'wraps' ) )
            // InternalXcore.g:3575:2: (this_ValidID_0= ruleValidID | kw= 'abstract' | kw= 'annotation' | kw= 'as' | kw= 'class' | kw= 'container' | kw= 'contains' | kw= 'convert' | kw= 'create' | kw= 'derived' | kw= 'enum' | kw= 'extends' | kw= 'extension' | kw= 'id' | kw= 'import' | kw= 'keys' | kw= 'interface' | kw= 'local' | kw= 'op' | kw= 'opposite' | kw= 'package' | kw= 'readonly' | kw= 'refers' | kw= 'resolving' | kw= 'static' | kw= 'throws' | kw= 'transient' | kw= 'unique' | kw= 'unordered' | kw= 'unsettable' | kw= 'volatile' | kw= 'wraps' )
            {
            // InternalXcore.g:3575:2: (this_ValidID_0= ruleValidID | kw= 'abstract' | kw= 'annotation' | kw= 'as' | kw= 'class' | kw= 'container' | kw= 'contains' | kw= 'convert' | kw= 'create' | kw= 'derived' | kw= 'enum' | kw= 'extends' | kw= 'extension' | kw= 'id' | kw= 'import' | kw= 'keys' | kw= 'interface' | kw= 'local' | kw= 'op' | kw= 'opposite' | kw= 'package' | kw= 'readonly' | kw= 'refers' | kw= 'resolving' | kw= 'static' | kw= 'throws' | kw= 'transient' | kw= 'unique' | kw= 'unordered' | kw= 'unsettable' | kw= 'volatile' | kw= 'wraps' )
            int alt80=32;
            switch ( input.LA(1) ) {
            case RULE_ID:
            case 44:
            case 45:
            case 46:
            case 47:
            case 56:
                {
                alt80=1;
                }
                break;
            case 32:
                {
                alt80=2;
                }
                break;
            case 20:
                {
                alt80=3;
                }
                break;
            case 21:
                {
                alt80=4;
                }
                break;
            case 33:
                {
                alt80=5;
                }
                break;
            case 50:
                {
                alt80=6;
                }
                break;
            case 48:
                {
                alt80=7;
                }
                break;
            case 27:
                {
                alt80=8;
                }
                break;
            case 26:
                {
                alt80=9;
                }
                break;
            case 42:
                {
                alt80=10;
                }
                break;
            case 28:
                {
                alt80=11;
                }
                break;
            case 35:
                {
                alt80=12;
                }
                break;
            case 68:
                {
                alt80=13;
                }
                break;
            case 43:
                {
                alt80=14;
                }
                break;
            case 19:
                {
                alt80=15;
                }
                break;
            case 54:
                {
                alt80=16;
                }
                break;
            case 34:
                {
                alt80=17;
                }
                break;
            case 52:
                {
                alt80=18;
                }
                break;
            case 55:
                {
                alt80=19;
                }
                break;
            case 53:
                {
                alt80=20;
                }
                break;
            case 13:
                {
                alt80=21;
                }
                break;
            case 38:
                {
                alt80=22;
                }
                break;
            case 51:
                {
                alt80=23;
                }
                break;
            case 49:
                {
                alt80=24;
                }
                break;
            case 69:
                {
                alt80=25;
                }
                break;
            case 57:
                {
                alt80=26;
                }
                break;
            case 39:
                {
                alt80=27;
                }
                break;
            case 37:
                {
                alt80=28;
                }
                break;
            case 36:
                {
                alt80=29;
                }
                break;
            case 41:
                {
                alt80=30;
                }
                break;
            case 40:
                {
                alt80=31;
                }
                break;
            case 25:
                {
                alt80=32;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 80, 0, input);

                throw nvae;
            }

            switch (alt80) {
                case 1 :
                    // InternalXcore.g:3576:3: this_ValidID_0= ruleValidID
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getFeatureCallIDAccess().getValidIDParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_ValidID_0=ruleValidID();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(this_ValidID_0);
                      		
                    }
                    if ( state.backtracking==0 ) {

                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:3587:3: kw= 'abstract'
                    {
                    kw=(Token)match(input,32,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getAbstractKeyword_1());
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalXcore.g:3593:3: kw= 'annotation'
                    {
                    kw=(Token)match(input,20,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getAnnotationKeyword_2());
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalXcore.g:3599:3: kw= 'as'
                    {
                    kw=(Token)match(input,21,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getAsKeyword_3());
                      		
                    }

                    }
                    break;
                case 5 :
                    // InternalXcore.g:3605:3: kw= 'class'
                    {
                    kw=(Token)match(input,33,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getClassKeyword_4());
                      		
                    }

                    }
                    break;
                case 6 :
                    // InternalXcore.g:3611:3: kw= 'container'
                    {
                    kw=(Token)match(input,50,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getContainerKeyword_5());
                      		
                    }

                    }
                    break;
                case 7 :
                    // InternalXcore.g:3617:3: kw= 'contains'
                    {
                    kw=(Token)match(input,48,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getContainsKeyword_6());
                      		
                    }

                    }
                    break;
                case 8 :
                    // InternalXcore.g:3623:3: kw= 'convert'
                    {
                    kw=(Token)match(input,27,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getConvertKeyword_7());
                      		
                    }

                    }
                    break;
                case 9 :
                    // InternalXcore.g:3629:3: kw= 'create'
                    {
                    kw=(Token)match(input,26,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getCreateKeyword_8());
                      		
                    }

                    }
                    break;
                case 10 :
                    // InternalXcore.g:3635:3: kw= 'derived'
                    {
                    kw=(Token)match(input,42,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getDerivedKeyword_9());
                      		
                    }

                    }
                    break;
                case 11 :
                    // InternalXcore.g:3641:3: kw= 'enum'
                    {
                    kw=(Token)match(input,28,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getEnumKeyword_10());
                      		
                    }

                    }
                    break;
                case 12 :
                    // InternalXcore.g:3647:3: kw= 'extends'
                    {
                    kw=(Token)match(input,35,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getExtendsKeyword_11());
                      		
                    }

                    }
                    break;
                case 13 :
                    // InternalXcore.g:3653:3: kw= 'extension'
                    {
                    kw=(Token)match(input,68,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getExtensionKeyword_12());
                      		
                    }

                    }
                    break;
                case 14 :
                    // InternalXcore.g:3659:3: kw= 'id'
                    {
                    kw=(Token)match(input,43,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getIdKeyword_13());
                      		
                    }

                    }
                    break;
                case 15 :
                    // InternalXcore.g:3665:3: kw= 'import'
                    {
                    kw=(Token)match(input,19,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getImportKeyword_14());
                      		
                    }

                    }
                    break;
                case 16 :
                    // InternalXcore.g:3671:3: kw= 'keys'
                    {
                    kw=(Token)match(input,54,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getKeysKeyword_15());
                      		
                    }

                    }
                    break;
                case 17 :
                    // InternalXcore.g:3677:3: kw= 'interface'
                    {
                    kw=(Token)match(input,34,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getInterfaceKeyword_16());
                      		
                    }

                    }
                    break;
                case 18 :
                    // InternalXcore.g:3683:3: kw= 'local'
                    {
                    kw=(Token)match(input,52,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getLocalKeyword_17());
                      		
                    }

                    }
                    break;
                case 19 :
                    // InternalXcore.g:3689:3: kw= 'op'
                    {
                    kw=(Token)match(input,55,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getOpKeyword_18());
                      		
                    }

                    }
                    break;
                case 20 :
                    // InternalXcore.g:3695:3: kw= 'opposite'
                    {
                    kw=(Token)match(input,53,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getOppositeKeyword_19());
                      		
                    }

                    }
                    break;
                case 21 :
                    // InternalXcore.g:3701:3: kw= 'package'
                    {
                    kw=(Token)match(input,13,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getPackageKeyword_20());
                      		
                    }

                    }
                    break;
                case 22 :
                    // InternalXcore.g:3707:3: kw= 'readonly'
                    {
                    kw=(Token)match(input,38,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getReadonlyKeyword_21());
                      		
                    }

                    }
                    break;
                case 23 :
                    // InternalXcore.g:3713:3: kw= 'refers'
                    {
                    kw=(Token)match(input,51,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getRefersKeyword_22());
                      		
                    }

                    }
                    break;
                case 24 :
                    // InternalXcore.g:3719:3: kw= 'resolving'
                    {
                    kw=(Token)match(input,49,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getResolvingKeyword_23());
                      		
                    }

                    }
                    break;
                case 25 :
                    // InternalXcore.g:3725:3: kw= 'static'
                    {
                    kw=(Token)match(input,69,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getStaticKeyword_24());
                      		
                    }

                    }
                    break;
                case 26 :
                    // InternalXcore.g:3731:3: kw= 'throws'
                    {
                    kw=(Token)match(input,57,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getThrowsKeyword_25());
                      		
                    }

                    }
                    break;
                case 27 :
                    // InternalXcore.g:3737:3: kw= 'transient'
                    {
                    kw=(Token)match(input,39,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getTransientKeyword_26());
                      		
                    }

                    }
                    break;
                case 28 :
                    // InternalXcore.g:3743:3: kw= 'unique'
                    {
                    kw=(Token)match(input,37,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getUniqueKeyword_27());
                      		
                    }

                    }
                    break;
                case 29 :
                    // InternalXcore.g:3749:3: kw= 'unordered'
                    {
                    kw=(Token)match(input,36,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getUnorderedKeyword_28());
                      		
                    }

                    }
                    break;
                case 30 :
                    // InternalXcore.g:3755:3: kw= 'unsettable'
                    {
                    kw=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getUnsettableKeyword_29());
                      		
                    }

                    }
                    break;
                case 31 :
                    // InternalXcore.g:3761:3: kw= 'volatile'
                    {
                    kw=(Token)match(input,40,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getVolatileKeyword_30());
                      		
                    }

                    }
                    break;
                case 32 :
                    // InternalXcore.g:3767:3: kw= 'wraps'
                    {
                    kw=(Token)match(input,25,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getFeatureCallIDAccess().getWrapsKeyword_31());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleFeatureCallID"


    // $ANTLR start "entryRuleXExpression"
    // InternalXcore.g:3776:1: entryRuleXExpression returns [EObject current=null] : iv_ruleXExpression= ruleXExpression EOF ;
    public final EObject entryRuleXExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXExpression = null;


        try {
            // InternalXcore.g:3776:52: (iv_ruleXExpression= ruleXExpression EOF )
            // InternalXcore.g:3777:2: iv_ruleXExpression= ruleXExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXExpression=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXExpression"


    // $ANTLR start "ruleXExpression"
    // InternalXcore.g:3783:1: ruleXExpression returns [EObject current=null] : this_XAssignment_0= ruleXAssignment ;
    public final EObject ruleXExpression() throws RecognitionException {
        EObject current = null;

        EObject this_XAssignment_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:3789:2: (this_XAssignment_0= ruleXAssignment )
            // InternalXcore.g:3790:2: this_XAssignment_0= ruleXAssignment
            {
            if ( state.backtracking==0 ) {

              		newCompositeNode(grammarAccess.getXExpressionAccess().getXAssignmentParserRuleCall());
              	
            }
            pushFollow(FOLLOW_2);
            this_XAssignment_0=ruleXAssignment();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		current = this_XAssignment_0;
              		afterParserOrEnumRuleCall();
              	
            }

            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXExpression"


    // $ANTLR start "entryRuleXAssignment"
    // InternalXcore.g:3801:1: entryRuleXAssignment returns [EObject current=null] : iv_ruleXAssignment= ruleXAssignment EOF ;
    public final EObject entryRuleXAssignment() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXAssignment = null;


        try {
            // InternalXcore.g:3801:52: (iv_ruleXAssignment= ruleXAssignment EOF )
            // InternalXcore.g:3802:2: iv_ruleXAssignment= ruleXAssignment EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXAssignmentRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXAssignment=ruleXAssignment();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXAssignment; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXAssignment"


    // $ANTLR start "ruleXAssignment"
    // InternalXcore.g:3808:1: ruleXAssignment returns [EObject current=null] : ( ( () ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) ) ) | (this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )? ) ) ;
    public final EObject ruleXAssignment() throws RecognitionException {
        EObject current = null;

        EObject lv_value_3_0 = null;

        EObject this_XOrExpression_4 = null;

        EObject lv_rightOperand_7_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:3814:2: ( ( ( () ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) ) ) | (this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )? ) ) )
            // InternalXcore.g:3815:2: ( ( () ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) ) ) | (this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )? ) )
            {
            // InternalXcore.g:3815:2: ( ( () ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) ) ) | (this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )? ) )
            int alt82=2;
            alt82 = dfa82.predict(input);
            switch (alt82) {
                case 1 :
                    // InternalXcore.g:3816:3: ( () ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) ) )
                    {
                    // InternalXcore.g:3816:3: ( () ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) ) )
                    // InternalXcore.g:3817:4: () ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) )
                    {
                    // InternalXcore.g:3817:4: ()
                    // InternalXcore.g:3818:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getXAssignmentAccess().getXAssignmentAction_0_0(),
                      						current);
                      				
                    }

                    }

                    // InternalXcore.g:3824:4: ( ( ruleFeatureCallID ) )
                    // InternalXcore.g:3825:5: ( ruleFeatureCallID )
                    {
                    // InternalXcore.g:3825:5: ( ruleFeatureCallID )
                    // InternalXcore.g:3826:6: ruleFeatureCallID
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getXAssignmentRule());
                      						}
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXAssignmentAccess().getFeatureJvmIdentifiableElementCrossReference_0_1_0());
                      					
                    }
                    pushFollow(FOLLOW_11);
                    ruleFeatureCallID();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    if ( state.backtracking==0 ) {

                      				newCompositeNode(grammarAccess.getXAssignmentAccess().getOpSingleAssignParserRuleCall_0_2());
                      			
                    }
                    pushFollow(FOLLOW_75);
                    ruleOpSingleAssign();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				afterParserOrEnumRuleCall();
                      			
                    }
                    // InternalXcore.g:3847:4: ( (lv_value_3_0= ruleXAssignment ) )
                    // InternalXcore.g:3848:5: (lv_value_3_0= ruleXAssignment )
                    {
                    // InternalXcore.g:3848:5: (lv_value_3_0= ruleXAssignment )
                    // InternalXcore.g:3849:6: lv_value_3_0= ruleXAssignment
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXAssignmentAccess().getValueXAssignmentParserRuleCall_0_3_0());
                      					
                    }
                    pushFollow(FOLLOW_2);
                    lv_value_3_0=ruleXAssignment();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXAssignmentRule());
                      						}
                      						set(
                      							current,
                      							"value",
                      							lv_value_3_0,
                      							"org.eclipse.xtext.xbase.Xbase.XAssignment");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:3868:3: (this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )? )
                    {
                    // InternalXcore.g:3868:3: (this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )? )
                    // InternalXcore.g:3869:4: this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )?
                    {
                    if ( state.backtracking==0 ) {

                      				newCompositeNode(grammarAccess.getXAssignmentAccess().getXOrExpressionParserRuleCall_1_0());
                      			
                    }
                    pushFollow(FOLLOW_76);
                    this_XOrExpression_4=ruleXOrExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = this_XOrExpression_4;
                      				afterParserOrEnumRuleCall();
                      			
                    }
                    // InternalXcore.g:3877:4: ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )?
                    int alt81=2;
                    alt81 = dfa81.predict(input);
                    switch (alt81) {
                        case 1 :
                            // InternalXcore.g:3878:5: ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) )
                            {
                            // InternalXcore.g:3878:5: ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) )
                            // InternalXcore.g:3879:6: ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) )
                            {
                            // InternalXcore.g:3889:6: ( () ( ( ruleOpMultiAssign ) ) )
                            // InternalXcore.g:3890:7: () ( ( ruleOpMultiAssign ) )
                            {
                            // InternalXcore.g:3890:7: ()
                            // InternalXcore.g:3891:8: 
                            {
                            if ( state.backtracking==0 ) {

                              								current = forceCreateModelElementAndSet(
                              									grammarAccess.getXAssignmentAccess().getXBinaryOperationLeftOperandAction_1_1_0_0_0(),
                              									current);
                              							
                            }

                            }

                            // InternalXcore.g:3897:7: ( ( ruleOpMultiAssign ) )
                            // InternalXcore.g:3898:8: ( ruleOpMultiAssign )
                            {
                            // InternalXcore.g:3898:8: ( ruleOpMultiAssign )
                            // InternalXcore.g:3899:9: ruleOpMultiAssign
                            {
                            if ( state.backtracking==0 ) {

                              									if (current==null) {
                              										current = createModelElement(grammarAccess.getXAssignmentRule());
                              									}
                              								
                            }
                            if ( state.backtracking==0 ) {

                              									newCompositeNode(grammarAccess.getXAssignmentAccess().getFeatureJvmIdentifiableElementCrossReference_1_1_0_0_1_0());
                              								
                            }
                            pushFollow(FOLLOW_75);
                            ruleOpMultiAssign();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              									afterParserOrEnumRuleCall();
                              								
                            }

                            }


                            }


                            }


                            }

                            // InternalXcore.g:3915:5: ( (lv_rightOperand_7_0= ruleXAssignment ) )
                            // InternalXcore.g:3916:6: (lv_rightOperand_7_0= ruleXAssignment )
                            {
                            // InternalXcore.g:3916:6: (lv_rightOperand_7_0= ruleXAssignment )
                            // InternalXcore.g:3917:7: lv_rightOperand_7_0= ruleXAssignment
                            {
                            if ( state.backtracking==0 ) {

                              							newCompositeNode(grammarAccess.getXAssignmentAccess().getRightOperandXAssignmentParserRuleCall_1_1_1_0());
                              						
                            }
                            pushFollow(FOLLOW_2);
                            lv_rightOperand_7_0=ruleXAssignment();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElementForParent(grammarAccess.getXAssignmentRule());
                              							}
                              							set(
                              								current,
                              								"rightOperand",
                              								lv_rightOperand_7_0,
                              								"org.eclipse.xtext.xbase.Xbase.XAssignment");
                              							afterParserOrEnumRuleCall();
                              						
                            }

                            }


                            }


                            }
                            break;

                    }


                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXAssignment"


    // $ANTLR start "entryRuleOpSingleAssign"
    // InternalXcore.g:3940:1: entryRuleOpSingleAssign returns [String current=null] : iv_ruleOpSingleAssign= ruleOpSingleAssign EOF ;
    public final String entryRuleOpSingleAssign() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpSingleAssign = null;


        try {
            // InternalXcore.g:3940:54: (iv_ruleOpSingleAssign= ruleOpSingleAssign EOF )
            // InternalXcore.g:3941:2: iv_ruleOpSingleAssign= ruleOpSingleAssign EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpSingleAssignRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleOpSingleAssign=ruleOpSingleAssign();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpSingleAssign.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpSingleAssign"


    // $ANTLR start "ruleOpSingleAssign"
    // InternalXcore.g:3947:1: ruleOpSingleAssign returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : kw= '=' ;
    public final AntlrDatatypeRuleToken ruleOpSingleAssign() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalXcore.g:3953:2: (kw= '=' )
            // InternalXcore.g:3954:2: kw= '='
            {
            kw=(Token)match(input,18,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		current.merge(kw);
              		newLeafNode(kw, grammarAccess.getOpSingleAssignAccess().getEqualsSignKeyword());
              	
            }

            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpSingleAssign"


    // $ANTLR start "entryRuleOpMultiAssign"
    // InternalXcore.g:3962:1: entryRuleOpMultiAssign returns [String current=null] : iv_ruleOpMultiAssign= ruleOpMultiAssign EOF ;
    public final String entryRuleOpMultiAssign() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpMultiAssign = null;


        try {
            // InternalXcore.g:3962:53: (iv_ruleOpMultiAssign= ruleOpMultiAssign EOF )
            // InternalXcore.g:3963:2: iv_ruleOpMultiAssign= ruleOpMultiAssign EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpMultiAssignRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleOpMultiAssign=ruleOpMultiAssign();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpMultiAssign.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpMultiAssign"


    // $ANTLR start "ruleOpMultiAssign"
    // InternalXcore.g:3969:1: ruleOpMultiAssign returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '+=' | kw= '-=' | kw= '*=' | kw= '/=' | kw= '%=' | (kw= '<' kw= '<' kw= '=' ) | (kw= '>' (kw= '>' )? kw= '>=' ) ) ;
    public final AntlrDatatypeRuleToken ruleOpMultiAssign() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalXcore.g:3975:2: ( (kw= '+=' | kw= '-=' | kw= '*=' | kw= '/=' | kw= '%=' | (kw= '<' kw= '<' kw= '=' ) | (kw= '>' (kw= '>' )? kw= '>=' ) ) )
            // InternalXcore.g:3976:2: (kw= '+=' | kw= '-=' | kw= '*=' | kw= '/=' | kw= '%=' | (kw= '<' kw= '<' kw= '=' ) | (kw= '>' (kw= '>' )? kw= '>=' ) )
            {
            // InternalXcore.g:3976:2: (kw= '+=' | kw= '-=' | kw= '*=' | kw= '/=' | kw= '%=' | (kw= '<' kw= '<' kw= '=' ) | (kw= '>' (kw= '>' )? kw= '>=' ) )
            int alt84=7;
            switch ( input.LA(1) ) {
            case 70:
                {
                alt84=1;
                }
                break;
            case 71:
                {
                alt84=2;
                }
                break;
            case 72:
                {
                alt84=3;
                }
                break;
            case 73:
                {
                alt84=4;
                }
                break;
            case 74:
                {
                alt84=5;
                }
                break;
            case 23:
                {
                alt84=6;
                }
                break;
            case 24:
                {
                alt84=7;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 84, 0, input);

                throw nvae;
            }

            switch (alt84) {
                case 1 :
                    // InternalXcore.g:3977:3: kw= '+='
                    {
                    kw=(Token)match(input,70,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getPlusSignEqualsSignKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:3983:3: kw= '-='
                    {
                    kw=(Token)match(input,71,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getHyphenMinusEqualsSignKeyword_1());
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalXcore.g:3989:3: kw= '*='
                    {
                    kw=(Token)match(input,72,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getAsteriskEqualsSignKeyword_2());
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalXcore.g:3995:3: kw= '/='
                    {
                    kw=(Token)match(input,73,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getSolidusEqualsSignKeyword_3());
                      		
                    }

                    }
                    break;
                case 5 :
                    // InternalXcore.g:4001:3: kw= '%='
                    {
                    kw=(Token)match(input,74,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getPercentSignEqualsSignKeyword_4());
                      		
                    }

                    }
                    break;
                case 6 :
                    // InternalXcore.g:4007:3: (kw= '<' kw= '<' kw= '=' )
                    {
                    // InternalXcore.g:4007:3: (kw= '<' kw= '<' kw= '=' )
                    // InternalXcore.g:4008:4: kw= '<' kw= '<' kw= '='
                    {
                    kw=(Token)match(input,23,FOLLOW_77); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getLessThanSignKeyword_5_0());
                      			
                    }
                    kw=(Token)match(input,23,FOLLOW_11); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getLessThanSignKeyword_5_1());
                      			
                    }
                    kw=(Token)match(input,18,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getEqualsSignKeyword_5_2());
                      			
                    }

                    }


                    }
                    break;
                case 7 :
                    // InternalXcore.g:4025:3: (kw= '>' (kw= '>' )? kw= '>=' )
                    {
                    // InternalXcore.g:4025:3: (kw= '>' (kw= '>' )? kw= '>=' )
                    // InternalXcore.g:4026:4: kw= '>' (kw= '>' )? kw= '>='
                    {
                    kw=(Token)match(input,24,FOLLOW_78); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getGreaterThanSignKeyword_6_0());
                      			
                    }
                    // InternalXcore.g:4031:4: (kw= '>' )?
                    int alt83=2;
                    int LA83_0 = input.LA(1);

                    if ( (LA83_0==24) ) {
                        alt83=1;
                    }
                    switch (alt83) {
                        case 1 :
                            // InternalXcore.g:4032:5: kw= '>'
                            {
                            kw=(Token)match(input,24,FOLLOW_79); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					current.merge(kw);
                              					newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getGreaterThanSignKeyword_6_1());
                              				
                            }

                            }
                            break;

                    }

                    kw=(Token)match(input,75,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getGreaterThanSignEqualsSignKeyword_6_2());
                      			
                    }

                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpMultiAssign"


    // $ANTLR start "entryRuleXOrExpression"
    // InternalXcore.g:4048:1: entryRuleXOrExpression returns [EObject current=null] : iv_ruleXOrExpression= ruleXOrExpression EOF ;
    public final EObject entryRuleXOrExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXOrExpression = null;


        try {
            // InternalXcore.g:4048:54: (iv_ruleXOrExpression= ruleXOrExpression EOF )
            // InternalXcore.g:4049:2: iv_ruleXOrExpression= ruleXOrExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXOrExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXOrExpression=ruleXOrExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXOrExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXOrExpression"


    // $ANTLR start "ruleXOrExpression"
    // InternalXcore.g:4055:1: ruleXOrExpression returns [EObject current=null] : (this_XAndExpression_0= ruleXAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) ) )* ) ;
    public final EObject ruleXOrExpression() throws RecognitionException {
        EObject current = null;

        EObject this_XAndExpression_0 = null;

        EObject lv_rightOperand_3_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:4061:2: ( (this_XAndExpression_0= ruleXAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) ) )* ) )
            // InternalXcore.g:4062:2: (this_XAndExpression_0= ruleXAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) ) )* )
            {
            // InternalXcore.g:4062:2: (this_XAndExpression_0= ruleXAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) ) )* )
            // InternalXcore.g:4063:3: this_XAndExpression_0= ruleXAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getXOrExpressionAccess().getXAndExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_80);
            this_XAndExpression_0=ruleXAndExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_XAndExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalXcore.g:4071:3: ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) ) )*
            loop85:
            do {
                int alt85=2;
                int LA85_0 = input.LA(1);

                if ( (LA85_0==76) ) {
                    int LA85_2 = input.LA(2);

                    if ( (synpred5_InternalXcore()) ) {
                        alt85=1;
                    }


                }


                switch (alt85) {
            	case 1 :
            	    // InternalXcore.g:4072:4: ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) )
            	    {
            	    // InternalXcore.g:4072:4: ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) )
            	    // InternalXcore.g:4073:5: ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) )
            	    {
            	    // InternalXcore.g:4083:5: ( () ( ( ruleOpOr ) ) )
            	    // InternalXcore.g:4084:6: () ( ( ruleOpOr ) )
            	    {
            	    // InternalXcore.g:4084:6: ()
            	    // InternalXcore.g:4085:7: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      							current = forceCreateModelElementAndSet(
            	      								grammarAccess.getXOrExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	      								current);
            	      						
            	    }

            	    }

            	    // InternalXcore.g:4091:6: ( ( ruleOpOr ) )
            	    // InternalXcore.g:4092:7: ( ruleOpOr )
            	    {
            	    // InternalXcore.g:4092:7: ( ruleOpOr )
            	    // InternalXcore.g:4093:8: ruleOpOr
            	    {
            	    if ( state.backtracking==0 ) {

            	      								if (current==null) {
            	      									current = createModelElement(grammarAccess.getXOrExpressionRule());
            	      								}
            	      							
            	    }
            	    if ( state.backtracking==0 ) {

            	      								newCompositeNode(grammarAccess.getXOrExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0());
            	      							
            	    }
            	    pushFollow(FOLLOW_75);
            	    ruleOpOr();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      								afterParserOrEnumRuleCall();
            	      							
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // InternalXcore.g:4109:4: ( (lv_rightOperand_3_0= ruleXAndExpression ) )
            	    // InternalXcore.g:4110:5: (lv_rightOperand_3_0= ruleXAndExpression )
            	    {
            	    // InternalXcore.g:4110:5: (lv_rightOperand_3_0= ruleXAndExpression )
            	    // InternalXcore.g:4111:6: lv_rightOperand_3_0= ruleXAndExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getXOrExpressionAccess().getRightOperandXAndExpressionParserRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_80);
            	    lv_rightOperand_3_0=ruleXAndExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getXOrExpressionRule());
            	      						}
            	      						set(
            	      							current,
            	      							"rightOperand",
            	      							lv_rightOperand_3_0,
            	      							"org.eclipse.xtext.xbase.Xbase.XAndExpression");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXOrExpression"


    // $ANTLR start "entryRuleOpOr"
    // InternalXcore.g:4133:1: entryRuleOpOr returns [String current=null] : iv_ruleOpOr= ruleOpOr EOF ;
    public final String entryRuleOpOr() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpOr = null;


        try {
            // InternalXcore.g:4133:44: (iv_ruleOpOr= ruleOpOr EOF )
            // InternalXcore.g:4134:2: iv_ruleOpOr= ruleOpOr EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpOrRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleOpOr=ruleOpOr();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpOr.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpOr"


    // $ANTLR start "ruleOpOr"
    // InternalXcore.g:4140:1: ruleOpOr returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : kw= '||' ;
    public final AntlrDatatypeRuleToken ruleOpOr() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalXcore.g:4146:2: (kw= '||' )
            // InternalXcore.g:4147:2: kw= '||'
            {
            kw=(Token)match(input,76,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		current.merge(kw);
              		newLeafNode(kw, grammarAccess.getOpOrAccess().getVerticalLineVerticalLineKeyword());
              	
            }

            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpOr"


    // $ANTLR start "entryRuleXAndExpression"
    // InternalXcore.g:4155:1: entryRuleXAndExpression returns [EObject current=null] : iv_ruleXAndExpression= ruleXAndExpression EOF ;
    public final EObject entryRuleXAndExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXAndExpression = null;


        try {
            // InternalXcore.g:4155:55: (iv_ruleXAndExpression= ruleXAndExpression EOF )
            // InternalXcore.g:4156:2: iv_ruleXAndExpression= ruleXAndExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXAndExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXAndExpression=ruleXAndExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXAndExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXAndExpression"


    // $ANTLR start "ruleXAndExpression"
    // InternalXcore.g:4162:1: ruleXAndExpression returns [EObject current=null] : (this_XEqualityExpression_0= ruleXEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) ) )* ) ;
    public final EObject ruleXAndExpression() throws RecognitionException {
        EObject current = null;

        EObject this_XEqualityExpression_0 = null;

        EObject lv_rightOperand_3_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:4168:2: ( (this_XEqualityExpression_0= ruleXEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) ) )* ) )
            // InternalXcore.g:4169:2: (this_XEqualityExpression_0= ruleXEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) ) )* )
            {
            // InternalXcore.g:4169:2: (this_XEqualityExpression_0= ruleXEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) ) )* )
            // InternalXcore.g:4170:3: this_XEqualityExpression_0= ruleXEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getXAndExpressionAccess().getXEqualityExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_81);
            this_XEqualityExpression_0=ruleXEqualityExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_XEqualityExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalXcore.g:4178:3: ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) ) )*
            loop86:
            do {
                int alt86=2;
                int LA86_0 = input.LA(1);

                if ( (LA86_0==77) ) {
                    int LA86_2 = input.LA(2);

                    if ( (synpred6_InternalXcore()) ) {
                        alt86=1;
                    }


                }


                switch (alt86) {
            	case 1 :
            	    // InternalXcore.g:4179:4: ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) )
            	    {
            	    // InternalXcore.g:4179:4: ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) )
            	    // InternalXcore.g:4180:5: ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) )
            	    {
            	    // InternalXcore.g:4190:5: ( () ( ( ruleOpAnd ) ) )
            	    // InternalXcore.g:4191:6: () ( ( ruleOpAnd ) )
            	    {
            	    // InternalXcore.g:4191:6: ()
            	    // InternalXcore.g:4192:7: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      							current = forceCreateModelElementAndSet(
            	      								grammarAccess.getXAndExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	      								current);
            	      						
            	    }

            	    }

            	    // InternalXcore.g:4198:6: ( ( ruleOpAnd ) )
            	    // InternalXcore.g:4199:7: ( ruleOpAnd )
            	    {
            	    // InternalXcore.g:4199:7: ( ruleOpAnd )
            	    // InternalXcore.g:4200:8: ruleOpAnd
            	    {
            	    if ( state.backtracking==0 ) {

            	      								if (current==null) {
            	      									current = createModelElement(grammarAccess.getXAndExpressionRule());
            	      								}
            	      							
            	    }
            	    if ( state.backtracking==0 ) {

            	      								newCompositeNode(grammarAccess.getXAndExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0());
            	      							
            	    }
            	    pushFollow(FOLLOW_75);
            	    ruleOpAnd();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      								afterParserOrEnumRuleCall();
            	      							
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // InternalXcore.g:4216:4: ( (lv_rightOperand_3_0= ruleXEqualityExpression ) )
            	    // InternalXcore.g:4217:5: (lv_rightOperand_3_0= ruleXEqualityExpression )
            	    {
            	    // InternalXcore.g:4217:5: (lv_rightOperand_3_0= ruleXEqualityExpression )
            	    // InternalXcore.g:4218:6: lv_rightOperand_3_0= ruleXEqualityExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getXAndExpressionAccess().getRightOperandXEqualityExpressionParserRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_81);
            	    lv_rightOperand_3_0=ruleXEqualityExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getXAndExpressionRule());
            	      						}
            	      						set(
            	      							current,
            	      							"rightOperand",
            	      							lv_rightOperand_3_0,
            	      							"org.eclipse.xtext.xbase.Xbase.XEqualityExpression");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXAndExpression"


    // $ANTLR start "entryRuleOpAnd"
    // InternalXcore.g:4240:1: entryRuleOpAnd returns [String current=null] : iv_ruleOpAnd= ruleOpAnd EOF ;
    public final String entryRuleOpAnd() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpAnd = null;


        try {
            // InternalXcore.g:4240:45: (iv_ruleOpAnd= ruleOpAnd EOF )
            // InternalXcore.g:4241:2: iv_ruleOpAnd= ruleOpAnd EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpAndRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleOpAnd=ruleOpAnd();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpAnd.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpAnd"


    // $ANTLR start "ruleOpAnd"
    // InternalXcore.g:4247:1: ruleOpAnd returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : kw= '&&' ;
    public final AntlrDatatypeRuleToken ruleOpAnd() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalXcore.g:4253:2: (kw= '&&' )
            // InternalXcore.g:4254:2: kw= '&&'
            {
            kw=(Token)match(input,77,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              		current.merge(kw);
              		newLeafNode(kw, grammarAccess.getOpAndAccess().getAmpersandAmpersandKeyword());
              	
            }

            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpAnd"


    // $ANTLR start "entryRuleXEqualityExpression"
    // InternalXcore.g:4262:1: entryRuleXEqualityExpression returns [EObject current=null] : iv_ruleXEqualityExpression= ruleXEqualityExpression EOF ;
    public final EObject entryRuleXEqualityExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXEqualityExpression = null;


        try {
            // InternalXcore.g:4262:60: (iv_ruleXEqualityExpression= ruleXEqualityExpression EOF )
            // InternalXcore.g:4263:2: iv_ruleXEqualityExpression= ruleXEqualityExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXEqualityExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXEqualityExpression=ruleXEqualityExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXEqualityExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXEqualityExpression"


    // $ANTLR start "ruleXEqualityExpression"
    // InternalXcore.g:4269:1: ruleXEqualityExpression returns [EObject current=null] : (this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )* ) ;
    public final EObject ruleXEqualityExpression() throws RecognitionException {
        EObject current = null;

        EObject this_XRelationalExpression_0 = null;

        EObject lv_rightOperand_3_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:4275:2: ( (this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )* ) )
            // InternalXcore.g:4276:2: (this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )* )
            {
            // InternalXcore.g:4276:2: (this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )* )
            // InternalXcore.g:4277:3: this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getXEqualityExpressionAccess().getXRelationalExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_82);
            this_XRelationalExpression_0=ruleXRelationalExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_XRelationalExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalXcore.g:4285:3: ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )*
            loop87:
            do {
                int alt87=2;
                switch ( input.LA(1) ) {
                case 78:
                    {
                    int LA87_2 = input.LA(2);

                    if ( (synpred7_InternalXcore()) ) {
                        alt87=1;
                    }


                    }
                    break;
                case 79:
                    {
                    int LA87_3 = input.LA(2);

                    if ( (synpred7_InternalXcore()) ) {
                        alt87=1;
                    }


                    }
                    break;
                case 80:
                    {
                    int LA87_4 = input.LA(2);

                    if ( (synpred7_InternalXcore()) ) {
                        alt87=1;
                    }


                    }
                    break;
                case 81:
                    {
                    int LA87_5 = input.LA(2);

                    if ( (synpred7_InternalXcore()) ) {
                        alt87=1;
                    }


                    }
                    break;

                }

                switch (alt87) {
            	case 1 :
            	    // InternalXcore.g:4286:4: ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) )
            	    {
            	    // InternalXcore.g:4286:4: ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) )
            	    // InternalXcore.g:4287:5: ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) )
            	    {
            	    // InternalXcore.g:4297:5: ( () ( ( ruleOpEquality ) ) )
            	    // InternalXcore.g:4298:6: () ( ( ruleOpEquality ) )
            	    {
            	    // InternalXcore.g:4298:6: ()
            	    // InternalXcore.g:4299:7: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      							current = forceCreateModelElementAndSet(
            	      								grammarAccess.getXEqualityExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	      								current);
            	      						
            	    }

            	    }

            	    // InternalXcore.g:4305:6: ( ( ruleOpEquality ) )
            	    // InternalXcore.g:4306:7: ( ruleOpEquality )
            	    {
            	    // InternalXcore.g:4306:7: ( ruleOpEquality )
            	    // InternalXcore.g:4307:8: ruleOpEquality
            	    {
            	    if ( state.backtracking==0 ) {

            	      								if (current==null) {
            	      									current = createModelElement(grammarAccess.getXEqualityExpressionRule());
            	      								}
            	      							
            	    }
            	    if ( state.backtracking==0 ) {

            	      								newCompositeNode(grammarAccess.getXEqualityExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0());
            	      							
            	    }
            	    pushFollow(FOLLOW_75);
            	    ruleOpEquality();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      								afterParserOrEnumRuleCall();
            	      							
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // InternalXcore.g:4323:4: ( (lv_rightOperand_3_0= ruleXRelationalExpression ) )
            	    // InternalXcore.g:4324:5: (lv_rightOperand_3_0= ruleXRelationalExpression )
            	    {
            	    // InternalXcore.g:4324:5: (lv_rightOperand_3_0= ruleXRelationalExpression )
            	    // InternalXcore.g:4325:6: lv_rightOperand_3_0= ruleXRelationalExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getXEqualityExpressionAccess().getRightOperandXRelationalExpressionParserRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_82);
            	    lv_rightOperand_3_0=ruleXRelationalExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getXEqualityExpressionRule());
            	      						}
            	      						set(
            	      							current,
            	      							"rightOperand",
            	      							lv_rightOperand_3_0,
            	      							"org.eclipse.xtext.xbase.Xbase.XRelationalExpression");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXEqualityExpression"


    // $ANTLR start "entryRuleOpEquality"
    // InternalXcore.g:4347:1: entryRuleOpEquality returns [String current=null] : iv_ruleOpEquality= ruleOpEquality EOF ;
    public final String entryRuleOpEquality() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpEquality = null;


        try {
            // InternalXcore.g:4347:50: (iv_ruleOpEquality= ruleOpEquality EOF )
            // InternalXcore.g:4348:2: iv_ruleOpEquality= ruleOpEquality EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpEqualityRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleOpEquality=ruleOpEquality();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpEquality.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpEquality"


    // $ANTLR start "ruleOpEquality"
    // InternalXcore.g:4354:1: ruleOpEquality returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '==' | kw= '!=' | kw= '===' | kw= '!==' ) ;
    public final AntlrDatatypeRuleToken ruleOpEquality() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalXcore.g:4360:2: ( (kw= '==' | kw= '!=' | kw= '===' | kw= '!==' ) )
            // InternalXcore.g:4361:2: (kw= '==' | kw= '!=' | kw= '===' | kw= '!==' )
            {
            // InternalXcore.g:4361:2: (kw= '==' | kw= '!=' | kw= '===' | kw= '!==' )
            int alt88=4;
            switch ( input.LA(1) ) {
            case 78:
                {
                alt88=1;
                }
                break;
            case 79:
                {
                alt88=2;
                }
                break;
            case 80:
                {
                alt88=3;
                }
                break;
            case 81:
                {
                alt88=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 88, 0, input);

                throw nvae;
            }

            switch (alt88) {
                case 1 :
                    // InternalXcore.g:4362:3: kw= '=='
                    {
                    kw=(Token)match(input,78,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpEqualityAccess().getEqualsSignEqualsSignKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:4368:3: kw= '!='
                    {
                    kw=(Token)match(input,79,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpEqualityAccess().getExclamationMarkEqualsSignKeyword_1());
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalXcore.g:4374:3: kw= '==='
                    {
                    kw=(Token)match(input,80,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpEqualityAccess().getEqualsSignEqualsSignEqualsSignKeyword_2());
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalXcore.g:4380:3: kw= '!=='
                    {
                    kw=(Token)match(input,81,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpEqualityAccess().getExclamationMarkEqualsSignEqualsSignKeyword_3());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpEquality"


    // $ANTLR start "entryRuleXRelationalExpression"
    // InternalXcore.g:4389:1: entryRuleXRelationalExpression returns [EObject current=null] : iv_ruleXRelationalExpression= ruleXRelationalExpression EOF ;
    public final EObject entryRuleXRelationalExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXRelationalExpression = null;


        try {
            // InternalXcore.g:4389:62: (iv_ruleXRelationalExpression= ruleXRelationalExpression EOF )
            // InternalXcore.g:4390:2: iv_ruleXRelationalExpression= ruleXRelationalExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXRelationalExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXRelationalExpression=ruleXRelationalExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXRelationalExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXRelationalExpression"


    // $ANTLR start "ruleXRelationalExpression"
    // InternalXcore.g:4396:1: ruleXRelationalExpression returns [EObject current=null] : (this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )* ) ;
    public final EObject ruleXRelationalExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        EObject this_XOtherOperatorExpression_0 = null;

        EObject lv_type_3_0 = null;

        EObject lv_rightOperand_6_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:4402:2: ( (this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )* ) )
            // InternalXcore.g:4403:2: (this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )* )
            {
            // InternalXcore.g:4403:2: (this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )* )
            // InternalXcore.g:4404:3: this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getXOtherOperatorExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_83);
            this_XOtherOperatorExpression_0=ruleXOtherOperatorExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_XOtherOperatorExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalXcore.g:4412:3: ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )*
            loop89:
            do {
                int alt89=3;
                switch ( input.LA(1) ) {
                case 23:
                    {
                    int LA89_2 = input.LA(2);

                    if ( (synpred9_InternalXcore()) ) {
                        alt89=2;
                    }


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

                    if ( (synpred9_InternalXcore()) ) {
                        alt89=2;
                    }


                    }
                    break;
                case 82:
                    {
                    int LA89_4 = input.LA(2);

                    if ( (synpred8_InternalXcore()) ) {
                        alt89=1;
                    }


                    }
                    break;
                case 75:
                    {
                    int LA89_5 = input.LA(2);

                    if ( (synpred9_InternalXcore()) ) {
                        alt89=2;
                    }


                    }
                    break;

                }

                switch (alt89) {
            	case 1 :
            	    // InternalXcore.g:4413:4: ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )
            	    {
            	    // InternalXcore.g:4413:4: ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )
            	    // InternalXcore.g:4414:5: ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) )
            	    {
            	    // InternalXcore.g:4414:5: ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) )
            	    // InternalXcore.g:4415:6: ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' )
            	    {
            	    // InternalXcore.g:4421:6: ( () otherlv_2= 'instanceof' )
            	    // InternalXcore.g:4422:7: () otherlv_2= 'instanceof'
            	    {
            	    // InternalXcore.g:4422:7: ()
            	    // InternalXcore.g:4423:8: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      								current = forceCreateModelElementAndSet(
            	      									grammarAccess.getXRelationalExpressionAccess().getXInstanceOfExpressionExpressionAction_1_0_0_0_0(),
            	      									current);
            	      							
            	    }

            	    }

            	    otherlv_2=(Token)match(input,82,FOLLOW_20); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      							newLeafNode(otherlv_2, grammarAccess.getXRelationalExpressionAccess().getInstanceofKeyword_1_0_0_0_1());
            	      						
            	    }

            	    }


            	    }

            	    // InternalXcore.g:4435:5: ( (lv_type_3_0= ruleJvmTypeReference ) )
            	    // InternalXcore.g:4436:6: (lv_type_3_0= ruleJvmTypeReference )
            	    {
            	    // InternalXcore.g:4436:6: (lv_type_3_0= ruleJvmTypeReference )
            	    // InternalXcore.g:4437:7: lv_type_3_0= ruleJvmTypeReference
            	    {
            	    if ( state.backtracking==0 ) {

            	      							newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getTypeJvmTypeReferenceParserRuleCall_1_0_1_0());
            	      						
            	    }
            	    pushFollow(FOLLOW_83);
            	    lv_type_3_0=ruleJvmTypeReference();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      							if (current==null) {
            	      								current = createModelElementForParent(grammarAccess.getXRelationalExpressionRule());
            	      							}
            	      							set(
            	      								current,
            	      								"type",
            	      								lv_type_3_0,
            	      								"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
            	      							afterParserOrEnumRuleCall();
            	      						
            	    }

            	    }


            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalXcore.g:4456:4: ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) )
            	    {
            	    // InternalXcore.g:4456:4: ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) )
            	    // InternalXcore.g:4457:5: ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) )
            	    {
            	    // InternalXcore.g:4457:5: ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) )
            	    // InternalXcore.g:4458:6: ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) )
            	    {
            	    // InternalXcore.g:4468:6: ( () ( ( ruleOpCompare ) ) )
            	    // InternalXcore.g:4469:7: () ( ( ruleOpCompare ) )
            	    {
            	    // InternalXcore.g:4469:7: ()
            	    // InternalXcore.g:4470:8: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      								current = forceCreateModelElementAndSet(
            	      									grammarAccess.getXRelationalExpressionAccess().getXBinaryOperationLeftOperandAction_1_1_0_0_0(),
            	      									current);
            	      							
            	    }

            	    }

            	    // InternalXcore.g:4476:7: ( ( ruleOpCompare ) )
            	    // InternalXcore.g:4477:8: ( ruleOpCompare )
            	    {
            	    // InternalXcore.g:4477:8: ( ruleOpCompare )
            	    // InternalXcore.g:4478:9: ruleOpCompare
            	    {
            	    if ( state.backtracking==0 ) {

            	      									if (current==null) {
            	      										current = createModelElement(grammarAccess.getXRelationalExpressionRule());
            	      									}
            	      								
            	    }
            	    if ( state.backtracking==0 ) {

            	      									newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_1_0_0_1_0());
            	      								
            	    }
            	    pushFollow(FOLLOW_75);
            	    ruleOpCompare();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									afterParserOrEnumRuleCall();
            	      								
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // InternalXcore.g:4494:5: ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) )
            	    // InternalXcore.g:4495:6: (lv_rightOperand_6_0= ruleXOtherOperatorExpression )
            	    {
            	    // InternalXcore.g:4495:6: (lv_rightOperand_6_0= ruleXOtherOperatorExpression )
            	    // InternalXcore.g:4496:7: lv_rightOperand_6_0= ruleXOtherOperatorExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      							newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getRightOperandXOtherOperatorExpressionParserRuleCall_1_1_1_0());
            	      						
            	    }
            	    pushFollow(FOLLOW_83);
            	    lv_rightOperand_6_0=ruleXOtherOperatorExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      							if (current==null) {
            	      								current = createModelElementForParent(grammarAccess.getXRelationalExpressionRule());
            	      							}
            	      							set(
            	      								current,
            	      								"rightOperand",
            	      								lv_rightOperand_6_0,
            	      								"org.eclipse.xtext.xbase.Xbase.XOtherOperatorExpression");
            	      							afterParserOrEnumRuleCall();
            	      						
            	    }

            	    }


            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXRelationalExpression"


    // $ANTLR start "entryRuleOpCompare"
    // InternalXcore.g:4519:1: entryRuleOpCompare returns [String current=null] : iv_ruleOpCompare= ruleOpCompare EOF ;
    public final String entryRuleOpCompare() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpCompare = null;


        try {
            // InternalXcore.g:4519:49: (iv_ruleOpCompare= ruleOpCompare EOF )
            // InternalXcore.g:4520:2: iv_ruleOpCompare= ruleOpCompare EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpCompareRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleOpCompare=ruleOpCompare();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpCompare.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpCompare"


    // $ANTLR start "ruleOpCompare"
    // InternalXcore.g:4526:1: ruleOpCompare returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '>=' | (kw= '<' kw= '=' ) | kw= '>' | kw= '<' ) ;
    public final AntlrDatatypeRuleToken ruleOpCompare() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalXcore.g:4532:2: ( (kw= '>=' | (kw= '<' kw= '=' ) | kw= '>' | kw= '<' ) )
            // InternalXcore.g:4533:2: (kw= '>=' | (kw= '<' kw= '=' ) | kw= '>' | kw= '<' )
            {
            // InternalXcore.g:4533:2: (kw= '>=' | (kw= '<' kw= '=' ) | kw= '>' | kw= '<' )
            int alt90=4;
            switch ( input.LA(1) ) {
            case 75:
                {
                alt90=1;
                }
                break;
            case 23:
                {
                int LA90_2 = input.LA(2);

                if ( (LA90_2==EOF||(LA90_2>=RULE_STRING && LA90_2<=RULE_DECIMAL)||LA90_2==13||LA90_2==15||(LA90_2>=19 && LA90_2<=21)||LA90_2==23||(LA90_2>=25 && LA90_2<=29)||(LA90_2>=31 && LA90_2<=57)||LA90_2==59||LA90_2==62||LA90_2==66||(LA90_2>=68 && LA90_2<=69)||LA90_2==91||LA90_2==96||LA90_2==98||LA90_2==100||(LA90_2>=104 && LA90_2<=106)||(LA90_2>=109 && LA90_2<=116)||LA90_2==118) ) {
                    alt90=4;
                }
                else if ( (LA90_2==18) ) {
                    alt90=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return current;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 90, 2, input);

                    throw nvae;
                }
                }
                break;
            case 24:
                {
                alt90=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 90, 0, input);

                throw nvae;
            }

            switch (alt90) {
                case 1 :
                    // InternalXcore.g:4534:3: kw= '>='
                    {
                    kw=(Token)match(input,75,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpCompareAccess().getGreaterThanSignEqualsSignKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:4540:3: (kw= '<' kw= '=' )
                    {
                    // InternalXcore.g:4540:3: (kw= '<' kw= '=' )
                    // InternalXcore.g:4541:4: kw= '<' kw= '='
                    {
                    kw=(Token)match(input,23,FOLLOW_11); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getOpCompareAccess().getLessThanSignKeyword_1_0());
                      			
                    }
                    kw=(Token)match(input,18,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getOpCompareAccess().getEqualsSignKeyword_1_1());
                      			
                    }

                    }


                    }
                    break;
                case 3 :
                    // InternalXcore.g:4553:3: kw= '>'
                    {
                    kw=(Token)match(input,24,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpCompareAccess().getGreaterThanSignKeyword_2());
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalXcore.g:4559:3: kw= '<'
                    {
                    kw=(Token)match(input,23,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpCompareAccess().getLessThanSignKeyword_3());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpCompare"


    // $ANTLR start "entryRuleXOtherOperatorExpression"
    // InternalXcore.g:4568:1: entryRuleXOtherOperatorExpression returns [EObject current=null] : iv_ruleXOtherOperatorExpression= ruleXOtherOperatorExpression EOF ;
    public final EObject entryRuleXOtherOperatorExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXOtherOperatorExpression = null;


        try {
            // InternalXcore.g:4568:65: (iv_ruleXOtherOperatorExpression= ruleXOtherOperatorExpression EOF )
            // InternalXcore.g:4569:2: iv_ruleXOtherOperatorExpression= ruleXOtherOperatorExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXOtherOperatorExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXOtherOperatorExpression=ruleXOtherOperatorExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXOtherOperatorExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXOtherOperatorExpression"


    // $ANTLR start "ruleXOtherOperatorExpression"
    // InternalXcore.g:4575:1: ruleXOtherOperatorExpression returns [EObject current=null] : (this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )* ) ;
    public final EObject ruleXOtherOperatorExpression() throws RecognitionException {
        EObject current = null;

        EObject this_XAdditiveExpression_0 = null;

        EObject lv_rightOperand_3_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:4581:2: ( (this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )* ) )
            // InternalXcore.g:4582:2: (this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )* )
            {
            // InternalXcore.g:4582:2: (this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )* )
            // InternalXcore.g:4583:3: this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getXOtherOperatorExpressionAccess().getXAdditiveExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_84);
            this_XAdditiveExpression_0=ruleXAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_XAdditiveExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalXcore.g:4591:3: ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )*
            loop91:
            do {
                int alt91=2;
                alt91 = dfa91.predict(input);
                switch (alt91) {
            	case 1 :
            	    // InternalXcore.g:4592:4: ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) )
            	    {
            	    // InternalXcore.g:4592:4: ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) )
            	    // InternalXcore.g:4593:5: ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) )
            	    {
            	    // InternalXcore.g:4603:5: ( () ( ( ruleOpOther ) ) )
            	    // InternalXcore.g:4604:6: () ( ( ruleOpOther ) )
            	    {
            	    // InternalXcore.g:4604:6: ()
            	    // InternalXcore.g:4605:7: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      							current = forceCreateModelElementAndSet(
            	      								grammarAccess.getXOtherOperatorExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	      								current);
            	      						
            	    }

            	    }

            	    // InternalXcore.g:4611:6: ( ( ruleOpOther ) )
            	    // InternalXcore.g:4612:7: ( ruleOpOther )
            	    {
            	    // InternalXcore.g:4612:7: ( ruleOpOther )
            	    // InternalXcore.g:4613:8: ruleOpOther
            	    {
            	    if ( state.backtracking==0 ) {

            	      								if (current==null) {
            	      									current = createModelElement(grammarAccess.getXOtherOperatorExpressionRule());
            	      								}
            	      							
            	    }
            	    if ( state.backtracking==0 ) {

            	      								newCompositeNode(grammarAccess.getXOtherOperatorExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0());
            	      							
            	    }
            	    pushFollow(FOLLOW_75);
            	    ruleOpOther();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      								afterParserOrEnumRuleCall();
            	      							
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // InternalXcore.g:4629:4: ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) )
            	    // InternalXcore.g:4630:5: (lv_rightOperand_3_0= ruleXAdditiveExpression )
            	    {
            	    // InternalXcore.g:4630:5: (lv_rightOperand_3_0= ruleXAdditiveExpression )
            	    // InternalXcore.g:4631:6: lv_rightOperand_3_0= ruleXAdditiveExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getXOtherOperatorExpressionAccess().getRightOperandXAdditiveExpressionParserRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_84);
            	    lv_rightOperand_3_0=ruleXAdditiveExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getXOtherOperatorExpressionRule());
            	      						}
            	      						set(
            	      							current,
            	      							"rightOperand",
            	      							lv_rightOperand_3_0,
            	      							"org.eclipse.xtext.xbase.Xbase.XAdditiveExpression");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXOtherOperatorExpression"


    // $ANTLR start "entryRuleOpOther"
    // InternalXcore.g:4653:1: entryRuleOpOther returns [String current=null] : iv_ruleOpOther= ruleOpOther EOF ;
    public final String entryRuleOpOther() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpOther = null;


        try {
            // InternalXcore.g:4653:47: (iv_ruleOpOther= ruleOpOther EOF )
            // InternalXcore.g:4654:2: iv_ruleOpOther= ruleOpOther EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpOtherRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleOpOther=ruleOpOther();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpOther.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpOther"


    // $ANTLR start "ruleOpOther"
    // InternalXcore.g:4660:1: ruleOpOther returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '->' | kw= '..<' | (kw= '>' kw= '..' ) | kw= '..' | kw= '=>' | (kw= '>' ( ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) ) | kw= '>' ) ) | (kw= '<' ( ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) ) | kw= '<' | kw= '=>' ) ) | kw= '<>' | kw= '?:' ) ;
    public final AntlrDatatypeRuleToken ruleOpOther() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalXcore.g:4666:2: ( (kw= '->' | kw= '..<' | (kw= '>' kw= '..' ) | kw= '..' | kw= '=>' | (kw= '>' ( ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) ) | kw= '>' ) ) | (kw= '<' ( ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) ) | kw= '<' | kw= '=>' ) ) | kw= '<>' | kw= '?:' ) )
            // InternalXcore.g:4667:2: (kw= '->' | kw= '..<' | (kw= '>' kw= '..' ) | kw= '..' | kw= '=>' | (kw= '>' ( ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) ) | kw= '>' ) ) | (kw= '<' ( ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) ) | kw= '<' | kw= '=>' ) ) | kw= '<>' | kw= '?:' )
            {
            // InternalXcore.g:4667:2: (kw= '->' | kw= '..<' | (kw= '>' kw= '..' ) | kw= '..' | kw= '=>' | (kw= '>' ( ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) ) | kw= '>' ) ) | (kw= '<' ( ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) ) | kw= '<' | kw= '=>' ) ) | kw= '<>' | kw= '?:' )
            int alt94=9;
            alt94 = dfa94.predict(input);
            switch (alt94) {
                case 1 :
                    // InternalXcore.g:4668:3: kw= '->'
                    {
                    kw=(Token)match(input,83,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpOtherAccess().getHyphenMinusGreaterThanSignKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:4674:3: kw= '..<'
                    {
                    kw=(Token)match(input,84,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpOtherAccess().getFullStopFullStopLessThanSignKeyword_1());
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalXcore.g:4680:3: (kw= '>' kw= '..' )
                    {
                    // InternalXcore.g:4680:3: (kw= '>' kw= '..' )
                    // InternalXcore.g:4681:4: kw= '>' kw= '..'
                    {
                    kw=(Token)match(input,24,FOLLOW_85); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_2_0());
                      			
                    }
                    kw=(Token)match(input,63,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getOpOtherAccess().getFullStopFullStopKeyword_2_1());
                      			
                    }

                    }


                    }
                    break;
                case 4 :
                    // InternalXcore.g:4693:3: kw= '..'
                    {
                    kw=(Token)match(input,63,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpOtherAccess().getFullStopFullStopKeyword_3());
                      		
                    }

                    }
                    break;
                case 5 :
                    // InternalXcore.g:4699:3: kw= '=>'
                    {
                    kw=(Token)match(input,85,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpOtherAccess().getEqualsSignGreaterThanSignKeyword_4());
                      		
                    }

                    }
                    break;
                case 6 :
                    // InternalXcore.g:4705:3: (kw= '>' ( ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) ) | kw= '>' ) )
                    {
                    // InternalXcore.g:4705:3: (kw= '>' ( ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) ) | kw= '>' ) )
                    // InternalXcore.g:4706:4: kw= '>' ( ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) ) | kw= '>' )
                    {
                    kw=(Token)match(input,24,FOLLOW_86); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_0());
                      			
                    }
                    // InternalXcore.g:4711:4: ( ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) ) | kw= '>' )
                    int alt92=2;
                    int LA92_0 = input.LA(1);

                    if ( (LA92_0==24) ) {
                        int LA92_1 = input.LA(2);

                        if ( (LA92_1==24) && (synpred11_InternalXcore())) {
                            alt92=1;
                        }
                        else if ( (LA92_1==EOF||(LA92_1>=RULE_STRING && LA92_1<=RULE_DECIMAL)||LA92_1==13||LA92_1==15||(LA92_1>=19 && LA92_1<=21)||LA92_1==23||(LA92_1>=25 && LA92_1<=29)||(LA92_1>=31 && LA92_1<=57)||LA92_1==59||LA92_1==62||LA92_1==66||(LA92_1>=68 && LA92_1<=69)||LA92_1==91||LA92_1==96||LA92_1==98||LA92_1==100||(LA92_1>=104 && LA92_1<=106)||(LA92_1>=109 && LA92_1<=116)||LA92_1==118) ) {
                            alt92=2;
                        }
                        else {
                            if (state.backtracking>0) {state.failed=true; return current;}
                            NoViableAltException nvae =
                                new NoViableAltException("", 92, 1, input);

                            throw nvae;
                        }
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 92, 0, input);

                        throw nvae;
                    }
                    switch (alt92) {
                        case 1 :
                            // InternalXcore.g:4712:5: ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) )
                            {
                            // InternalXcore.g:4712:5: ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) )
                            // InternalXcore.g:4713:6: ( ( '>' '>' ) )=> (kw= '>' kw= '>' )
                            {
                            // InternalXcore.g:4718:6: (kw= '>' kw= '>' )
                            // InternalXcore.g:4719:7: kw= '>' kw= '>'
                            {
                            kw=(Token)match(input,24,FOLLOW_86); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							current.merge(kw);
                              							newLeafNode(kw, grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_1_0_0_0());
                              						
                            }
                            kw=(Token)match(input,24,FOLLOW_2); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							current.merge(kw);
                              							newLeafNode(kw, grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_1_0_0_1());
                              						
                            }

                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalXcore.g:4732:5: kw= '>'
                            {
                            kw=(Token)match(input,24,FOLLOW_2); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					current.merge(kw);
                              					newLeafNode(kw, grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_1_1());
                              				
                            }

                            }
                            break;

                    }


                    }


                    }
                    break;
                case 7 :
                    // InternalXcore.g:4740:3: (kw= '<' ( ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) ) | kw= '<' | kw= '=>' ) )
                    {
                    // InternalXcore.g:4740:3: (kw= '<' ( ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) ) | kw= '<' | kw= '=>' ) )
                    // InternalXcore.g:4741:4: kw= '<' ( ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) ) | kw= '<' | kw= '=>' )
                    {
                    kw=(Token)match(input,23,FOLLOW_87); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current.merge(kw);
                      				newLeafNode(kw, grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_0());
                      			
                    }
                    // InternalXcore.g:4746:4: ( ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) ) | kw= '<' | kw= '=>' )
                    int alt93=3;
                    int LA93_0 = input.LA(1);

                    if ( (LA93_0==23) ) {
                        int LA93_1 = input.LA(2);

                        if ( (synpred12_InternalXcore()) ) {
                            alt93=1;
                        }
                        else if ( (true) ) {
                            alt93=2;
                        }
                        else {
                            if (state.backtracking>0) {state.failed=true; return current;}
                            NoViableAltException nvae =
                                new NoViableAltException("", 93, 1, input);

                            throw nvae;
                        }
                    }
                    else if ( (LA93_0==85) ) {
                        alt93=3;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 93, 0, input);

                        throw nvae;
                    }
                    switch (alt93) {
                        case 1 :
                            // InternalXcore.g:4747:5: ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) )
                            {
                            // InternalXcore.g:4747:5: ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) )
                            // InternalXcore.g:4748:6: ( ( '<' '<' ) )=> (kw= '<' kw= '<' )
                            {
                            // InternalXcore.g:4753:6: (kw= '<' kw= '<' )
                            // InternalXcore.g:4754:7: kw= '<' kw= '<'
                            {
                            kw=(Token)match(input,23,FOLLOW_77); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							current.merge(kw);
                              							newLeafNode(kw, grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_1_0_0_0());
                              						
                            }
                            kw=(Token)match(input,23,FOLLOW_2); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							current.merge(kw);
                              							newLeafNode(kw, grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_1_0_0_1());
                              						
                            }

                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalXcore.g:4767:5: kw= '<'
                            {
                            kw=(Token)match(input,23,FOLLOW_2); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					current.merge(kw);
                              					newLeafNode(kw, grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_1_1());
                              				
                            }

                            }
                            break;
                        case 3 :
                            // InternalXcore.g:4773:5: kw= '=>'
                            {
                            kw=(Token)match(input,85,FOLLOW_2); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					current.merge(kw);
                              					newLeafNode(kw, grammarAccess.getOpOtherAccess().getEqualsSignGreaterThanSignKeyword_6_1_2());
                              				
                            }

                            }
                            break;

                    }


                    }


                    }
                    break;
                case 8 :
                    // InternalXcore.g:4781:3: kw= '<>'
                    {
                    kw=(Token)match(input,86,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpOtherAccess().getLessThanSignGreaterThanSignKeyword_7());
                      		
                    }

                    }
                    break;
                case 9 :
                    // InternalXcore.g:4787:3: kw= '?:'
                    {
                    kw=(Token)match(input,87,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpOtherAccess().getQuestionMarkColonKeyword_8());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpOther"


    // $ANTLR start "entryRuleXAdditiveExpression"
    // InternalXcore.g:4796:1: entryRuleXAdditiveExpression returns [EObject current=null] : iv_ruleXAdditiveExpression= ruleXAdditiveExpression EOF ;
    public final EObject entryRuleXAdditiveExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXAdditiveExpression = null;


        try {
            // InternalXcore.g:4796:60: (iv_ruleXAdditiveExpression= ruleXAdditiveExpression EOF )
            // InternalXcore.g:4797:2: iv_ruleXAdditiveExpression= ruleXAdditiveExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXAdditiveExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXAdditiveExpression=ruleXAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXAdditiveExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXAdditiveExpression"


    // $ANTLR start "ruleXAdditiveExpression"
    // InternalXcore.g:4803:1: ruleXAdditiveExpression returns [EObject current=null] : (this_XMultiplicativeExpression_0= ruleXMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) ) )* ) ;
    public final EObject ruleXAdditiveExpression() throws RecognitionException {
        EObject current = null;

        EObject this_XMultiplicativeExpression_0 = null;

        EObject lv_rightOperand_3_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:4809:2: ( (this_XMultiplicativeExpression_0= ruleXMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) ) )* ) )
            // InternalXcore.g:4810:2: (this_XMultiplicativeExpression_0= ruleXMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) ) )* )
            {
            // InternalXcore.g:4810:2: (this_XMultiplicativeExpression_0= ruleXMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) ) )* )
            // InternalXcore.g:4811:3: this_XMultiplicativeExpression_0= ruleXMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getXAdditiveExpressionAccess().getXMultiplicativeExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_88);
            this_XMultiplicativeExpression_0=ruleXMultiplicativeExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_XMultiplicativeExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalXcore.g:4819:3: ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) ) )*
            loop95:
            do {
                int alt95=2;
                int LA95_0 = input.LA(1);

                if ( (LA95_0==62) ) {
                    int LA95_2 = input.LA(2);

                    if ( (synpred13_InternalXcore()) ) {
                        alt95=1;
                    }


                }
                else if ( (LA95_0==31) ) {
                    int LA95_3 = input.LA(2);

                    if ( (synpred13_InternalXcore()) ) {
                        alt95=1;
                    }


                }


                switch (alt95) {
            	case 1 :
            	    // InternalXcore.g:4820:4: ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) )
            	    {
            	    // InternalXcore.g:4820:4: ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) )
            	    // InternalXcore.g:4821:5: ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) )
            	    {
            	    // InternalXcore.g:4831:5: ( () ( ( ruleOpAdd ) ) )
            	    // InternalXcore.g:4832:6: () ( ( ruleOpAdd ) )
            	    {
            	    // InternalXcore.g:4832:6: ()
            	    // InternalXcore.g:4833:7: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      							current = forceCreateModelElementAndSet(
            	      								grammarAccess.getXAdditiveExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	      								current);
            	      						
            	    }

            	    }

            	    // InternalXcore.g:4839:6: ( ( ruleOpAdd ) )
            	    // InternalXcore.g:4840:7: ( ruleOpAdd )
            	    {
            	    // InternalXcore.g:4840:7: ( ruleOpAdd )
            	    // InternalXcore.g:4841:8: ruleOpAdd
            	    {
            	    if ( state.backtracking==0 ) {

            	      								if (current==null) {
            	      									current = createModelElement(grammarAccess.getXAdditiveExpressionRule());
            	      								}
            	      							
            	    }
            	    if ( state.backtracking==0 ) {

            	      								newCompositeNode(grammarAccess.getXAdditiveExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0());
            	      							
            	    }
            	    pushFollow(FOLLOW_75);
            	    ruleOpAdd();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      								afterParserOrEnumRuleCall();
            	      							
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // InternalXcore.g:4857:4: ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) )
            	    // InternalXcore.g:4858:5: (lv_rightOperand_3_0= ruleXMultiplicativeExpression )
            	    {
            	    // InternalXcore.g:4858:5: (lv_rightOperand_3_0= ruleXMultiplicativeExpression )
            	    // InternalXcore.g:4859:6: lv_rightOperand_3_0= ruleXMultiplicativeExpression
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getXAdditiveExpressionAccess().getRightOperandXMultiplicativeExpressionParserRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_88);
            	    lv_rightOperand_3_0=ruleXMultiplicativeExpression();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getXAdditiveExpressionRule());
            	      						}
            	      						set(
            	      							current,
            	      							"rightOperand",
            	      							lv_rightOperand_3_0,
            	      							"org.eclipse.xtext.xbase.Xbase.XMultiplicativeExpression");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXAdditiveExpression"


    // $ANTLR start "entryRuleOpAdd"
    // InternalXcore.g:4881:1: entryRuleOpAdd returns [String current=null] : iv_ruleOpAdd= ruleOpAdd EOF ;
    public final String entryRuleOpAdd() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpAdd = null;


        try {
            // InternalXcore.g:4881:45: (iv_ruleOpAdd= ruleOpAdd EOF )
            // InternalXcore.g:4882:2: iv_ruleOpAdd= ruleOpAdd EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpAddRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleOpAdd=ruleOpAdd();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpAdd.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpAdd"


    // $ANTLR start "ruleOpAdd"
    // InternalXcore.g:4888:1: ruleOpAdd returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '+' | kw= '-' ) ;
    public final AntlrDatatypeRuleToken ruleOpAdd() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalXcore.g:4894:2: ( (kw= '+' | kw= '-' ) )
            // InternalXcore.g:4895:2: (kw= '+' | kw= '-' )
            {
            // InternalXcore.g:4895:2: (kw= '+' | kw= '-' )
            int alt96=2;
            int LA96_0 = input.LA(1);

            if ( (LA96_0==62) ) {
                alt96=1;
            }
            else if ( (LA96_0==31) ) {
                alt96=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 96, 0, input);

                throw nvae;
            }
            switch (alt96) {
                case 1 :
                    // InternalXcore.g:4896:3: kw= '+'
                    {
                    kw=(Token)match(input,62,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpAddAccess().getPlusSignKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:4902:3: kw= '-'
                    {
                    kw=(Token)match(input,31,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpAddAccess().getHyphenMinusKeyword_1());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpAdd"


    // $ANTLR start "entryRuleXMultiplicativeExpression"
    // InternalXcore.g:4911:1: entryRuleXMultiplicativeExpression returns [EObject current=null] : iv_ruleXMultiplicativeExpression= ruleXMultiplicativeExpression EOF ;
    public final EObject entryRuleXMultiplicativeExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXMultiplicativeExpression = null;


        try {
            // InternalXcore.g:4911:66: (iv_ruleXMultiplicativeExpression= ruleXMultiplicativeExpression EOF )
            // InternalXcore.g:4912:2: iv_ruleXMultiplicativeExpression= ruleXMultiplicativeExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXMultiplicativeExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXMultiplicativeExpression=ruleXMultiplicativeExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXMultiplicativeExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXMultiplicativeExpression"


    // $ANTLR start "ruleXMultiplicativeExpression"
    // InternalXcore.g:4918:1: ruleXMultiplicativeExpression returns [EObject current=null] : (this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )* ) ;
    public final EObject ruleXMultiplicativeExpression() throws RecognitionException {
        EObject current = null;

        EObject this_XUnaryOperation_0 = null;

        EObject lv_rightOperand_3_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:4924:2: ( (this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )* ) )
            // InternalXcore.g:4925:2: (this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )* )
            {
            // InternalXcore.g:4925:2: (this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )* )
            // InternalXcore.g:4926:3: this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getXMultiplicativeExpressionAccess().getXUnaryOperationParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_89);
            this_XUnaryOperation_0=ruleXUnaryOperation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_XUnaryOperation_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalXcore.g:4934:3: ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )*
            loop97:
            do {
                int alt97=2;
                switch ( input.LA(1) ) {
                case 61:
                    {
                    int LA97_2 = input.LA(2);

                    if ( (synpred14_InternalXcore()) ) {
                        alt97=1;
                    }


                    }
                    break;
                case 88:
                    {
                    int LA97_3 = input.LA(2);

                    if ( (synpred14_InternalXcore()) ) {
                        alt97=1;
                    }


                    }
                    break;
                case 89:
                    {
                    int LA97_4 = input.LA(2);

                    if ( (synpred14_InternalXcore()) ) {
                        alt97=1;
                    }


                    }
                    break;
                case 90:
                    {
                    int LA97_5 = input.LA(2);

                    if ( (synpred14_InternalXcore()) ) {
                        alt97=1;
                    }


                    }
                    break;

                }

                switch (alt97) {
            	case 1 :
            	    // InternalXcore.g:4935:4: ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) )
            	    {
            	    // InternalXcore.g:4935:4: ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) )
            	    // InternalXcore.g:4936:5: ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) )
            	    {
            	    // InternalXcore.g:4946:5: ( () ( ( ruleOpMulti ) ) )
            	    // InternalXcore.g:4947:6: () ( ( ruleOpMulti ) )
            	    {
            	    // InternalXcore.g:4947:6: ()
            	    // InternalXcore.g:4948:7: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      							current = forceCreateModelElementAndSet(
            	      								grammarAccess.getXMultiplicativeExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	      								current);
            	      						
            	    }

            	    }

            	    // InternalXcore.g:4954:6: ( ( ruleOpMulti ) )
            	    // InternalXcore.g:4955:7: ( ruleOpMulti )
            	    {
            	    // InternalXcore.g:4955:7: ( ruleOpMulti )
            	    // InternalXcore.g:4956:8: ruleOpMulti
            	    {
            	    if ( state.backtracking==0 ) {

            	      								if (current==null) {
            	      									current = createModelElement(grammarAccess.getXMultiplicativeExpressionRule());
            	      								}
            	      							
            	    }
            	    if ( state.backtracking==0 ) {

            	      								newCompositeNode(grammarAccess.getXMultiplicativeExpressionAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_1_0());
            	      							
            	    }
            	    pushFollow(FOLLOW_75);
            	    ruleOpMulti();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      								afterParserOrEnumRuleCall();
            	      							
            	    }

            	    }


            	    }


            	    }


            	    }

            	    // InternalXcore.g:4972:4: ( (lv_rightOperand_3_0= ruleXUnaryOperation ) )
            	    // InternalXcore.g:4973:5: (lv_rightOperand_3_0= ruleXUnaryOperation )
            	    {
            	    // InternalXcore.g:4973:5: (lv_rightOperand_3_0= ruleXUnaryOperation )
            	    // InternalXcore.g:4974:6: lv_rightOperand_3_0= ruleXUnaryOperation
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getXMultiplicativeExpressionAccess().getRightOperandXUnaryOperationParserRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_89);
            	    lv_rightOperand_3_0=ruleXUnaryOperation();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getXMultiplicativeExpressionRule());
            	      						}
            	      						set(
            	      							current,
            	      							"rightOperand",
            	      							lv_rightOperand_3_0,
            	      							"org.eclipse.xtext.xbase.Xbase.XUnaryOperation");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXMultiplicativeExpression"


    // $ANTLR start "entryRuleOpMulti"
    // InternalXcore.g:4996:1: entryRuleOpMulti returns [String current=null] : iv_ruleOpMulti= ruleOpMulti EOF ;
    public final String entryRuleOpMulti() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpMulti = null;


        try {
            // InternalXcore.g:4996:47: (iv_ruleOpMulti= ruleOpMulti EOF )
            // InternalXcore.g:4997:2: iv_ruleOpMulti= ruleOpMulti EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpMultiRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleOpMulti=ruleOpMulti();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpMulti.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpMulti"


    // $ANTLR start "ruleOpMulti"
    // InternalXcore.g:5003:1: ruleOpMulti returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '*' | kw= '**' | kw= '/' | kw= '%' ) ;
    public final AntlrDatatypeRuleToken ruleOpMulti() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalXcore.g:5009:2: ( (kw= '*' | kw= '**' | kw= '/' | kw= '%' ) )
            // InternalXcore.g:5010:2: (kw= '*' | kw= '**' | kw= '/' | kw= '%' )
            {
            // InternalXcore.g:5010:2: (kw= '*' | kw= '**' | kw= '/' | kw= '%' )
            int alt98=4;
            switch ( input.LA(1) ) {
            case 61:
                {
                alt98=1;
                }
                break;
            case 88:
                {
                alt98=2;
                }
                break;
            case 89:
                {
                alt98=3;
                }
                break;
            case 90:
                {
                alt98=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 98, 0, input);

                throw nvae;
            }

            switch (alt98) {
                case 1 :
                    // InternalXcore.g:5011:3: kw= '*'
                    {
                    kw=(Token)match(input,61,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpMultiAccess().getAsteriskKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:5017:3: kw= '**'
                    {
                    kw=(Token)match(input,88,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpMultiAccess().getAsteriskAsteriskKeyword_1());
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalXcore.g:5023:3: kw= '/'
                    {
                    kw=(Token)match(input,89,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpMultiAccess().getSolidusKeyword_2());
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalXcore.g:5029:3: kw= '%'
                    {
                    kw=(Token)match(input,90,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpMultiAccess().getPercentSignKeyword_3());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpMulti"


    // $ANTLR start "entryRuleXUnaryOperation"
    // InternalXcore.g:5038:1: entryRuleXUnaryOperation returns [EObject current=null] : iv_ruleXUnaryOperation= ruleXUnaryOperation EOF ;
    public final EObject entryRuleXUnaryOperation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXUnaryOperation = null;


        try {
            // InternalXcore.g:5038:56: (iv_ruleXUnaryOperation= ruleXUnaryOperation EOF )
            // InternalXcore.g:5039:2: iv_ruleXUnaryOperation= ruleXUnaryOperation EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXUnaryOperationRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXUnaryOperation=ruleXUnaryOperation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXUnaryOperation; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXUnaryOperation"


    // $ANTLR start "ruleXUnaryOperation"
    // InternalXcore.g:5045:1: ruleXUnaryOperation returns [EObject current=null] : ( ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) ) ) | this_XCastedExpression_3= ruleXCastedExpression ) ;
    public final EObject ruleXUnaryOperation() throws RecognitionException {
        EObject current = null;

        EObject lv_operand_2_0 = null;

        EObject this_XCastedExpression_3 = null;



        	enterRule();

        try {
            // InternalXcore.g:5051:2: ( ( ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) ) ) | this_XCastedExpression_3= ruleXCastedExpression ) )
            // InternalXcore.g:5052:2: ( ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) ) ) | this_XCastedExpression_3= ruleXCastedExpression )
            {
            // InternalXcore.g:5052:2: ( ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) ) ) | this_XCastedExpression_3= ruleXCastedExpression )
            int alt99=2;
            int LA99_0 = input.LA(1);

            if ( (LA99_0==31||LA99_0==62||LA99_0==91) ) {
                alt99=1;
            }
            else if ( ((LA99_0>=RULE_STRING && LA99_0<=RULE_DECIMAL)||LA99_0==13||LA99_0==15||(LA99_0>=19 && LA99_0<=21)||LA99_0==23||(LA99_0>=25 && LA99_0<=29)||(LA99_0>=32 && LA99_0<=57)||LA99_0==59||LA99_0==66||(LA99_0>=68 && LA99_0<=69)||LA99_0==96||LA99_0==98||LA99_0==100||(LA99_0>=104 && LA99_0<=106)||(LA99_0>=109 && LA99_0<=116)||LA99_0==118) ) {
                alt99=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 99, 0, input);

                throw nvae;
            }
            switch (alt99) {
                case 1 :
                    // InternalXcore.g:5053:3: ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) ) )
                    {
                    // InternalXcore.g:5053:3: ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) ) )
                    // InternalXcore.g:5054:4: () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) )
                    {
                    // InternalXcore.g:5054:4: ()
                    // InternalXcore.g:5055:5: 
                    {
                    if ( state.backtracking==0 ) {

                      					current = forceCreateModelElement(
                      						grammarAccess.getXUnaryOperationAccess().getXUnaryOperationAction_0_0(),
                      						current);
                      				
                    }

                    }

                    // InternalXcore.g:5061:4: ( ( ruleOpUnary ) )
                    // InternalXcore.g:5062:5: ( ruleOpUnary )
                    {
                    // InternalXcore.g:5062:5: ( ruleOpUnary )
                    // InternalXcore.g:5063:6: ruleOpUnary
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getXUnaryOperationRule());
                      						}
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXUnaryOperationAccess().getFeatureJvmIdentifiableElementCrossReference_0_1_0());
                      					
                    }
                    pushFollow(FOLLOW_75);
                    ruleOpUnary();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:5077:4: ( (lv_operand_2_0= ruleXUnaryOperation ) )
                    // InternalXcore.g:5078:5: (lv_operand_2_0= ruleXUnaryOperation )
                    {
                    // InternalXcore.g:5078:5: (lv_operand_2_0= ruleXUnaryOperation )
                    // InternalXcore.g:5079:6: lv_operand_2_0= ruleXUnaryOperation
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXUnaryOperationAccess().getOperandXUnaryOperationParserRuleCall_0_2_0());
                      					
                    }
                    pushFollow(FOLLOW_2);
                    lv_operand_2_0=ruleXUnaryOperation();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXUnaryOperationRule());
                      						}
                      						set(
                      							current,
                      							"operand",
                      							lv_operand_2_0,
                      							"org.eclipse.xtext.xbase.Xbase.XUnaryOperation");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:5098:3: this_XCastedExpression_3= ruleXCastedExpression
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXUnaryOperationAccess().getXCastedExpressionParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XCastedExpression_3=ruleXCastedExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XCastedExpression_3;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXUnaryOperation"


    // $ANTLR start "entryRuleOpUnary"
    // InternalXcore.g:5110:1: entryRuleOpUnary returns [String current=null] : iv_ruleOpUnary= ruleOpUnary EOF ;
    public final String entryRuleOpUnary() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpUnary = null;


        try {
            // InternalXcore.g:5110:47: (iv_ruleOpUnary= ruleOpUnary EOF )
            // InternalXcore.g:5111:2: iv_ruleOpUnary= ruleOpUnary EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpUnaryRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleOpUnary=ruleOpUnary();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpUnary.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpUnary"


    // $ANTLR start "ruleOpUnary"
    // InternalXcore.g:5117:1: ruleOpUnary returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '!' | kw= '-' | kw= '+' ) ;
    public final AntlrDatatypeRuleToken ruleOpUnary() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalXcore.g:5123:2: ( (kw= '!' | kw= '-' | kw= '+' ) )
            // InternalXcore.g:5124:2: (kw= '!' | kw= '-' | kw= '+' )
            {
            // InternalXcore.g:5124:2: (kw= '!' | kw= '-' | kw= '+' )
            int alt100=3;
            switch ( input.LA(1) ) {
            case 91:
                {
                alt100=1;
                }
                break;
            case 31:
                {
                alt100=2;
                }
                break;
            case 62:
                {
                alt100=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 100, 0, input);

                throw nvae;
            }

            switch (alt100) {
                case 1 :
                    // InternalXcore.g:5125:3: kw= '!'
                    {
                    kw=(Token)match(input,91,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpUnaryAccess().getExclamationMarkKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:5131:3: kw= '-'
                    {
                    kw=(Token)match(input,31,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpUnaryAccess().getHyphenMinusKeyword_1());
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalXcore.g:5137:3: kw= '+'
                    {
                    kw=(Token)match(input,62,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpUnaryAccess().getPlusSignKeyword_2());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpUnary"


    // $ANTLR start "entryRuleXCastedExpression"
    // InternalXcore.g:5146:1: entryRuleXCastedExpression returns [EObject current=null] : iv_ruleXCastedExpression= ruleXCastedExpression EOF ;
    public final EObject entryRuleXCastedExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXCastedExpression = null;


        try {
            // InternalXcore.g:5146:58: (iv_ruleXCastedExpression= ruleXCastedExpression EOF )
            // InternalXcore.g:5147:2: iv_ruleXCastedExpression= ruleXCastedExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXCastedExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXCastedExpression=ruleXCastedExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXCastedExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXCastedExpression"


    // $ANTLR start "ruleXCastedExpression"
    // InternalXcore.g:5153:1: ruleXCastedExpression returns [EObject current=null] : (this_XPostfixOperation_0= ruleXPostfixOperation ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )* ) ;
    public final EObject ruleXCastedExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        EObject this_XPostfixOperation_0 = null;

        EObject lv_type_3_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:5159:2: ( (this_XPostfixOperation_0= ruleXPostfixOperation ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )* ) )
            // InternalXcore.g:5160:2: (this_XPostfixOperation_0= ruleXPostfixOperation ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )* )
            {
            // InternalXcore.g:5160:2: (this_XPostfixOperation_0= ruleXPostfixOperation ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )* )
            // InternalXcore.g:5161:3: this_XPostfixOperation_0= ruleXPostfixOperation ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getXCastedExpressionAccess().getXPostfixOperationParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_90);
            this_XPostfixOperation_0=ruleXPostfixOperation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_XPostfixOperation_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalXcore.g:5169:3: ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )*
            loop101:
            do {
                int alt101=2;
                int LA101_0 = input.LA(1);

                if ( (LA101_0==21) ) {
                    int LA101_2 = input.LA(2);

                    if ( (synpred15_InternalXcore()) ) {
                        alt101=1;
                    }


                }


                switch (alt101) {
            	case 1 :
            	    // InternalXcore.g:5170:4: ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) )
            	    {
            	    // InternalXcore.g:5170:4: ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) )
            	    // InternalXcore.g:5171:5: ( ( () 'as' ) )=> ( () otherlv_2= 'as' )
            	    {
            	    // InternalXcore.g:5177:5: ( () otherlv_2= 'as' )
            	    // InternalXcore.g:5178:6: () otherlv_2= 'as'
            	    {
            	    // InternalXcore.g:5178:6: ()
            	    // InternalXcore.g:5179:7: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      							current = forceCreateModelElementAndSet(
            	      								grammarAccess.getXCastedExpressionAccess().getXCastedExpressionTargetAction_1_0_0_0(),
            	      								current);
            	      						
            	    }

            	    }

            	    otherlv_2=(Token)match(input,21,FOLLOW_20); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						newLeafNode(otherlv_2, grammarAccess.getXCastedExpressionAccess().getAsKeyword_1_0_0_1());
            	      					
            	    }

            	    }


            	    }

            	    // InternalXcore.g:5191:4: ( (lv_type_3_0= ruleJvmTypeReference ) )
            	    // InternalXcore.g:5192:5: (lv_type_3_0= ruleJvmTypeReference )
            	    {
            	    // InternalXcore.g:5192:5: (lv_type_3_0= ruleJvmTypeReference )
            	    // InternalXcore.g:5193:6: lv_type_3_0= ruleJvmTypeReference
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getXCastedExpressionAccess().getTypeJvmTypeReferenceParserRuleCall_1_1_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_90);
            	    lv_type_3_0=ruleJvmTypeReference();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getXCastedExpressionRule());
            	      						}
            	      						set(
            	      							current,
            	      							"type",
            	      							lv_type_3_0,
            	      							"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXCastedExpression"


    // $ANTLR start "entryRuleXPostfixOperation"
    // InternalXcore.g:5215:1: entryRuleXPostfixOperation returns [EObject current=null] : iv_ruleXPostfixOperation= ruleXPostfixOperation EOF ;
    public final EObject entryRuleXPostfixOperation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXPostfixOperation = null;


        try {
            // InternalXcore.g:5215:58: (iv_ruleXPostfixOperation= ruleXPostfixOperation EOF )
            // InternalXcore.g:5216:2: iv_ruleXPostfixOperation= ruleXPostfixOperation EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXPostfixOperationRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXPostfixOperation=ruleXPostfixOperation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXPostfixOperation; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXPostfixOperation"


    // $ANTLR start "ruleXPostfixOperation"
    // InternalXcore.g:5222:1: ruleXPostfixOperation returns [EObject current=null] : (this_XMemberFeatureCall_0= ruleXMemberFeatureCall ( ( ( () ( ( ruleOpPostfix ) ) ) )=> ( () ( ( ruleOpPostfix ) ) ) )? ) ;
    public final EObject ruleXPostfixOperation() throws RecognitionException {
        EObject current = null;

        EObject this_XMemberFeatureCall_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:5228:2: ( (this_XMemberFeatureCall_0= ruleXMemberFeatureCall ( ( ( () ( ( ruleOpPostfix ) ) ) )=> ( () ( ( ruleOpPostfix ) ) ) )? ) )
            // InternalXcore.g:5229:2: (this_XMemberFeatureCall_0= ruleXMemberFeatureCall ( ( ( () ( ( ruleOpPostfix ) ) ) )=> ( () ( ( ruleOpPostfix ) ) ) )? )
            {
            // InternalXcore.g:5229:2: (this_XMemberFeatureCall_0= ruleXMemberFeatureCall ( ( ( () ( ( ruleOpPostfix ) ) ) )=> ( () ( ( ruleOpPostfix ) ) ) )? )
            // InternalXcore.g:5230:3: this_XMemberFeatureCall_0= ruleXMemberFeatureCall ( ( ( () ( ( ruleOpPostfix ) ) ) )=> ( () ( ( ruleOpPostfix ) ) ) )?
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getXPostfixOperationAccess().getXMemberFeatureCallParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_91);
            this_XMemberFeatureCall_0=ruleXMemberFeatureCall();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_XMemberFeatureCall_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalXcore.g:5238:3: ( ( ( () ( ( ruleOpPostfix ) ) ) )=> ( () ( ( ruleOpPostfix ) ) ) )?
            int alt102=2;
            int LA102_0 = input.LA(1);

            if ( (LA102_0==92) ) {
                int LA102_1 = input.LA(2);

                if ( (synpred16_InternalXcore()) ) {
                    alt102=1;
                }
            }
            else if ( (LA102_0==93) ) {
                int LA102_2 = input.LA(2);

                if ( (synpred16_InternalXcore()) ) {
                    alt102=1;
                }
            }
            switch (alt102) {
                case 1 :
                    // InternalXcore.g:5239:4: ( ( () ( ( ruleOpPostfix ) ) ) )=> ( () ( ( ruleOpPostfix ) ) )
                    {
                    // InternalXcore.g:5249:4: ( () ( ( ruleOpPostfix ) ) )
                    // InternalXcore.g:5250:5: () ( ( ruleOpPostfix ) )
                    {
                    // InternalXcore.g:5250:5: ()
                    // InternalXcore.g:5251:6: 
                    {
                    if ( state.backtracking==0 ) {

                      						current = forceCreateModelElementAndSet(
                      							grammarAccess.getXPostfixOperationAccess().getXPostfixOperationOperandAction_1_0_0(),
                      							current);
                      					
                    }

                    }

                    // InternalXcore.g:5257:5: ( ( ruleOpPostfix ) )
                    // InternalXcore.g:5258:6: ( ruleOpPostfix )
                    {
                    // InternalXcore.g:5258:6: ( ruleOpPostfix )
                    // InternalXcore.g:5259:7: ruleOpPostfix
                    {
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getXPostfixOperationRule());
                      							}
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							newCompositeNode(grammarAccess.getXPostfixOperationAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_1_0());
                      						
                    }
                    pushFollow(FOLLOW_2);
                    ruleOpPostfix();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							afterParserOrEnumRuleCall();
                      						
                    }

                    }


                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXPostfixOperation"


    // $ANTLR start "entryRuleOpPostfix"
    // InternalXcore.g:5279:1: entryRuleOpPostfix returns [String current=null] : iv_ruleOpPostfix= ruleOpPostfix EOF ;
    public final String entryRuleOpPostfix() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleOpPostfix = null;


        try {
            // InternalXcore.g:5279:49: (iv_ruleOpPostfix= ruleOpPostfix EOF )
            // InternalXcore.g:5280:2: iv_ruleOpPostfix= ruleOpPostfix EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpPostfixRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleOpPostfix=ruleOpPostfix();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpPostfix.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleOpPostfix"


    // $ANTLR start "ruleOpPostfix"
    // InternalXcore.g:5286:1: ruleOpPostfix returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '++' | kw= '--' ) ;
    public final AntlrDatatypeRuleToken ruleOpPostfix() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalXcore.g:5292:2: ( (kw= '++' | kw= '--' ) )
            // InternalXcore.g:5293:2: (kw= '++' | kw= '--' )
            {
            // InternalXcore.g:5293:2: (kw= '++' | kw= '--' )
            int alt103=2;
            int LA103_0 = input.LA(1);

            if ( (LA103_0==92) ) {
                alt103=1;
            }
            else if ( (LA103_0==93) ) {
                alt103=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 103, 0, input);

                throw nvae;
            }
            switch (alt103) {
                case 1 :
                    // InternalXcore.g:5294:3: kw= '++'
                    {
                    kw=(Token)match(input,92,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpPostfixAccess().getPlusSignPlusSignKeyword_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:5300:3: kw= '--'
                    {
                    kw=(Token)match(input,93,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getOpPostfixAccess().getHyphenMinusHyphenMinusKeyword_1());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleOpPostfix"


    // $ANTLR start "entryRuleXMemberFeatureCall"
    // InternalXcore.g:5309:1: entryRuleXMemberFeatureCall returns [EObject current=null] : iv_ruleXMemberFeatureCall= ruleXMemberFeatureCall EOF ;
    public final EObject entryRuleXMemberFeatureCall() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXMemberFeatureCall = null;


        try {
            // InternalXcore.g:5309:59: (iv_ruleXMemberFeatureCall= ruleXMemberFeatureCall EOF )
            // InternalXcore.g:5310:2: iv_ruleXMemberFeatureCall= ruleXMemberFeatureCall EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXMemberFeatureCallRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXMemberFeatureCall=ruleXMemberFeatureCall();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXMemberFeatureCall; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXMemberFeatureCall"


    // $ANTLR start "ruleXMemberFeatureCall"
    // InternalXcore.g:5316:1: ruleXMemberFeatureCall returns [EObject current=null] : (this_XPrimaryExpression_0= ruleXPrimaryExpression ( ( ( ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )=> ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) ) ( (lv_value_6_0= ruleXAssignment ) ) ) | ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )=> ( () (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) ) ) ) (otherlv_11= '<' ( (lv_typeArguments_12_0= ruleJvmArgumentTypeReference ) ) (otherlv_13= ',' ( (lv_typeArguments_14_0= ruleJvmArgumentTypeReference ) ) )* otherlv_15= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_17_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* ) )? otherlv_22= ')' )? ( ( ( () '[' ) )=> (lv_memberCallArguments_23_0= ruleXClosure ) )? ) )* ) ;
    public final EObject ruleXMemberFeatureCall() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        Token lv_explicitStatic_3_0=null;
        Token otherlv_8=null;
        Token lv_nullSafe_9_0=null;
        Token lv_explicitStatic_10_0=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        Token otherlv_15=null;
        Token lv_explicitOperationCall_17_0=null;
        Token otherlv_20=null;
        Token otherlv_22=null;
        EObject this_XPrimaryExpression_0 = null;

        EObject lv_value_6_0 = null;

        EObject lv_typeArguments_12_0 = null;

        EObject lv_typeArguments_14_0 = null;

        EObject lv_memberCallArguments_18_0 = null;

        EObject lv_memberCallArguments_19_0 = null;

        EObject lv_memberCallArguments_21_0 = null;

        EObject lv_memberCallArguments_23_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:5322:2: ( (this_XPrimaryExpression_0= ruleXPrimaryExpression ( ( ( ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )=> ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) ) ( (lv_value_6_0= ruleXAssignment ) ) ) | ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )=> ( () (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) ) ) ) (otherlv_11= '<' ( (lv_typeArguments_12_0= ruleJvmArgumentTypeReference ) ) (otherlv_13= ',' ( (lv_typeArguments_14_0= ruleJvmArgumentTypeReference ) ) )* otherlv_15= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_17_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* ) )? otherlv_22= ')' )? ( ( ( () '[' ) )=> (lv_memberCallArguments_23_0= ruleXClosure ) )? ) )* ) )
            // InternalXcore.g:5323:2: (this_XPrimaryExpression_0= ruleXPrimaryExpression ( ( ( ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )=> ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) ) ( (lv_value_6_0= ruleXAssignment ) ) ) | ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )=> ( () (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) ) ) ) (otherlv_11= '<' ( (lv_typeArguments_12_0= ruleJvmArgumentTypeReference ) ) (otherlv_13= ',' ( (lv_typeArguments_14_0= ruleJvmArgumentTypeReference ) ) )* otherlv_15= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_17_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* ) )? otherlv_22= ')' )? ( ( ( () '[' ) )=> (lv_memberCallArguments_23_0= ruleXClosure ) )? ) )* )
            {
            // InternalXcore.g:5323:2: (this_XPrimaryExpression_0= ruleXPrimaryExpression ( ( ( ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )=> ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) ) ( (lv_value_6_0= ruleXAssignment ) ) ) | ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )=> ( () (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) ) ) ) (otherlv_11= '<' ( (lv_typeArguments_12_0= ruleJvmArgumentTypeReference ) ) (otherlv_13= ',' ( (lv_typeArguments_14_0= ruleJvmArgumentTypeReference ) ) )* otherlv_15= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_17_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* ) )? otherlv_22= ')' )? ( ( ( () '[' ) )=> (lv_memberCallArguments_23_0= ruleXClosure ) )? ) )* )
            // InternalXcore.g:5324:3: this_XPrimaryExpression_0= ruleXPrimaryExpression ( ( ( ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )=> ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) ) ( (lv_value_6_0= ruleXAssignment ) ) ) | ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )=> ( () (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) ) ) ) (otherlv_11= '<' ( (lv_typeArguments_12_0= ruleJvmArgumentTypeReference ) ) (otherlv_13= ',' ( (lv_typeArguments_14_0= ruleJvmArgumentTypeReference ) ) )* otherlv_15= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_17_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* ) )? otherlv_22= ')' )? ( ( ( () '[' ) )=> (lv_memberCallArguments_23_0= ruleXClosure ) )? ) )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getXPrimaryExpressionParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_92);
            this_XPrimaryExpression_0=ruleXPrimaryExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_XPrimaryExpression_0;
              			afterParserOrEnumRuleCall();
              		
            }
            // InternalXcore.g:5332:3: ( ( ( ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )=> ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) ) ( (lv_value_6_0= ruleXAssignment ) ) ) | ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )=> ( () (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) ) ) ) (otherlv_11= '<' ( (lv_typeArguments_12_0= ruleJvmArgumentTypeReference ) ) (otherlv_13= ',' ( (lv_typeArguments_14_0= ruleJvmArgumentTypeReference ) ) )* otherlv_15= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_17_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* ) )? otherlv_22= ')' )? ( ( ( () '[' ) )=> (lv_memberCallArguments_23_0= ruleXClosure ) )? ) )*
            loop112:
            do {
                int alt112=3;
                switch ( input.LA(1) ) {
                case 67:
                    {
                    int LA112_2 = input.LA(2);

                    if ( (synpred17_InternalXcore()) ) {
                        alt112=1;
                    }
                    else if ( (synpred18_InternalXcore()) ) {
                        alt112=2;
                    }


                    }
                    break;
                case 94:
                    {
                    int LA112_3 = input.LA(2);

                    if ( (synpred17_InternalXcore()) ) {
                        alt112=1;
                    }
                    else if ( (synpred18_InternalXcore()) ) {
                        alt112=2;
                    }


                    }
                    break;
                case 95:
                    {
                    int LA112_4 = input.LA(2);

                    if ( (synpred18_InternalXcore()) ) {
                        alt112=2;
                    }


                    }
                    break;

                }

                switch (alt112) {
            	case 1 :
            	    // InternalXcore.g:5333:4: ( ( ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )=> ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) ) ( (lv_value_6_0= ruleXAssignment ) ) )
            	    {
            	    // InternalXcore.g:5333:4: ( ( ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )=> ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) ) ( (lv_value_6_0= ruleXAssignment ) ) )
            	    // InternalXcore.g:5334:5: ( ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )=> ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) ) ( (lv_value_6_0= ruleXAssignment ) )
            	    {
            	    // InternalXcore.g:5334:5: ( ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )=> ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )
            	    // InternalXcore.g:5335:6: ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )=> ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign )
            	    {
            	    // InternalXcore.g:5355:6: ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign )
            	    // InternalXcore.g:5356:7: () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign
            	    {
            	    // InternalXcore.g:5356:7: ()
            	    // InternalXcore.g:5357:8: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      								current = forceCreateModelElementAndSet(
            	      									grammarAccess.getXMemberFeatureCallAccess().getXAssignmentAssignableAction_1_0_0_0_0(),
            	      									current);
            	      							
            	    }

            	    }

            	    // InternalXcore.g:5363:7: (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) )
            	    int alt104=2;
            	    int LA104_0 = input.LA(1);

            	    if ( (LA104_0==67) ) {
            	        alt104=1;
            	    }
            	    else if ( (LA104_0==94) ) {
            	        alt104=2;
            	    }
            	    else {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 104, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt104) {
            	        case 1 :
            	            // InternalXcore.g:5364:8: otherlv_2= '.'
            	            {
            	            otherlv_2=(Token)match(input,67,FOLLOW_93); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              								newLeafNode(otherlv_2, grammarAccess.getXMemberFeatureCallAccess().getFullStopKeyword_1_0_0_0_1_0());
            	              							
            	            }

            	            }
            	            break;
            	        case 2 :
            	            // InternalXcore.g:5369:8: ( (lv_explicitStatic_3_0= '::' ) )
            	            {
            	            // InternalXcore.g:5369:8: ( (lv_explicitStatic_3_0= '::' ) )
            	            // InternalXcore.g:5370:9: (lv_explicitStatic_3_0= '::' )
            	            {
            	            // InternalXcore.g:5370:9: (lv_explicitStatic_3_0= '::' )
            	            // InternalXcore.g:5371:10: lv_explicitStatic_3_0= '::'
            	            {
            	            lv_explicitStatic_3_0=(Token)match(input,94,FOLLOW_93); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              										newLeafNode(lv_explicitStatic_3_0, grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticColonColonKeyword_1_0_0_0_1_1_0());
            	              									
            	            }
            	            if ( state.backtracking==0 ) {

            	              										if (current==null) {
            	              											current = createModelElement(grammarAccess.getXMemberFeatureCallRule());
            	              										}
            	              										setWithLastConsumed(current, "explicitStatic", lv_explicitStatic_3_0 != null, "::");
            	              									
            	            }

            	            }


            	            }


            	            }
            	            break;

            	    }

            	    // InternalXcore.g:5384:7: ( ( ruleFeatureCallID ) )
            	    // InternalXcore.g:5385:8: ( ruleFeatureCallID )
            	    {
            	    // InternalXcore.g:5385:8: ( ruleFeatureCallID )
            	    // InternalXcore.g:5386:9: ruleFeatureCallID
            	    {
            	    if ( state.backtracking==0 ) {

            	      									if (current==null) {
            	      										current = createModelElement(grammarAccess.getXMemberFeatureCallRule());
            	      									}
            	      								
            	    }
            	    if ( state.backtracking==0 ) {

            	      									newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getFeatureJvmIdentifiableElementCrossReference_1_0_0_0_2_0());
            	      								
            	    }
            	    pushFollow(FOLLOW_11);
            	    ruleFeatureCallID();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      									afterParserOrEnumRuleCall();
            	      								
            	    }

            	    }


            	    }

            	    if ( state.backtracking==0 ) {

            	      							newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getOpSingleAssignParserRuleCall_1_0_0_0_3());
            	      						
            	    }
            	    pushFollow(FOLLOW_75);
            	    ruleOpSingleAssign();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      							afterParserOrEnumRuleCall();
            	      						
            	    }

            	    }


            	    }

            	    // InternalXcore.g:5409:5: ( (lv_value_6_0= ruleXAssignment ) )
            	    // InternalXcore.g:5410:6: (lv_value_6_0= ruleXAssignment )
            	    {
            	    // InternalXcore.g:5410:6: (lv_value_6_0= ruleXAssignment )
            	    // InternalXcore.g:5411:7: lv_value_6_0= ruleXAssignment
            	    {
            	    if ( state.backtracking==0 ) {

            	      							newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getValueXAssignmentParserRuleCall_1_0_1_0());
            	      						
            	    }
            	    pushFollow(FOLLOW_92);
            	    lv_value_6_0=ruleXAssignment();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      							if (current==null) {
            	      								current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
            	      							}
            	      							set(
            	      								current,
            	      								"value",
            	      								lv_value_6_0,
            	      								"org.eclipse.xtext.xbase.Xbase.XAssignment");
            	      							afterParserOrEnumRuleCall();
            	      						
            	    }

            	    }


            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalXcore.g:5430:4: ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )=> ( () (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) ) ) ) (otherlv_11= '<' ( (lv_typeArguments_12_0= ruleJvmArgumentTypeReference ) ) (otherlv_13= ',' ( (lv_typeArguments_14_0= ruleJvmArgumentTypeReference ) ) )* otherlv_15= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_17_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* ) )? otherlv_22= ')' )? ( ( ( () '[' ) )=> (lv_memberCallArguments_23_0= ruleXClosure ) )? )
            	    {
            	    // InternalXcore.g:5430:4: ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )=> ( () (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) ) ) ) (otherlv_11= '<' ( (lv_typeArguments_12_0= ruleJvmArgumentTypeReference ) ) (otherlv_13= ',' ( (lv_typeArguments_14_0= ruleJvmArgumentTypeReference ) ) )* otherlv_15= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_17_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* ) )? otherlv_22= ')' )? ( ( ( () '[' ) )=> (lv_memberCallArguments_23_0= ruleXClosure ) )? )
            	    // InternalXcore.g:5431:5: ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )=> ( () (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) ) ) ) (otherlv_11= '<' ( (lv_typeArguments_12_0= ruleJvmArgumentTypeReference ) ) (otherlv_13= ',' ( (lv_typeArguments_14_0= ruleJvmArgumentTypeReference ) ) )* otherlv_15= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_17_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* ) )? otherlv_22= ')' )? ( ( ( () '[' ) )=> (lv_memberCallArguments_23_0= ruleXClosure ) )?
            	    {
            	    // InternalXcore.g:5431:5: ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )=> ( () (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) ) ) )
            	    // InternalXcore.g:5432:6: ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )=> ( () (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) ) )
            	    {
            	    // InternalXcore.g:5452:6: ( () (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) ) )
            	    // InternalXcore.g:5453:7: () (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) )
            	    {
            	    // InternalXcore.g:5453:7: ()
            	    // InternalXcore.g:5454:8: 
            	    {
            	    if ( state.backtracking==0 ) {

            	      								current = forceCreateModelElementAndSet(
            	      									grammarAccess.getXMemberFeatureCallAccess().getXMemberFeatureCallMemberCallTargetAction_1_1_0_0_0(),
            	      									current);
            	      							
            	    }

            	    }

            	    // InternalXcore.g:5460:7: (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) )
            	    int alt105=3;
            	    switch ( input.LA(1) ) {
            	    case 67:
            	        {
            	        alt105=1;
            	        }
            	        break;
            	    case 95:
            	        {
            	        alt105=2;
            	        }
            	        break;
            	    case 94:
            	        {
            	        alt105=3;
            	        }
            	        break;
            	    default:
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 105, 0, input);

            	        throw nvae;
            	    }

            	    switch (alt105) {
            	        case 1 :
            	            // InternalXcore.g:5461:8: otherlv_8= '.'
            	            {
            	            otherlv_8=(Token)match(input,67,FOLLOW_94); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              								newLeafNode(otherlv_8, grammarAccess.getXMemberFeatureCallAccess().getFullStopKeyword_1_1_0_0_1_0());
            	              							
            	            }

            	            }
            	            break;
            	        case 2 :
            	            // InternalXcore.g:5466:8: ( (lv_nullSafe_9_0= '?.' ) )
            	            {
            	            // InternalXcore.g:5466:8: ( (lv_nullSafe_9_0= '?.' ) )
            	            // InternalXcore.g:5467:9: (lv_nullSafe_9_0= '?.' )
            	            {
            	            // InternalXcore.g:5467:9: (lv_nullSafe_9_0= '?.' )
            	            // InternalXcore.g:5468:10: lv_nullSafe_9_0= '?.'
            	            {
            	            lv_nullSafe_9_0=(Token)match(input,95,FOLLOW_94); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              										newLeafNode(lv_nullSafe_9_0, grammarAccess.getXMemberFeatureCallAccess().getNullSafeQuestionMarkFullStopKeyword_1_1_0_0_1_1_0());
            	              									
            	            }
            	            if ( state.backtracking==0 ) {

            	              										if (current==null) {
            	              											current = createModelElement(grammarAccess.getXMemberFeatureCallRule());
            	              										}
            	              										setWithLastConsumed(current, "nullSafe", lv_nullSafe_9_0 != null, "?.");
            	              									
            	            }

            	            }


            	            }


            	            }
            	            break;
            	        case 3 :
            	            // InternalXcore.g:5481:8: ( (lv_explicitStatic_10_0= '::' ) )
            	            {
            	            // InternalXcore.g:5481:8: ( (lv_explicitStatic_10_0= '::' ) )
            	            // InternalXcore.g:5482:9: (lv_explicitStatic_10_0= '::' )
            	            {
            	            // InternalXcore.g:5482:9: (lv_explicitStatic_10_0= '::' )
            	            // InternalXcore.g:5483:10: lv_explicitStatic_10_0= '::'
            	            {
            	            lv_explicitStatic_10_0=(Token)match(input,94,FOLLOW_94); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              										newLeafNode(lv_explicitStatic_10_0, grammarAccess.getXMemberFeatureCallAccess().getExplicitStaticColonColonKeyword_1_1_0_0_1_2_0());
            	              									
            	            }
            	            if ( state.backtracking==0 ) {

            	              										if (current==null) {
            	              											current = createModelElement(grammarAccess.getXMemberFeatureCallRule());
            	              										}
            	              										setWithLastConsumed(current, "explicitStatic", lv_explicitStatic_10_0 != null, "::");
            	              									
            	            }

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	    // InternalXcore.g:5498:5: (otherlv_11= '<' ( (lv_typeArguments_12_0= ruleJvmArgumentTypeReference ) ) (otherlv_13= ',' ( (lv_typeArguments_14_0= ruleJvmArgumentTypeReference ) ) )* otherlv_15= '>' )?
            	    int alt107=2;
            	    int LA107_0 = input.LA(1);

            	    if ( (LA107_0==23) ) {
            	        alt107=1;
            	    }
            	    switch (alt107) {
            	        case 1 :
            	            // InternalXcore.g:5499:6: otherlv_11= '<' ( (lv_typeArguments_12_0= ruleJvmArgumentTypeReference ) ) (otherlv_13= ',' ( (lv_typeArguments_14_0= ruleJvmArgumentTypeReference ) ) )* otherlv_15= '>'
            	            {
            	            otherlv_11=(Token)match(input,23,FOLLOW_95); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              						newLeafNode(otherlv_11, grammarAccess.getXMemberFeatureCallAccess().getLessThanSignKeyword_1_1_1_0());
            	              					
            	            }
            	            // InternalXcore.g:5503:6: ( (lv_typeArguments_12_0= ruleJvmArgumentTypeReference ) )
            	            // InternalXcore.g:5504:7: (lv_typeArguments_12_0= ruleJvmArgumentTypeReference )
            	            {
            	            // InternalXcore.g:5504:7: (lv_typeArguments_12_0= ruleJvmArgumentTypeReference )
            	            // InternalXcore.g:5505:8: lv_typeArguments_12_0= ruleJvmArgumentTypeReference
            	            {
            	            if ( state.backtracking==0 ) {

            	              								newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_1_1_0());
            	              							
            	            }
            	            pushFollow(FOLLOW_18);
            	            lv_typeArguments_12_0=ruleJvmArgumentTypeReference();

            	            state._fsp--;
            	            if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              								if (current==null) {
            	              									current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
            	              								}
            	              								add(
            	              									current,
            	              									"typeArguments",
            	              									lv_typeArguments_12_0,
            	              									"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
            	              								afterParserOrEnumRuleCall();
            	              							
            	            }

            	            }


            	            }

            	            // InternalXcore.g:5522:6: (otherlv_13= ',' ( (lv_typeArguments_14_0= ruleJvmArgumentTypeReference ) ) )*
            	            loop106:
            	            do {
            	                int alt106=2;
            	                int LA106_0 = input.LA(1);

            	                if ( (LA106_0==16) ) {
            	                    alt106=1;
            	                }


            	                switch (alt106) {
            	            	case 1 :
            	            	    // InternalXcore.g:5523:7: otherlv_13= ',' ( (lv_typeArguments_14_0= ruleJvmArgumentTypeReference ) )
            	            	    {
            	            	    otherlv_13=(Token)match(input,16,FOLLOW_95); if (state.failed) return current;
            	            	    if ( state.backtracking==0 ) {

            	            	      							newLeafNode(otherlv_13, grammarAccess.getXMemberFeatureCallAccess().getCommaKeyword_1_1_1_2_0());
            	            	      						
            	            	    }
            	            	    // InternalXcore.g:5527:7: ( (lv_typeArguments_14_0= ruleJvmArgumentTypeReference ) )
            	            	    // InternalXcore.g:5528:8: (lv_typeArguments_14_0= ruleJvmArgumentTypeReference )
            	            	    {
            	            	    // InternalXcore.g:5528:8: (lv_typeArguments_14_0= ruleJvmArgumentTypeReference )
            	            	    // InternalXcore.g:5529:9: lv_typeArguments_14_0= ruleJvmArgumentTypeReference
            	            	    {
            	            	    if ( state.backtracking==0 ) {

            	            	      									newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_1_2_1_0());
            	            	      								
            	            	    }
            	            	    pushFollow(FOLLOW_18);
            	            	    lv_typeArguments_14_0=ruleJvmArgumentTypeReference();

            	            	    state._fsp--;
            	            	    if (state.failed) return current;
            	            	    if ( state.backtracking==0 ) {

            	            	      									if (current==null) {
            	            	      										current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
            	            	      									}
            	            	      									add(
            	            	      										current,
            	            	      										"typeArguments",
            	            	      										lv_typeArguments_14_0,
            	            	      										"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
            	            	      									afterParserOrEnumRuleCall();
            	            	      								
            	            	    }

            	            	    }


            	            	    }


            	            	    }
            	            	    break;

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

            	            otherlv_15=(Token)match(input,24,FOLLOW_94); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              						newLeafNode(otherlv_15, grammarAccess.getXMemberFeatureCallAccess().getGreaterThanSignKeyword_1_1_1_3());
            	              					
            	            }

            	            }
            	            break;

            	    }

            	    // InternalXcore.g:5552:5: ( ( ruleIdOrSuper ) )
            	    // InternalXcore.g:5553:6: ( ruleIdOrSuper )
            	    {
            	    // InternalXcore.g:5553:6: ( ruleIdOrSuper )
            	    // InternalXcore.g:5554:7: ruleIdOrSuper
            	    {
            	    if ( state.backtracking==0 ) {

            	      							if (current==null) {
            	      								current = createModelElement(grammarAccess.getXMemberFeatureCallRule());
            	      							}
            	      						
            	    }
            	    if ( state.backtracking==0 ) {

            	      							newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getFeatureJvmIdentifiableElementCrossReference_1_1_2_0());
            	      						
            	    }
            	    pushFollow(FOLLOW_96);
            	    ruleIdOrSuper();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      							afterParserOrEnumRuleCall();
            	      						
            	    }

            	    }


            	    }

            	    // InternalXcore.g:5568:5: ( ( ( ( '(' ) )=> (lv_explicitOperationCall_17_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* ) )? otherlv_22= ')' )?
            	    int alt110=2;
            	    alt110 = dfa110.predict(input);
            	    switch (alt110) {
            	        case 1 :
            	            // InternalXcore.g:5569:6: ( ( ( '(' ) )=> (lv_explicitOperationCall_17_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* ) )? otherlv_22= ')'
            	            {
            	            // InternalXcore.g:5569:6: ( ( ( '(' ) )=> (lv_explicitOperationCall_17_0= '(' ) )
            	            // InternalXcore.g:5570:7: ( ( '(' ) )=> (lv_explicitOperationCall_17_0= '(' )
            	            {
            	            // InternalXcore.g:5574:7: (lv_explicitOperationCall_17_0= '(' )
            	            // InternalXcore.g:5575:8: lv_explicitOperationCall_17_0= '('
            	            {
            	            lv_explicitOperationCall_17_0=(Token)match(input,15,FOLLOW_97); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              								newLeafNode(lv_explicitOperationCall_17_0, grammarAccess.getXMemberFeatureCallAccess().getExplicitOperationCallLeftParenthesisKeyword_1_1_3_0_0());
            	              							
            	            }
            	            if ( state.backtracking==0 ) {

            	              								if (current==null) {
            	              									current = createModelElement(grammarAccess.getXMemberFeatureCallRule());
            	              								}
            	              								setWithLastConsumed(current, "explicitOperationCall", lv_explicitOperationCall_17_0 != null, "(");
            	              							
            	            }

            	            }


            	            }

            	            // InternalXcore.g:5587:6: ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* ) )?
            	            int alt109=3;
            	            alt109 = dfa109.predict(input);
            	            switch (alt109) {
            	                case 1 :
            	                    // InternalXcore.g:5588:7: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) )
            	                    {
            	                    // InternalXcore.g:5588:7: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) )
            	                    // InternalXcore.g:5589:8: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure )
            	                    {
            	                    // InternalXcore.g:5614:8: (lv_memberCallArguments_18_0= ruleXShortClosure )
            	                    // InternalXcore.g:5615:9: lv_memberCallArguments_18_0= ruleXShortClosure
            	                    {
            	                    if ( state.backtracking==0 ) {

            	                      									newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXShortClosureParserRuleCall_1_1_3_1_0_0());
            	                      								
            	                    }
            	                    pushFollow(FOLLOW_98);
            	                    lv_memberCallArguments_18_0=ruleXShortClosure();

            	                    state._fsp--;
            	                    if (state.failed) return current;
            	                    if ( state.backtracking==0 ) {

            	                      									if (current==null) {
            	                      										current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
            	                      									}
            	                      									add(
            	                      										current,
            	                      										"memberCallArguments",
            	                      										lv_memberCallArguments_18_0,
            	                      										"org.eclipse.xtext.xbase.Xbase.XShortClosure");
            	                      									afterParserOrEnumRuleCall();
            	                      								
            	                    }

            	                    }


            	                    }


            	                    }
            	                    break;
            	                case 2 :
            	                    // InternalXcore.g:5633:7: ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* )
            	                    {
            	                    // InternalXcore.g:5633:7: ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* )
            	                    // InternalXcore.g:5634:8: ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )*
            	                    {
            	                    // InternalXcore.g:5634:8: ( (lv_memberCallArguments_19_0= ruleXExpression ) )
            	                    // InternalXcore.g:5635:9: (lv_memberCallArguments_19_0= ruleXExpression )
            	                    {
            	                    // InternalXcore.g:5635:9: (lv_memberCallArguments_19_0= ruleXExpression )
            	                    // InternalXcore.g:5636:10: lv_memberCallArguments_19_0= ruleXExpression
            	                    {
            	                    if ( state.backtracking==0 ) {

            	                      										newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXExpressionParserRuleCall_1_1_3_1_1_0_0());
            	                      									
            	                    }
            	                    pushFollow(FOLLOW_10);
            	                    lv_memberCallArguments_19_0=ruleXExpression();

            	                    state._fsp--;
            	                    if (state.failed) return current;
            	                    if ( state.backtracking==0 ) {

            	                      										if (current==null) {
            	                      											current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
            	                      										}
            	                      										add(
            	                      											current,
            	                      											"memberCallArguments",
            	                      											lv_memberCallArguments_19_0,
            	                      											"org.eclipse.xtext.xbase.Xbase.XExpression");
            	                      										afterParserOrEnumRuleCall();
            	                      									
            	                    }

            	                    }


            	                    }

            	                    // InternalXcore.g:5653:8: (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )*
            	                    loop108:
            	                    do {
            	                        int alt108=2;
            	                        int LA108_0 = input.LA(1);

            	                        if ( (LA108_0==16) ) {
            	                            alt108=1;
            	                        }


            	                        switch (alt108) {
            	                    	case 1 :
            	                    	    // InternalXcore.g:5654:9: otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) )
            	                    	    {
            	                    	    otherlv_20=(Token)match(input,16,FOLLOW_75); if (state.failed) return current;
            	                    	    if ( state.backtracking==0 ) {

            	                    	      									newLeafNode(otherlv_20, grammarAccess.getXMemberFeatureCallAccess().getCommaKeyword_1_1_3_1_1_1_0());
            	                    	      								
            	                    	    }
            	                    	    // InternalXcore.g:5658:9: ( (lv_memberCallArguments_21_0= ruleXExpression ) )
            	                    	    // InternalXcore.g:5659:10: (lv_memberCallArguments_21_0= ruleXExpression )
            	                    	    {
            	                    	    // InternalXcore.g:5659:10: (lv_memberCallArguments_21_0= ruleXExpression )
            	                    	    // InternalXcore.g:5660:11: lv_memberCallArguments_21_0= ruleXExpression
            	                    	    {
            	                    	    if ( state.backtracking==0 ) {

            	                    	      											newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXExpressionParserRuleCall_1_1_3_1_1_1_1_0());
            	                    	      										
            	                    	    }
            	                    	    pushFollow(FOLLOW_10);
            	                    	    lv_memberCallArguments_21_0=ruleXExpression();

            	                    	    state._fsp--;
            	                    	    if (state.failed) return current;
            	                    	    if ( state.backtracking==0 ) {

            	                    	      											if (current==null) {
            	                    	      												current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
            	                    	      											}
            	                    	      											add(
            	                    	      												current,
            	                    	      												"memberCallArguments",
            	                    	      												lv_memberCallArguments_21_0,
            	                    	      												"org.eclipse.xtext.xbase.Xbase.XExpression");
            	                    	      											afterParserOrEnumRuleCall();
            	                    	      										
            	                    	    }

            	                    	    }


            	                    	    }


            	                    	    }
            	                    	    break;

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


            	                    }


            	                    }
            	                    break;

            	            }

            	            otherlv_22=(Token)match(input,17,FOLLOW_99); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              						newLeafNode(otherlv_22, grammarAccess.getXMemberFeatureCallAccess().getRightParenthesisKeyword_1_1_3_2());
            	              					
            	            }

            	            }
            	            break;

            	    }

            	    // InternalXcore.g:5685:5: ( ( ( () '[' ) )=> (lv_memberCallArguments_23_0= ruleXClosure ) )?
            	    int alt111=2;
            	    alt111 = dfa111.predict(input);
            	    switch (alt111) {
            	        case 1 :
            	            // InternalXcore.g:5686:6: ( ( () '[' ) )=> (lv_memberCallArguments_23_0= ruleXClosure )
            	            {
            	            // InternalXcore.g:5692:6: (lv_memberCallArguments_23_0= ruleXClosure )
            	            // InternalXcore.g:5693:7: lv_memberCallArguments_23_0= ruleXClosure
            	            {
            	            if ( state.backtracking==0 ) {

            	              							newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXClosureParserRuleCall_1_1_4_0());
            	              						
            	            }
            	            pushFollow(FOLLOW_92);
            	            lv_memberCallArguments_23_0=ruleXClosure();

            	            state._fsp--;
            	            if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              							if (current==null) {
            	              								current = createModelElementForParent(grammarAccess.getXMemberFeatureCallRule());
            	              							}
            	              							add(
            	              								current,
            	              								"memberCallArguments",
            	              								lv_memberCallArguments_23_0,
            	              								"org.eclipse.xtext.xbase.Xbase.XClosure");
            	              							afterParserOrEnumRuleCall();
            	              						
            	            }

            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXMemberFeatureCall"


    // $ANTLR start "entryRuleXPrimaryExpression"
    // InternalXcore.g:5716:1: entryRuleXPrimaryExpression returns [EObject current=null] : iv_ruleXPrimaryExpression= ruleXPrimaryExpression EOF ;
    public final EObject entryRuleXPrimaryExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXPrimaryExpression = null;


        try {
            // InternalXcore.g:5716:59: (iv_ruleXPrimaryExpression= ruleXPrimaryExpression EOF )
            // InternalXcore.g:5717:2: iv_ruleXPrimaryExpression= ruleXPrimaryExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXPrimaryExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXPrimaryExpression=ruleXPrimaryExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXPrimaryExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXPrimaryExpression"


    // $ANTLR start "ruleXPrimaryExpression"
    // InternalXcore.g:5723:1: ruleXPrimaryExpression returns [EObject current=null] : (this_XConstructorCall_0= ruleXConstructorCall | this_XBlockExpression_1= ruleXBlockExpression | this_XSwitchExpression_2= ruleXSwitchExpression | ( ( ( () 'synchronized' '(' ) )=>this_XSynchronizedExpression_3= ruleXSynchronizedExpression ) | this_XFeatureCall_4= ruleXFeatureCall | this_XLiteral_5= ruleXLiteral | this_XIfExpression_6= ruleXIfExpression | ( ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=>this_XForLoopExpression_7= ruleXForLoopExpression ) | this_XBasicForLoopExpression_8= ruleXBasicForLoopExpression | this_XWhileExpression_9= ruleXWhileExpression | this_XDoWhileExpression_10= ruleXDoWhileExpression | this_XThrowExpression_11= ruleXThrowExpression | this_XReturnExpression_12= ruleXReturnExpression | this_XTryCatchFinallyExpression_13= ruleXTryCatchFinallyExpression | this_XParenthesizedExpression_14= ruleXParenthesizedExpression ) ;
    public final EObject ruleXPrimaryExpression() throws RecognitionException {
        EObject current = null;

        EObject this_XConstructorCall_0 = null;

        EObject this_XBlockExpression_1 = null;

        EObject this_XSwitchExpression_2 = null;

        EObject this_XSynchronizedExpression_3 = null;

        EObject this_XFeatureCall_4 = null;

        EObject this_XLiteral_5 = null;

        EObject this_XIfExpression_6 = null;

        EObject this_XForLoopExpression_7 = null;

        EObject this_XBasicForLoopExpression_8 = null;

        EObject this_XWhileExpression_9 = null;

        EObject this_XDoWhileExpression_10 = null;

        EObject this_XThrowExpression_11 = null;

        EObject this_XReturnExpression_12 = null;

        EObject this_XTryCatchFinallyExpression_13 = null;

        EObject this_XParenthesizedExpression_14 = null;



        	enterRule();

        try {
            // InternalXcore.g:5729:2: ( (this_XConstructorCall_0= ruleXConstructorCall | this_XBlockExpression_1= ruleXBlockExpression | this_XSwitchExpression_2= ruleXSwitchExpression | ( ( ( () 'synchronized' '(' ) )=>this_XSynchronizedExpression_3= ruleXSynchronizedExpression ) | this_XFeatureCall_4= ruleXFeatureCall | this_XLiteral_5= ruleXLiteral | this_XIfExpression_6= ruleXIfExpression | ( ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=>this_XForLoopExpression_7= ruleXForLoopExpression ) | this_XBasicForLoopExpression_8= ruleXBasicForLoopExpression | this_XWhileExpression_9= ruleXWhileExpression | this_XDoWhileExpression_10= ruleXDoWhileExpression | this_XThrowExpression_11= ruleXThrowExpression | this_XReturnExpression_12= ruleXReturnExpression | this_XTryCatchFinallyExpression_13= ruleXTryCatchFinallyExpression | this_XParenthesizedExpression_14= ruleXParenthesizedExpression ) )
            // InternalXcore.g:5730:2: (this_XConstructorCall_0= ruleXConstructorCall | this_XBlockExpression_1= ruleXBlockExpression | this_XSwitchExpression_2= ruleXSwitchExpression | ( ( ( () 'synchronized' '(' ) )=>this_XSynchronizedExpression_3= ruleXSynchronizedExpression ) | this_XFeatureCall_4= ruleXFeatureCall | this_XLiteral_5= ruleXLiteral | this_XIfExpression_6= ruleXIfExpression | ( ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=>this_XForLoopExpression_7= ruleXForLoopExpression ) | this_XBasicForLoopExpression_8= ruleXBasicForLoopExpression | this_XWhileExpression_9= ruleXWhileExpression | this_XDoWhileExpression_10= ruleXDoWhileExpression | this_XThrowExpression_11= ruleXThrowExpression | this_XReturnExpression_12= ruleXReturnExpression | this_XTryCatchFinallyExpression_13= ruleXTryCatchFinallyExpression | this_XParenthesizedExpression_14= ruleXParenthesizedExpression )
            {
            // InternalXcore.g:5730:2: (this_XConstructorCall_0= ruleXConstructorCall | this_XBlockExpression_1= ruleXBlockExpression | this_XSwitchExpression_2= ruleXSwitchExpression | ( ( ( () 'synchronized' '(' ) )=>this_XSynchronizedExpression_3= ruleXSynchronizedExpression ) | this_XFeatureCall_4= ruleXFeatureCall | this_XLiteral_5= ruleXLiteral | this_XIfExpression_6= ruleXIfExpression | ( ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=>this_XForLoopExpression_7= ruleXForLoopExpression ) | this_XBasicForLoopExpression_8= ruleXBasicForLoopExpression | this_XWhileExpression_9= ruleXWhileExpression | this_XDoWhileExpression_10= ruleXDoWhileExpression | this_XThrowExpression_11= ruleXThrowExpression | this_XReturnExpression_12= ruleXReturnExpression | this_XTryCatchFinallyExpression_13= ruleXTryCatchFinallyExpression | this_XParenthesizedExpression_14= ruleXParenthesizedExpression )
            int alt113=15;
            alt113 = dfa113.predict(input);
            switch (alt113) {
                case 1 :
                    // InternalXcore.g:5731:3: this_XConstructorCall_0= ruleXConstructorCall
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXConstructorCallParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XConstructorCall_0=ruleXConstructorCall();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XConstructorCall_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:5740:3: this_XBlockExpression_1= ruleXBlockExpression
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXBlockExpressionParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XBlockExpression_1=ruleXBlockExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XBlockExpression_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 3 :
                    // InternalXcore.g:5749:3: this_XSwitchExpression_2= ruleXSwitchExpression
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXSwitchExpressionParserRuleCall_2());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XSwitchExpression_2=ruleXSwitchExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XSwitchExpression_2;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalXcore.g:5758:3: ( ( ( () 'synchronized' '(' ) )=>this_XSynchronizedExpression_3= ruleXSynchronizedExpression )
                    {
                    // InternalXcore.g:5758:3: ( ( ( () 'synchronized' '(' ) )=>this_XSynchronizedExpression_3= ruleXSynchronizedExpression )
                    // InternalXcore.g:5759:4: ( ( () 'synchronized' '(' ) )=>this_XSynchronizedExpression_3= ruleXSynchronizedExpression
                    {
                    if ( state.backtracking==0 ) {

                      				newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXSynchronizedExpressionParserRuleCall_3());
                      			
                    }
                    pushFollow(FOLLOW_2);
                    this_XSynchronizedExpression_3=ruleXSynchronizedExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = this_XSynchronizedExpression_3;
                      				afterParserOrEnumRuleCall();
                      			
                    }

                    }


                    }
                    break;
                case 5 :
                    // InternalXcore.g:5776:3: this_XFeatureCall_4= ruleXFeatureCall
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXFeatureCallParserRuleCall_4());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XFeatureCall_4=ruleXFeatureCall();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XFeatureCall_4;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 6 :
                    // InternalXcore.g:5785:3: this_XLiteral_5= ruleXLiteral
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXLiteralParserRuleCall_5());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XLiteral_5=ruleXLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XLiteral_5;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 7 :
                    // InternalXcore.g:5794:3: this_XIfExpression_6= ruleXIfExpression
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXIfExpressionParserRuleCall_6());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XIfExpression_6=ruleXIfExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XIfExpression_6;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 8 :
                    // InternalXcore.g:5803:3: ( ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=>this_XForLoopExpression_7= ruleXForLoopExpression )
                    {
                    // InternalXcore.g:5803:3: ( ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=>this_XForLoopExpression_7= ruleXForLoopExpression )
                    // InternalXcore.g:5804:4: ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=>this_XForLoopExpression_7= ruleXForLoopExpression
                    {
                    if ( state.backtracking==0 ) {

                      				newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXForLoopExpressionParserRuleCall_7());
                      			
                    }
                    pushFollow(FOLLOW_2);
                    this_XForLoopExpression_7=ruleXForLoopExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = this_XForLoopExpression_7;
                      				afterParserOrEnumRuleCall();
                      			
                    }

                    }


                    }
                    break;
                case 9 :
                    // InternalXcore.g:5827:3: this_XBasicForLoopExpression_8= ruleXBasicForLoopExpression
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXBasicForLoopExpressionParserRuleCall_8());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XBasicForLoopExpression_8=ruleXBasicForLoopExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XBasicForLoopExpression_8;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 10 :
                    // InternalXcore.g:5836:3: this_XWhileExpression_9= ruleXWhileExpression
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXWhileExpressionParserRuleCall_9());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XWhileExpression_9=ruleXWhileExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XWhileExpression_9;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 11 :
                    // InternalXcore.g:5845:3: this_XDoWhileExpression_10= ruleXDoWhileExpression
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXDoWhileExpressionParserRuleCall_10());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XDoWhileExpression_10=ruleXDoWhileExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XDoWhileExpression_10;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 12 :
                    // InternalXcore.g:5854:3: this_XThrowExpression_11= ruleXThrowExpression
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXThrowExpressionParserRuleCall_11());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XThrowExpression_11=ruleXThrowExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XThrowExpression_11;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 13 :
                    // InternalXcore.g:5863:3: this_XReturnExpression_12= ruleXReturnExpression
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXReturnExpressionParserRuleCall_12());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XReturnExpression_12=ruleXReturnExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XReturnExpression_12;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 14 :
                    // InternalXcore.g:5872:3: this_XTryCatchFinallyExpression_13= ruleXTryCatchFinallyExpression
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXTryCatchFinallyExpressionParserRuleCall_13());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XTryCatchFinallyExpression_13=ruleXTryCatchFinallyExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XTryCatchFinallyExpression_13;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 15 :
                    // InternalXcore.g:5881:3: this_XParenthesizedExpression_14= ruleXParenthesizedExpression
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXParenthesizedExpressionParserRuleCall_14());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XParenthesizedExpression_14=ruleXParenthesizedExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XParenthesizedExpression_14;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXPrimaryExpression"


    // $ANTLR start "entryRuleXLiteral"
    // InternalXcore.g:5893:1: entryRuleXLiteral returns [EObject current=null] : iv_ruleXLiteral= ruleXLiteral EOF ;
    public final EObject entryRuleXLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXLiteral = null;


        try {
            // InternalXcore.g:5893:49: (iv_ruleXLiteral= ruleXLiteral EOF )
            // InternalXcore.g:5894:2: iv_ruleXLiteral= ruleXLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXLiteralRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXLiteral=ruleXLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXLiteral; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXLiteral"


    // $ANTLR start "ruleXLiteral"
    // InternalXcore.g:5900:1: ruleXLiteral returns [EObject current=null] : (this_XCollectionLiteral_0= ruleXCollectionLiteral | ( ( ( () '[' ) )=>this_XClosure_1= ruleXClosure ) | this_XBooleanLiteral_2= ruleXBooleanLiteral | this_XNumberLiteral_3= ruleXNumberLiteral | this_XNullLiteral_4= ruleXNullLiteral | this_XStringLiteral_5= ruleXStringLiteral | this_XTypeLiteral_6= ruleXTypeLiteral ) ;
    public final EObject ruleXLiteral() throws RecognitionException {
        EObject current = null;

        EObject this_XCollectionLiteral_0 = null;

        EObject this_XClosure_1 = null;

        EObject this_XBooleanLiteral_2 = null;

        EObject this_XNumberLiteral_3 = null;

        EObject this_XNullLiteral_4 = null;

        EObject this_XStringLiteral_5 = null;

        EObject this_XTypeLiteral_6 = null;



        	enterRule();

        try {
            // InternalXcore.g:5906:2: ( (this_XCollectionLiteral_0= ruleXCollectionLiteral | ( ( ( () '[' ) )=>this_XClosure_1= ruleXClosure ) | this_XBooleanLiteral_2= ruleXBooleanLiteral | this_XNumberLiteral_3= ruleXNumberLiteral | this_XNullLiteral_4= ruleXNullLiteral | this_XStringLiteral_5= ruleXStringLiteral | this_XTypeLiteral_6= ruleXTypeLiteral ) )
            // InternalXcore.g:5907:2: (this_XCollectionLiteral_0= ruleXCollectionLiteral | ( ( ( () '[' ) )=>this_XClosure_1= ruleXClosure ) | this_XBooleanLiteral_2= ruleXBooleanLiteral | this_XNumberLiteral_3= ruleXNumberLiteral | this_XNullLiteral_4= ruleXNullLiteral | this_XStringLiteral_5= ruleXStringLiteral | this_XTypeLiteral_6= ruleXTypeLiteral )
            {
            // InternalXcore.g:5907:2: (this_XCollectionLiteral_0= ruleXCollectionLiteral | ( ( ( () '[' ) )=>this_XClosure_1= ruleXClosure ) | this_XBooleanLiteral_2= ruleXBooleanLiteral | this_XNumberLiteral_3= ruleXNumberLiteral | this_XNullLiteral_4= ruleXNullLiteral | this_XStringLiteral_5= ruleXStringLiteral | this_XTypeLiteral_6= ruleXTypeLiteral )
            int alt114=7;
            int LA114_0 = input.LA(1);

            if ( (LA114_0==96) ) {
                alt114=1;
            }
            else if ( (LA114_0==59) && (synpred24_InternalXcore())) {
                alt114=2;
            }
            else if ( ((LA114_0>=110 && LA114_0<=111)) ) {
                alt114=3;
            }
            else if ( ((LA114_0>=RULE_INT && LA114_0<=RULE_DECIMAL)) ) {
                alt114=4;
            }
            else if ( (LA114_0==112) ) {
                alt114=5;
            }
            else if ( (LA114_0==RULE_STRING) ) {
                alt114=6;
            }
            else if ( (LA114_0==113) ) {
                alt114=7;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 114, 0, input);

                throw nvae;
            }
            switch (alt114) {
                case 1 :
                    // InternalXcore.g:5908:3: this_XCollectionLiteral_0= ruleXCollectionLiteral
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXLiteralAccess().getXCollectionLiteralParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XCollectionLiteral_0=ruleXCollectionLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XCollectionLiteral_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:5917:3: ( ( ( () '[' ) )=>this_XClosure_1= ruleXClosure )
                    {
                    // InternalXcore.g:5917:3: ( ( ( () '[' ) )=>this_XClosure_1= ruleXClosure )
                    // InternalXcore.g:5918:4: ( ( () '[' ) )=>this_XClosure_1= ruleXClosure
                    {
                    if ( state.backtracking==0 ) {

                      				newCompositeNode(grammarAccess.getXLiteralAccess().getXClosureParserRuleCall_1());
                      			
                    }
                    pushFollow(FOLLOW_2);
                    this_XClosure_1=ruleXClosure();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = this_XClosure_1;
                      				afterParserOrEnumRuleCall();
                      			
                    }

                    }


                    }
                    break;
                case 3 :
                    // InternalXcore.g:5934:3: this_XBooleanLiteral_2= ruleXBooleanLiteral
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXLiteralAccess().getXBooleanLiteralParserRuleCall_2());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XBooleanLiteral_2=ruleXBooleanLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XBooleanLiteral_2;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 4 :
                    // InternalXcore.g:5943:3: this_XNumberLiteral_3= ruleXNumberLiteral
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXLiteralAccess().getXNumberLiteralParserRuleCall_3());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XNumberLiteral_3=ruleXNumberLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XNumberLiteral_3;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 5 :
                    // InternalXcore.g:5952:3: this_XNullLiteral_4= ruleXNullLiteral
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXLiteralAccess().getXNullLiteralParserRuleCall_4());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XNullLiteral_4=ruleXNullLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XNullLiteral_4;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 6 :
                    // InternalXcore.g:5961:3: this_XStringLiteral_5= ruleXStringLiteral
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXLiteralAccess().getXStringLiteralParserRuleCall_5());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XStringLiteral_5=ruleXStringLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XStringLiteral_5;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 7 :
                    // InternalXcore.g:5970:3: this_XTypeLiteral_6= ruleXTypeLiteral
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXLiteralAccess().getXTypeLiteralParserRuleCall_6());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XTypeLiteral_6=ruleXTypeLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XTypeLiteral_6;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXLiteral"


    // $ANTLR start "entryRuleXCollectionLiteral"
    // InternalXcore.g:5982:1: entryRuleXCollectionLiteral returns [EObject current=null] : iv_ruleXCollectionLiteral= ruleXCollectionLiteral EOF ;
    public final EObject entryRuleXCollectionLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXCollectionLiteral = null;


        try {
            // InternalXcore.g:5982:59: (iv_ruleXCollectionLiteral= ruleXCollectionLiteral EOF )
            // InternalXcore.g:5983:2: iv_ruleXCollectionLiteral= ruleXCollectionLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXCollectionLiteralRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXCollectionLiteral=ruleXCollectionLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXCollectionLiteral; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXCollectionLiteral"


    // $ANTLR start "ruleXCollectionLiteral"
    // InternalXcore.g:5989:1: ruleXCollectionLiteral returns [EObject current=null] : (this_XSetLiteral_0= ruleXSetLiteral | this_XListLiteral_1= ruleXListLiteral ) ;
    public final EObject ruleXCollectionLiteral() throws RecognitionException {
        EObject current = null;

        EObject this_XSetLiteral_0 = null;

        EObject this_XListLiteral_1 = null;



        	enterRule();

        try {
            // InternalXcore.g:5995:2: ( (this_XSetLiteral_0= ruleXSetLiteral | this_XListLiteral_1= ruleXListLiteral ) )
            // InternalXcore.g:5996:2: (this_XSetLiteral_0= ruleXSetLiteral | this_XListLiteral_1= ruleXListLiteral )
            {
            // InternalXcore.g:5996:2: (this_XSetLiteral_0= ruleXSetLiteral | this_XListLiteral_1= ruleXListLiteral )
            int alt115=2;
            int LA115_0 = input.LA(1);

            if ( (LA115_0==96) ) {
                int LA115_1 = input.LA(2);

                if ( (LA115_1==59) ) {
                    alt115=2;
                }
                else if ( (LA115_1==29) ) {
                    alt115=1;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return current;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 115, 1, input);

                    throw nvae;
                }
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 115, 0, input);

                throw nvae;
            }
            switch (alt115) {
                case 1 :
                    // InternalXcore.g:5997:3: this_XSetLiteral_0= ruleXSetLiteral
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXCollectionLiteralAccess().getXSetLiteralParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XSetLiteral_0=ruleXSetLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XSetLiteral_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:6006:3: this_XListLiteral_1= ruleXListLiteral
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXCollectionLiteralAccess().getXListLiteralParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XListLiteral_1=ruleXListLiteral();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XListLiteral_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXCollectionLiteral"


    // $ANTLR start "entryRuleXSetLiteral"
    // InternalXcore.g:6018:1: entryRuleXSetLiteral returns [EObject current=null] : iv_ruleXSetLiteral= ruleXSetLiteral EOF ;
    public final EObject entryRuleXSetLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXSetLiteral = null;


        try {
            // InternalXcore.g:6018:52: (iv_ruleXSetLiteral= ruleXSetLiteral EOF )
            // InternalXcore.g:6019:2: iv_ruleXSetLiteral= ruleXSetLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXSetLiteralRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXSetLiteral=ruleXSetLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXSetLiteral; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXSetLiteral"


    // $ANTLR start "ruleXSetLiteral"
    // InternalXcore.g:6025:1: ruleXSetLiteral returns [EObject current=null] : ( () otherlv_1= '#' otherlv_2= '{' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= '}' ) ;
    public final EObject ruleXSetLiteral() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_elements_3_0 = null;

        EObject lv_elements_5_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:6031:2: ( ( () otherlv_1= '#' otherlv_2= '{' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= '}' ) )
            // InternalXcore.g:6032:2: ( () otherlv_1= '#' otherlv_2= '{' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= '}' )
            {
            // InternalXcore.g:6032:2: ( () otherlv_1= '#' otherlv_2= '{' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= '}' )
            // InternalXcore.g:6033:3: () otherlv_1= '#' otherlv_2= '{' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= '}'
            {
            // InternalXcore.g:6033:3: ()
            // InternalXcore.g:6034:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXSetLiteralAccess().getXSetLiteralAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,96,FOLLOW_22); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXSetLiteralAccess().getNumberSignKeyword_1());
              		
            }
            otherlv_2=(Token)match(input,29,FOLLOW_69); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getXSetLiteralAccess().getLeftCurlyBracketKeyword_2());
              		
            }
            // InternalXcore.g:6048:3: ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )?
            int alt117=2;
            int LA117_0 = input.LA(1);

            if ( ((LA117_0>=RULE_STRING && LA117_0<=RULE_DECIMAL)||LA117_0==13||LA117_0==15||(LA117_0>=19 && LA117_0<=21)||LA117_0==23||(LA117_0>=25 && LA117_0<=29)||(LA117_0>=31 && LA117_0<=57)||LA117_0==59||LA117_0==62||LA117_0==66||(LA117_0>=68 && LA117_0<=69)||LA117_0==91||LA117_0==96||LA117_0==98||LA117_0==100||(LA117_0>=104 && LA117_0<=106)||(LA117_0>=109 && LA117_0<=116)||LA117_0==118) ) {
                alt117=1;
            }
            switch (alt117) {
                case 1 :
                    // InternalXcore.g:6049:4: ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )*
                    {
                    // InternalXcore.g:6049:4: ( (lv_elements_3_0= ruleXExpression ) )
                    // InternalXcore.g:6050:5: (lv_elements_3_0= ruleXExpression )
                    {
                    // InternalXcore.g:6050:5: (lv_elements_3_0= ruleXExpression )
                    // InternalXcore.g:6051:6: lv_elements_3_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXSetLiteralAccess().getElementsXExpressionParserRuleCall_3_0_0());
                      					
                    }
                    pushFollow(FOLLOW_100);
                    lv_elements_3_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXSetLiteralRule());
                      						}
                      						add(
                      							current,
                      							"elements",
                      							lv_elements_3_0,
                      							"org.eclipse.xtext.xbase.Xbase.XExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:6068:4: (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )*
                    loop116:
                    do {
                        int alt116=2;
                        int LA116_0 = input.LA(1);

                        if ( (LA116_0==16) ) {
                            alt116=1;
                        }


                        switch (alt116) {
                    	case 1 :
                    	    // InternalXcore.g:6069:5: otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) )
                    	    {
                    	    otherlv_4=(Token)match(input,16,FOLLOW_75); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_4, grammarAccess.getXSetLiteralAccess().getCommaKeyword_3_1_0());
                    	      				
                    	    }
                    	    // InternalXcore.g:6073:5: ( (lv_elements_5_0= ruleXExpression ) )
                    	    // InternalXcore.g:6074:6: (lv_elements_5_0= ruleXExpression )
                    	    {
                    	    // InternalXcore.g:6074:6: (lv_elements_5_0= ruleXExpression )
                    	    // InternalXcore.g:6075:7: lv_elements_5_0= ruleXExpression
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXSetLiteralAccess().getElementsXExpressionParserRuleCall_3_1_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_100);
                    	    lv_elements_5_0=ruleXExpression();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getXSetLiteralRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"elements",
                    	      								lv_elements_5_0,
                    	      								"org.eclipse.xtext.xbase.Xbase.XExpression");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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


                    }
                    break;

            }

            otherlv_6=(Token)match(input,30,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_6, grammarAccess.getXSetLiteralAccess().getRightCurlyBracketKeyword_4());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXSetLiteral"


    // $ANTLR start "entryRuleXListLiteral"
    // InternalXcore.g:6102:1: entryRuleXListLiteral returns [EObject current=null] : iv_ruleXListLiteral= ruleXListLiteral EOF ;
    public final EObject entryRuleXListLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXListLiteral = null;


        try {
            // InternalXcore.g:6102:53: (iv_ruleXListLiteral= ruleXListLiteral EOF )
            // InternalXcore.g:6103:2: iv_ruleXListLiteral= ruleXListLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXListLiteralRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXListLiteral=ruleXListLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXListLiteral; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXListLiteral"


    // $ANTLR start "ruleXListLiteral"
    // InternalXcore.g:6109:1: ruleXListLiteral returns [EObject current=null] : ( () otherlv_1= '#' otherlv_2= '[' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= ']' ) ;
    public final EObject ruleXListLiteral() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_elements_3_0 = null;

        EObject lv_elements_5_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:6115:2: ( ( () otherlv_1= '#' otherlv_2= '[' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= ']' ) )
            // InternalXcore.g:6116:2: ( () otherlv_1= '#' otherlv_2= '[' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= ']' )
            {
            // InternalXcore.g:6116:2: ( () otherlv_1= '#' otherlv_2= '[' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= ']' )
            // InternalXcore.g:6117:3: () otherlv_1= '#' otherlv_2= '[' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= ']'
            {
            // InternalXcore.g:6117:3: ()
            // InternalXcore.g:6118:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXListLiteralAccess().getXListLiteralAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,96,FOLLOW_101); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXListLiteralAccess().getNumberSignKeyword_1());
              		
            }
            otherlv_2=(Token)match(input,59,FOLLOW_102); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getXListLiteralAccess().getLeftSquareBracketKeyword_2());
              		
            }
            // InternalXcore.g:6132:3: ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )?
            int alt119=2;
            int LA119_0 = input.LA(1);

            if ( ((LA119_0>=RULE_STRING && LA119_0<=RULE_DECIMAL)||LA119_0==13||LA119_0==15||(LA119_0>=19 && LA119_0<=21)||LA119_0==23||(LA119_0>=25 && LA119_0<=29)||(LA119_0>=31 && LA119_0<=57)||LA119_0==59||LA119_0==62||LA119_0==66||(LA119_0>=68 && LA119_0<=69)||LA119_0==91||LA119_0==96||LA119_0==98||LA119_0==100||(LA119_0>=104 && LA119_0<=106)||(LA119_0>=109 && LA119_0<=116)||LA119_0==118) ) {
                alt119=1;
            }
            switch (alt119) {
                case 1 :
                    // InternalXcore.g:6133:4: ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )*
                    {
                    // InternalXcore.g:6133:4: ( (lv_elements_3_0= ruleXExpression ) )
                    // InternalXcore.g:6134:5: (lv_elements_3_0= ruleXExpression )
                    {
                    // InternalXcore.g:6134:5: (lv_elements_3_0= ruleXExpression )
                    // InternalXcore.g:6135:6: lv_elements_3_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXListLiteralAccess().getElementsXExpressionParserRuleCall_3_0_0());
                      					
                    }
                    pushFollow(FOLLOW_103);
                    lv_elements_3_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXListLiteralRule());
                      						}
                      						add(
                      							current,
                      							"elements",
                      							lv_elements_3_0,
                      							"org.eclipse.xtext.xbase.Xbase.XExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:6152:4: (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )*
                    loop118:
                    do {
                        int alt118=2;
                        int LA118_0 = input.LA(1);

                        if ( (LA118_0==16) ) {
                            alt118=1;
                        }


                        switch (alt118) {
                    	case 1 :
                    	    // InternalXcore.g:6153:5: otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) )
                    	    {
                    	    otherlv_4=(Token)match(input,16,FOLLOW_75); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_4, grammarAccess.getXListLiteralAccess().getCommaKeyword_3_1_0());
                    	      				
                    	    }
                    	    // InternalXcore.g:6157:5: ( (lv_elements_5_0= ruleXExpression ) )
                    	    // InternalXcore.g:6158:6: (lv_elements_5_0= ruleXExpression )
                    	    {
                    	    // InternalXcore.g:6158:6: (lv_elements_5_0= ruleXExpression )
                    	    // InternalXcore.g:6159:7: lv_elements_5_0= ruleXExpression
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXListLiteralAccess().getElementsXExpressionParserRuleCall_3_1_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_103);
                    	    lv_elements_5_0=ruleXExpression();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getXListLiteralRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"elements",
                    	      								lv_elements_5_0,
                    	      								"org.eclipse.xtext.xbase.Xbase.XExpression");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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


                    }
                    break;

            }

            otherlv_6=(Token)match(input,64,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_6, grammarAccess.getXListLiteralAccess().getRightSquareBracketKeyword_4());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXListLiteral"


    // $ANTLR start "entryRuleXClosure"
    // InternalXcore.g:6186:1: entryRuleXClosure returns [EObject current=null] : iv_ruleXClosure= ruleXClosure EOF ;
    public final EObject entryRuleXClosure() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXClosure = null;


        try {
            // InternalXcore.g:6186:49: (iv_ruleXClosure= ruleXClosure EOF )
            // InternalXcore.g:6187:2: iv_ruleXClosure= ruleXClosure EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXClosureRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXClosure=ruleXClosure();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXClosure; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXClosure"


    // $ANTLR start "ruleXClosure"
    // InternalXcore.g:6193:1: ruleXClosure returns [EObject current=null] : ( ( ( ( () '[' ) )=> ( () otherlv_1= '[' ) ) ( ( ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) ) )? ( (lv_expression_6_0= ruleXExpressionInClosure ) ) otherlv_7= ']' ) ;
    public final EObject ruleXClosure() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token lv_explicitSyntax_5_0=null;
        Token otherlv_7=null;
        EObject lv_declaredFormalParameters_2_0 = null;

        EObject lv_declaredFormalParameters_4_0 = null;

        EObject lv_expression_6_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:6199:2: ( ( ( ( ( () '[' ) )=> ( () otherlv_1= '[' ) ) ( ( ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) ) )? ( (lv_expression_6_0= ruleXExpressionInClosure ) ) otherlv_7= ']' ) )
            // InternalXcore.g:6200:2: ( ( ( ( () '[' ) )=> ( () otherlv_1= '[' ) ) ( ( ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) ) )? ( (lv_expression_6_0= ruleXExpressionInClosure ) ) otherlv_7= ']' )
            {
            // InternalXcore.g:6200:2: ( ( ( ( () '[' ) )=> ( () otherlv_1= '[' ) ) ( ( ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) ) )? ( (lv_expression_6_0= ruleXExpressionInClosure ) ) otherlv_7= ']' )
            // InternalXcore.g:6201:3: ( ( ( () '[' ) )=> ( () otherlv_1= '[' ) ) ( ( ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) ) )? ( (lv_expression_6_0= ruleXExpressionInClosure ) ) otherlv_7= ']'
            {
            // InternalXcore.g:6201:3: ( ( ( () '[' ) )=> ( () otherlv_1= '[' ) )
            // InternalXcore.g:6202:4: ( ( () '[' ) )=> ( () otherlv_1= '[' )
            {
            // InternalXcore.g:6208:4: ( () otherlv_1= '[' )
            // InternalXcore.g:6209:5: () otherlv_1= '['
            {
            // InternalXcore.g:6209:5: ()
            // InternalXcore.g:6210:6: 
            {
            if ( state.backtracking==0 ) {

              						current = forceCreateModelElement(
              							grammarAccess.getXClosureAccess().getXClosureAction_0_0_0(),
              							current);
              					
            }

            }

            otherlv_1=(Token)match(input,59,FOLLOW_104); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_1, grammarAccess.getXClosureAccess().getLeftSquareBracketKeyword_0_0_1());
              				
            }

            }


            }

            // InternalXcore.g:6222:3: ( ( ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) ) )?
            int alt122=2;
            alt122 = dfa122.predict(input);
            switch (alt122) {
                case 1 :
                    // InternalXcore.g:6223:4: ( ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) )
                    {
                    // InternalXcore.g:6246:4: ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) )
                    // InternalXcore.g:6247:5: ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) )
                    {
                    // InternalXcore.g:6247:5: ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )?
                    int alt121=2;
                    int LA121_0 = input.LA(1);

                    if ( (LA121_0==RULE_ID||LA121_0==15||(LA121_0>=44 && LA121_0<=47)||LA121_0==56||LA121_0==85) ) {
                        alt121=1;
                    }
                    switch (alt121) {
                        case 1 :
                            // InternalXcore.g:6248:6: ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )*
                            {
                            // InternalXcore.g:6248:6: ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) )
                            // InternalXcore.g:6249:7: (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter )
                            {
                            // InternalXcore.g:6249:7: (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter )
                            // InternalXcore.g:6250:8: lv_declaredFormalParameters_2_0= ruleJvmFormalParameter
                            {
                            if ( state.backtracking==0 ) {

                              								newCompositeNode(grammarAccess.getXClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_1_0_0_0_0());
                              							
                            }
                            pushFollow(FOLLOW_105);
                            lv_declaredFormalParameters_2_0=ruleJvmFormalParameter();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              								if (current==null) {
                              									current = createModelElementForParent(grammarAccess.getXClosureRule());
                              								}
                              								add(
                              									current,
                              									"declaredFormalParameters",
                              									lv_declaredFormalParameters_2_0,
                              									"org.eclipse.xtext.xbase.Xbase.JvmFormalParameter");
                              								afterParserOrEnumRuleCall();
                              							
                            }

                            }


                            }

                            // InternalXcore.g:6267:6: (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )*
                            loop120:
                            do {
                                int alt120=2;
                                int LA120_0 = input.LA(1);

                                if ( (LA120_0==16) ) {
                                    alt120=1;
                                }


                                switch (alt120) {
                            	case 1 :
                            	    // InternalXcore.g:6268:7: otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) )
                            	    {
                            	    otherlv_3=(Token)match(input,16,FOLLOW_20); if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	      							newLeafNode(otherlv_3, grammarAccess.getXClosureAccess().getCommaKeyword_1_0_0_1_0());
                            	      						
                            	    }
                            	    // InternalXcore.g:6272:7: ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) )
                            	    // InternalXcore.g:6273:8: (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter )
                            	    {
                            	    // InternalXcore.g:6273:8: (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter )
                            	    // InternalXcore.g:6274:9: lv_declaredFormalParameters_4_0= ruleJvmFormalParameter
                            	    {
                            	    if ( state.backtracking==0 ) {

                            	      									newCompositeNode(grammarAccess.getXClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_1_0_0_1_1_0());
                            	      								
                            	    }
                            	    pushFollow(FOLLOW_105);
                            	    lv_declaredFormalParameters_4_0=ruleJvmFormalParameter();

                            	    state._fsp--;
                            	    if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	      									if (current==null) {
                            	      										current = createModelElementForParent(grammarAccess.getXClosureRule());
                            	      									}
                            	      									add(
                            	      										current,
                            	      										"declaredFormalParameters",
                            	      										lv_declaredFormalParameters_4_0,
                            	      										"org.eclipse.xtext.xbase.Xbase.JvmFormalParameter");
                            	      									afterParserOrEnumRuleCall();
                            	      								
                            	    }

                            	    }


                            	    }


                            	    }
                            	    break;

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


                            }
                            break;

                    }

                    // InternalXcore.g:6293:5: ( (lv_explicitSyntax_5_0= '|' ) )
                    // InternalXcore.g:6294:6: (lv_explicitSyntax_5_0= '|' )
                    {
                    // InternalXcore.g:6294:6: (lv_explicitSyntax_5_0= '|' )
                    // InternalXcore.g:6295:7: lv_explicitSyntax_5_0= '|'
                    {
                    lv_explicitSyntax_5_0=(Token)match(input,97,FOLLOW_102); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_explicitSyntax_5_0, grammarAccess.getXClosureAccess().getExplicitSyntaxVerticalLineKeyword_1_0_1_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getXClosureRule());
                      							}
                      							setWithLastConsumed(current, "explicitSyntax", lv_explicitSyntax_5_0 != null, "|");
                      						
                    }

                    }


                    }


                    }


                    }
                    break;

            }

            // InternalXcore.g:6309:3: ( (lv_expression_6_0= ruleXExpressionInClosure ) )
            // InternalXcore.g:6310:4: (lv_expression_6_0= ruleXExpressionInClosure )
            {
            // InternalXcore.g:6310:4: (lv_expression_6_0= ruleXExpressionInClosure )
            // InternalXcore.g:6311:5: lv_expression_6_0= ruleXExpressionInClosure
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXClosureAccess().getExpressionXExpressionInClosureParserRuleCall_2_0());
              				
            }
            pushFollow(FOLLOW_66);
            lv_expression_6_0=ruleXExpressionInClosure();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXClosureRule());
              					}
              					set(
              						current,
              						"expression",
              						lv_expression_6_0,
              						"org.eclipse.xtext.xbase.Xbase.XExpressionInClosure");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_7=(Token)match(input,64,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_7, grammarAccess.getXClosureAccess().getRightSquareBracketKeyword_3());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXClosure"


    // $ANTLR start "entryRuleXExpressionInClosure"
    // InternalXcore.g:6336:1: entryRuleXExpressionInClosure returns [EObject current=null] : iv_ruleXExpressionInClosure= ruleXExpressionInClosure EOF ;
    public final EObject entryRuleXExpressionInClosure() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXExpressionInClosure = null;


        try {
            // InternalXcore.g:6336:61: (iv_ruleXExpressionInClosure= ruleXExpressionInClosure EOF )
            // InternalXcore.g:6337:2: iv_ruleXExpressionInClosure= ruleXExpressionInClosure EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXExpressionInClosureRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXExpressionInClosure=ruleXExpressionInClosure();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXExpressionInClosure; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXExpressionInClosure"


    // $ANTLR start "ruleXExpressionInClosure"
    // InternalXcore.g:6343:1: ruleXExpressionInClosure returns [EObject current=null] : ( () ( ( (lv_expressions_1_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_2= ';' )? )* ) ;
    public final EObject ruleXExpressionInClosure() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        EObject lv_expressions_1_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:6349:2: ( ( () ( ( (lv_expressions_1_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_2= ';' )? )* ) )
            // InternalXcore.g:6350:2: ( () ( ( (lv_expressions_1_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_2= ';' )? )* )
            {
            // InternalXcore.g:6350:2: ( () ( ( (lv_expressions_1_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_2= ';' )? )* )
            // InternalXcore.g:6351:3: () ( ( (lv_expressions_1_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_2= ';' )? )*
            {
            // InternalXcore.g:6351:3: ()
            // InternalXcore.g:6352:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXExpressionInClosureAccess().getXBlockExpressionAction_0(),
              					current);
              			
            }

            }

            // InternalXcore.g:6358:3: ( ( (lv_expressions_1_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_2= ';' )? )*
            loop124:
            do {
                int alt124=2;
                int LA124_0 = input.LA(1);

                if ( ((LA124_0>=RULE_STRING && LA124_0<=RULE_DECIMAL)||LA124_0==13||LA124_0==15||(LA124_0>=19 && LA124_0<=21)||LA124_0==23||(LA124_0>=25 && LA124_0<=29)||(LA124_0>=31 && LA124_0<=57)||LA124_0==59||LA124_0==62||LA124_0==66||(LA124_0>=68 && LA124_0<=69)||LA124_0==91||LA124_0==96||LA124_0==98||LA124_0==100||(LA124_0>=104 && LA124_0<=116)||LA124_0==118) ) {
                    alt124=1;
                }


                switch (alt124) {
            	case 1 :
            	    // InternalXcore.g:6359:4: ( (lv_expressions_1_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_2= ';' )?
            	    {
            	    // InternalXcore.g:6359:4: ( (lv_expressions_1_0= ruleXExpressionOrVarDeclaration ) )
            	    // InternalXcore.g:6360:5: (lv_expressions_1_0= ruleXExpressionOrVarDeclaration )
            	    {
            	    // InternalXcore.g:6360:5: (lv_expressions_1_0= ruleXExpressionOrVarDeclaration )
            	    // InternalXcore.g:6361:6: lv_expressions_1_0= ruleXExpressionOrVarDeclaration
            	    {
            	    if ( state.backtracking==0 ) {

            	      						newCompositeNode(grammarAccess.getXExpressionInClosureAccess().getExpressionsXExpressionOrVarDeclarationParserRuleCall_1_0_0());
            	      					
            	    }
            	    pushFollow(FOLLOW_106);
            	    lv_expressions_1_0=ruleXExpressionOrVarDeclaration();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      						if (current==null) {
            	      							current = createModelElementForParent(grammarAccess.getXExpressionInClosureRule());
            	      						}
            	      						add(
            	      							current,
            	      							"expressions",
            	      							lv_expressions_1_0,
            	      							"org.eclipse.xtext.xbase.Xbase.XExpressionOrVarDeclaration");
            	      						afterParserOrEnumRuleCall();
            	      					
            	    }

            	    }


            	    }

            	    // InternalXcore.g:6378:4: (otherlv_2= ';' )?
            	    int alt123=2;
            	    int LA123_0 = input.LA(1);

            	    if ( (LA123_0==65) ) {
            	        alt123=1;
            	    }
            	    switch (alt123) {
            	        case 1 :
            	            // InternalXcore.g:6379:5: otherlv_2= ';'
            	            {
            	            otherlv_2=(Token)match(input,65,FOLLOW_107); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	              					newLeafNode(otherlv_2, grammarAccess.getXExpressionInClosureAccess().getSemicolonKeyword_1_1());
            	              				
            	            }

            	            }
            	            break;

            	    }


            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXExpressionInClosure"


    // $ANTLR start "entryRuleXShortClosure"
    // InternalXcore.g:6389:1: entryRuleXShortClosure returns [EObject current=null] : iv_ruleXShortClosure= ruleXShortClosure EOF ;
    public final EObject entryRuleXShortClosure() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXShortClosure = null;


        try {
            // InternalXcore.g:6389:54: (iv_ruleXShortClosure= ruleXShortClosure EOF )
            // InternalXcore.g:6390:2: iv_ruleXShortClosure= ruleXShortClosure EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXShortClosureRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXShortClosure=ruleXShortClosure();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXShortClosure; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXShortClosure"


    // $ANTLR start "ruleXShortClosure"
    // InternalXcore.g:6396:1: ruleXShortClosure returns [EObject current=null] : ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( () ( ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_4_0= '|' ) ) ) ) ( (lv_expression_5_0= ruleXExpression ) ) ) ;
    public final EObject ruleXShortClosure() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        Token lv_explicitSyntax_4_0=null;
        EObject lv_declaredFormalParameters_1_0 = null;

        EObject lv_declaredFormalParameters_3_0 = null;

        EObject lv_expression_5_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:6402:2: ( ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( () ( ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_4_0= '|' ) ) ) ) ( (lv_expression_5_0= ruleXExpression ) ) ) )
            // InternalXcore.g:6403:2: ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( () ( ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_4_0= '|' ) ) ) ) ( (lv_expression_5_0= ruleXExpression ) ) )
            {
            // InternalXcore.g:6403:2: ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( () ( ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_4_0= '|' ) ) ) ) ( (lv_expression_5_0= ruleXExpression ) ) )
            // InternalXcore.g:6404:3: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( () ( ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_4_0= '|' ) ) ) ) ( (lv_expression_5_0= ruleXExpression ) )
            {
            // InternalXcore.g:6404:3: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( () ( ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_4_0= '|' ) ) ) )
            // InternalXcore.g:6405:4: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( () ( ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_4_0= '|' ) ) )
            {
            // InternalXcore.g:6430:4: ( () ( ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_4_0= '|' ) ) )
            // InternalXcore.g:6431:5: () ( ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_4_0= '|' ) )
            {
            // InternalXcore.g:6431:5: ()
            // InternalXcore.g:6432:6: 
            {
            if ( state.backtracking==0 ) {

              						current = forceCreateModelElement(
              							grammarAccess.getXShortClosureAccess().getXClosureAction_0_0_0(),
              							current);
              					
            }

            }

            // InternalXcore.g:6438:5: ( ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) ) )* )?
            int alt126=2;
            int LA126_0 = input.LA(1);

            if ( (LA126_0==RULE_ID||LA126_0==15||(LA126_0>=44 && LA126_0<=47)||LA126_0==56||LA126_0==85) ) {
                alt126=1;
            }
            switch (alt126) {
                case 1 :
                    // InternalXcore.g:6439:6: ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) ) )*
                    {
                    // InternalXcore.g:6439:6: ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) )
                    // InternalXcore.g:6440:7: (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter )
                    {
                    // InternalXcore.g:6440:7: (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter )
                    // InternalXcore.g:6441:8: lv_declaredFormalParameters_1_0= ruleJvmFormalParameter
                    {
                    if ( state.backtracking==0 ) {

                      								newCompositeNode(grammarAccess.getXShortClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_0_0_1_0_0());
                      							
                    }
                    pushFollow(FOLLOW_105);
                    lv_declaredFormalParameters_1_0=ruleJvmFormalParameter();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      								if (current==null) {
                      									current = createModelElementForParent(grammarAccess.getXShortClosureRule());
                      								}
                      								add(
                      									current,
                      									"declaredFormalParameters",
                      									lv_declaredFormalParameters_1_0,
                      									"org.eclipse.xtext.xbase.Xbase.JvmFormalParameter");
                      								afterParserOrEnumRuleCall();
                      							
                    }

                    }


                    }

                    // InternalXcore.g:6458:6: (otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) ) )*
                    loop125:
                    do {
                        int alt125=2;
                        int LA125_0 = input.LA(1);

                        if ( (LA125_0==16) ) {
                            alt125=1;
                        }


                        switch (alt125) {
                    	case 1 :
                    	    // InternalXcore.g:6459:7: otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) )
                    	    {
                    	    otherlv_2=(Token)match(input,16,FOLLOW_20); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							newLeafNode(otherlv_2, grammarAccess.getXShortClosureAccess().getCommaKeyword_0_0_1_1_0());
                    	      						
                    	    }
                    	    // InternalXcore.g:6463:7: ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) )
                    	    // InternalXcore.g:6464:8: (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter )
                    	    {
                    	    // InternalXcore.g:6464:8: (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter )
                    	    // InternalXcore.g:6465:9: lv_declaredFormalParameters_3_0= ruleJvmFormalParameter
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      									newCompositeNode(grammarAccess.getXShortClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_0_0_1_1_1_0());
                    	      								
                    	    }
                    	    pushFollow(FOLLOW_105);
                    	    lv_declaredFormalParameters_3_0=ruleJvmFormalParameter();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      									if (current==null) {
                    	      										current = createModelElementForParent(grammarAccess.getXShortClosureRule());
                    	      									}
                    	      									add(
                    	      										current,
                    	      										"declaredFormalParameters",
                    	      										lv_declaredFormalParameters_3_0,
                    	      										"org.eclipse.xtext.xbase.Xbase.JvmFormalParameter");
                    	      									afterParserOrEnumRuleCall();
                    	      								
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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


                    }
                    break;

            }

            // InternalXcore.g:6484:5: ( (lv_explicitSyntax_4_0= '|' ) )
            // InternalXcore.g:6485:6: (lv_explicitSyntax_4_0= '|' )
            {
            // InternalXcore.g:6485:6: (lv_explicitSyntax_4_0= '|' )
            // InternalXcore.g:6486:7: lv_explicitSyntax_4_0= '|'
            {
            lv_explicitSyntax_4_0=(Token)match(input,97,FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              							newLeafNode(lv_explicitSyntax_4_0, grammarAccess.getXShortClosureAccess().getExplicitSyntaxVerticalLineKeyword_0_0_2_0());
              						
            }
            if ( state.backtracking==0 ) {

              							if (current==null) {
              								current = createModelElement(grammarAccess.getXShortClosureRule());
              							}
              							setWithLastConsumed(current, "explicitSyntax", lv_explicitSyntax_4_0 != null, "|");
              						
            }

            }


            }


            }


            }

            // InternalXcore.g:6500:3: ( (lv_expression_5_0= ruleXExpression ) )
            // InternalXcore.g:6501:4: (lv_expression_5_0= ruleXExpression )
            {
            // InternalXcore.g:6501:4: (lv_expression_5_0= ruleXExpression )
            // InternalXcore.g:6502:5: lv_expression_5_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXShortClosureAccess().getExpressionXExpressionParserRuleCall_1_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_expression_5_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXShortClosureRule());
              					}
              					set(
              						current,
              						"expression",
              						lv_expression_5_0,
              						"org.eclipse.xtext.xbase.Xbase.XExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXShortClosure"


    // $ANTLR start "entryRuleXParenthesizedExpression"
    // InternalXcore.g:6523:1: entryRuleXParenthesizedExpression returns [EObject current=null] : iv_ruleXParenthesizedExpression= ruleXParenthesizedExpression EOF ;
    public final EObject entryRuleXParenthesizedExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXParenthesizedExpression = null;


        try {
            // InternalXcore.g:6523:65: (iv_ruleXParenthesizedExpression= ruleXParenthesizedExpression EOF )
            // InternalXcore.g:6524:2: iv_ruleXParenthesizedExpression= ruleXParenthesizedExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXParenthesizedExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXParenthesizedExpression=ruleXParenthesizedExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXParenthesizedExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXParenthesizedExpression"


    // $ANTLR start "ruleXParenthesizedExpression"
    // InternalXcore.g:6530:1: ruleXParenthesizedExpression returns [EObject current=null] : (otherlv_0= '(' this_XExpression_1= ruleXExpression otherlv_2= ')' ) ;
    public final EObject ruleXParenthesizedExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        EObject this_XExpression_1 = null;



        	enterRule();

        try {
            // InternalXcore.g:6536:2: ( (otherlv_0= '(' this_XExpression_1= ruleXExpression otherlv_2= ')' ) )
            // InternalXcore.g:6537:2: (otherlv_0= '(' this_XExpression_1= ruleXExpression otherlv_2= ')' )
            {
            // InternalXcore.g:6537:2: (otherlv_0= '(' this_XExpression_1= ruleXExpression otherlv_2= ')' )
            // InternalXcore.g:6538:3: otherlv_0= '(' this_XExpression_1= ruleXExpression otherlv_2= ')'
            {
            otherlv_0=(Token)match(input,15,FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getXParenthesizedExpressionAccess().getLeftParenthesisKeyword_0());
              		
            }
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getXParenthesizedExpressionAccess().getXExpressionParserRuleCall_1());
              		
            }
            pushFollow(FOLLOW_98);
            this_XExpression_1=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current = this_XExpression_1;
              			afterParserOrEnumRuleCall();
              		
            }
            otherlv_2=(Token)match(input,17,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getXParenthesizedExpressionAccess().getRightParenthesisKeyword_2());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXParenthesizedExpression"


    // $ANTLR start "entryRuleXIfExpression"
    // InternalXcore.g:6558:1: entryRuleXIfExpression returns [EObject current=null] : iv_ruleXIfExpression= ruleXIfExpression EOF ;
    public final EObject entryRuleXIfExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXIfExpression = null;


        try {
            // InternalXcore.g:6558:54: (iv_ruleXIfExpression= ruleXIfExpression EOF )
            // InternalXcore.g:6559:2: iv_ruleXIfExpression= ruleXIfExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXIfExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXIfExpression=ruleXIfExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXIfExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXIfExpression"


    // $ANTLR start "ruleXIfExpression"
    // InternalXcore.g:6565:1: ruleXIfExpression returns [EObject current=null] : ( () otherlv_1= 'if' otherlv_2= '(' ( (lv_if_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_then_5_0= ruleXExpression ) ) ( ( ( 'else' )=>otherlv_6= 'else' ) ( (lv_else_7_0= ruleXExpression ) ) )? ) ;
    public final EObject ruleXIfExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_if_3_0 = null;

        EObject lv_then_5_0 = null;

        EObject lv_else_7_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:6571:2: ( ( () otherlv_1= 'if' otherlv_2= '(' ( (lv_if_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_then_5_0= ruleXExpression ) ) ( ( ( 'else' )=>otherlv_6= 'else' ) ( (lv_else_7_0= ruleXExpression ) ) )? ) )
            // InternalXcore.g:6572:2: ( () otherlv_1= 'if' otherlv_2= '(' ( (lv_if_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_then_5_0= ruleXExpression ) ) ( ( ( 'else' )=>otherlv_6= 'else' ) ( (lv_else_7_0= ruleXExpression ) ) )? )
            {
            // InternalXcore.g:6572:2: ( () otherlv_1= 'if' otherlv_2= '(' ( (lv_if_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_then_5_0= ruleXExpression ) ) ( ( ( 'else' )=>otherlv_6= 'else' ) ( (lv_else_7_0= ruleXExpression ) ) )? )
            // InternalXcore.g:6573:3: () otherlv_1= 'if' otherlv_2= '(' ( (lv_if_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_then_5_0= ruleXExpression ) ) ( ( ( 'else' )=>otherlv_6= 'else' ) ( (lv_else_7_0= ruleXExpression ) ) )?
            {
            // InternalXcore.g:6573:3: ()
            // InternalXcore.g:6574:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXIfExpressionAccess().getXIfExpressionAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,98,FOLLOW_56); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXIfExpressionAccess().getIfKeyword_1());
              		
            }
            otherlv_2=(Token)match(input,15,FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getXIfExpressionAccess().getLeftParenthesisKeyword_2());
              		
            }
            // InternalXcore.g:6588:3: ( (lv_if_3_0= ruleXExpression ) )
            // InternalXcore.g:6589:4: (lv_if_3_0= ruleXExpression )
            {
            // InternalXcore.g:6589:4: (lv_if_3_0= ruleXExpression )
            // InternalXcore.g:6590:5: lv_if_3_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXIfExpressionAccess().getIfXExpressionParserRuleCall_3_0());
              				
            }
            pushFollow(FOLLOW_98);
            lv_if_3_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXIfExpressionRule());
              					}
              					set(
              						current,
              						"if",
              						lv_if_3_0,
              						"org.eclipse.xtext.xbase.Xbase.XExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_4=(Token)match(input,17,FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_4, grammarAccess.getXIfExpressionAccess().getRightParenthesisKeyword_4());
              		
            }
            // InternalXcore.g:6611:3: ( (lv_then_5_0= ruleXExpression ) )
            // InternalXcore.g:6612:4: (lv_then_5_0= ruleXExpression )
            {
            // InternalXcore.g:6612:4: (lv_then_5_0= ruleXExpression )
            // InternalXcore.g:6613:5: lv_then_5_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXIfExpressionAccess().getThenXExpressionParserRuleCall_5_0());
              				
            }
            pushFollow(FOLLOW_108);
            lv_then_5_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXIfExpressionRule());
              					}
              					set(
              						current,
              						"then",
              						lv_then_5_0,
              						"org.eclipse.xtext.xbase.Xbase.XExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalXcore.g:6630:3: ( ( ( 'else' )=>otherlv_6= 'else' ) ( (lv_else_7_0= ruleXExpression ) ) )?
            int alt127=2;
            int LA127_0 = input.LA(1);

            if ( (LA127_0==99) ) {
                int LA127_1 = input.LA(2);

                if ( (synpred28_InternalXcore()) ) {
                    alt127=1;
                }
            }
            switch (alt127) {
                case 1 :
                    // InternalXcore.g:6631:4: ( ( 'else' )=>otherlv_6= 'else' ) ( (lv_else_7_0= ruleXExpression ) )
                    {
                    // InternalXcore.g:6631:4: ( ( 'else' )=>otherlv_6= 'else' )
                    // InternalXcore.g:6632:5: ( 'else' )=>otherlv_6= 'else'
                    {
                    otherlv_6=(Token)match(input,99,FOLLOW_75); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_6, grammarAccess.getXIfExpressionAccess().getElseKeyword_6_0());
                      				
                    }

                    }

                    // InternalXcore.g:6638:4: ( (lv_else_7_0= ruleXExpression ) )
                    // InternalXcore.g:6639:5: (lv_else_7_0= ruleXExpression )
                    {
                    // InternalXcore.g:6639:5: (lv_else_7_0= ruleXExpression )
                    // InternalXcore.g:6640:6: lv_else_7_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXIfExpressionAccess().getElseXExpressionParserRuleCall_6_1_0());
                      					
                    }
                    pushFollow(FOLLOW_2);
                    lv_else_7_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXIfExpressionRule());
                      						}
                      						set(
                      							current,
                      							"else",
                      							lv_else_7_0,
                      							"org.eclipse.xtext.xbase.Xbase.XExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXIfExpression"


    // $ANTLR start "entryRuleXSwitchExpression"
    // InternalXcore.g:6662:1: entryRuleXSwitchExpression returns [EObject current=null] : iv_ruleXSwitchExpression= ruleXSwitchExpression EOF ;
    public final EObject entryRuleXSwitchExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXSwitchExpression = null;


        try {
            // InternalXcore.g:6662:58: (iv_ruleXSwitchExpression= ruleXSwitchExpression EOF )
            // InternalXcore.g:6663:2: iv_ruleXSwitchExpression= ruleXSwitchExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXSwitchExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXSwitchExpression=ruleXSwitchExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXSwitchExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXSwitchExpression"


    // $ANTLR start "ruleXSwitchExpression"
    // InternalXcore.g:6669:1: ruleXSwitchExpression returns [EObject current=null] : ( () otherlv_1= 'switch' ( ( ( ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_switch_5_0= ruleXExpression ) ) otherlv_6= ')' ) | ( ( ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' ) )? ( (lv_switch_9_0= ruleXExpression ) ) ) ) otherlv_10= '{' ( (lv_cases_11_0= ruleXCasePart ) )* (otherlv_12= 'default' otherlv_13= ':' ( (lv_default_14_0= ruleXExpression ) ) )? otherlv_15= '}' ) ;
    public final EObject ruleXSwitchExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Token otherlv_10=null;
        Token otherlv_12=null;
        Token otherlv_13=null;
        Token otherlv_15=null;
        EObject lv_declaredParam_3_0 = null;

        EObject lv_switch_5_0 = null;

        EObject lv_declaredParam_7_0 = null;

        EObject lv_switch_9_0 = null;

        EObject lv_cases_11_0 = null;

        EObject lv_default_14_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:6675:2: ( ( () otherlv_1= 'switch' ( ( ( ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_switch_5_0= ruleXExpression ) ) otherlv_6= ')' ) | ( ( ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' ) )? ( (lv_switch_9_0= ruleXExpression ) ) ) ) otherlv_10= '{' ( (lv_cases_11_0= ruleXCasePart ) )* (otherlv_12= 'default' otherlv_13= ':' ( (lv_default_14_0= ruleXExpression ) ) )? otherlv_15= '}' ) )
            // InternalXcore.g:6676:2: ( () otherlv_1= 'switch' ( ( ( ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_switch_5_0= ruleXExpression ) ) otherlv_6= ')' ) | ( ( ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' ) )? ( (lv_switch_9_0= ruleXExpression ) ) ) ) otherlv_10= '{' ( (lv_cases_11_0= ruleXCasePart ) )* (otherlv_12= 'default' otherlv_13= ':' ( (lv_default_14_0= ruleXExpression ) ) )? otherlv_15= '}' )
            {
            // InternalXcore.g:6676:2: ( () otherlv_1= 'switch' ( ( ( ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_switch_5_0= ruleXExpression ) ) otherlv_6= ')' ) | ( ( ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' ) )? ( (lv_switch_9_0= ruleXExpression ) ) ) ) otherlv_10= '{' ( (lv_cases_11_0= ruleXCasePart ) )* (otherlv_12= 'default' otherlv_13= ':' ( (lv_default_14_0= ruleXExpression ) ) )? otherlv_15= '}' )
            // InternalXcore.g:6677:3: () otherlv_1= 'switch' ( ( ( ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_switch_5_0= ruleXExpression ) ) otherlv_6= ')' ) | ( ( ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' ) )? ( (lv_switch_9_0= ruleXExpression ) ) ) ) otherlv_10= '{' ( (lv_cases_11_0= ruleXCasePart ) )* (otherlv_12= 'default' otherlv_13= ':' ( (lv_default_14_0= ruleXExpression ) ) )? otherlv_15= '}'
            {
            // InternalXcore.g:6677:3: ()
            // InternalXcore.g:6678:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXSwitchExpressionAccess().getXSwitchExpressionAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,100,FOLLOW_109); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXSwitchExpressionAccess().getSwitchKeyword_1());
              		
            }
            // InternalXcore.g:6688:3: ( ( ( ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_switch_5_0= ruleXExpression ) ) otherlv_6= ')' ) | ( ( ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' ) )? ( (lv_switch_9_0= ruleXExpression ) ) ) )
            int alt129=2;
            alt129 = dfa129.predict(input);
            switch (alt129) {
                case 1 :
                    // InternalXcore.g:6689:4: ( ( ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_switch_5_0= ruleXExpression ) ) otherlv_6= ')' )
                    {
                    // InternalXcore.g:6689:4: ( ( ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_switch_5_0= ruleXExpression ) ) otherlv_6= ')' )
                    // InternalXcore.g:6690:5: ( ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_switch_5_0= ruleXExpression ) ) otherlv_6= ')'
                    {
                    // InternalXcore.g:6690:5: ( ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) )
                    // InternalXcore.g:6691:6: ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' )
                    {
                    // InternalXcore.g:6701:6: (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' )
                    // InternalXcore.g:6702:7: otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':'
                    {
                    otherlv_2=(Token)match(input,15,FOLLOW_20); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(otherlv_2, grammarAccess.getXSwitchExpressionAccess().getLeftParenthesisKeyword_2_0_0_0_0());
                      						
                    }
                    // InternalXcore.g:6706:7: ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) )
                    // InternalXcore.g:6707:8: (lv_declaredParam_3_0= ruleJvmFormalParameter )
                    {
                    // InternalXcore.g:6707:8: (lv_declaredParam_3_0= ruleJvmFormalParameter )
                    // InternalXcore.g:6708:9: lv_declaredParam_3_0= ruleJvmFormalParameter
                    {
                    if ( state.backtracking==0 ) {

                      									newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getDeclaredParamJvmFormalParameterParserRuleCall_2_0_0_0_1_0());
                      								
                    }
                    pushFollow(FOLLOW_110);
                    lv_declaredParam_3_0=ruleJvmFormalParameter();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      									if (current==null) {
                      										current = createModelElementForParent(grammarAccess.getXSwitchExpressionRule());
                      									}
                      									set(
                      										current,
                      										"declaredParam",
                      										lv_declaredParam_3_0,
                      										"org.eclipse.xtext.xbase.Xbase.JvmFormalParameter");
                      									afterParserOrEnumRuleCall();
                      								
                    }

                    }


                    }

                    otherlv_4=(Token)match(input,101,FOLLOW_75); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(otherlv_4, grammarAccess.getXSwitchExpressionAccess().getColonKeyword_2_0_0_0_2());
                      						
                    }

                    }


                    }

                    // InternalXcore.g:6731:5: ( (lv_switch_5_0= ruleXExpression ) )
                    // InternalXcore.g:6732:6: (lv_switch_5_0= ruleXExpression )
                    {
                    // InternalXcore.g:6732:6: (lv_switch_5_0= ruleXExpression )
                    // InternalXcore.g:6733:7: lv_switch_5_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {

                      							newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getSwitchXExpressionParserRuleCall_2_0_1_0());
                      						
                    }
                    pushFollow(FOLLOW_98);
                    lv_switch_5_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElementForParent(grammarAccess.getXSwitchExpressionRule());
                      							}
                      							set(
                      								current,
                      								"switch",
                      								lv_switch_5_0,
                      								"org.eclipse.xtext.xbase.Xbase.XExpression");
                      							afterParserOrEnumRuleCall();
                      						
                    }

                    }


                    }

                    otherlv_6=(Token)match(input,17,FOLLOW_22); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_6, grammarAccess.getXSwitchExpressionAccess().getRightParenthesisKeyword_2_0_2());
                      				
                    }

                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:6756:4: ( ( ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' ) )? ( (lv_switch_9_0= ruleXExpression ) ) )
                    {
                    // InternalXcore.g:6756:4: ( ( ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' ) )? ( (lv_switch_9_0= ruleXExpression ) ) )
                    // InternalXcore.g:6757:5: ( ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' ) )? ( (lv_switch_9_0= ruleXExpression ) )
                    {
                    // InternalXcore.g:6757:5: ( ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' ) )?
                    int alt128=2;
                    alt128 = dfa128.predict(input);
                    switch (alt128) {
                        case 1 :
                            // InternalXcore.g:6758:6: ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' )
                            {
                            // InternalXcore.g:6767:6: ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' )
                            // InternalXcore.g:6768:7: ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':'
                            {
                            // InternalXcore.g:6768:7: ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) )
                            // InternalXcore.g:6769:8: (lv_declaredParam_7_0= ruleJvmFormalParameter )
                            {
                            // InternalXcore.g:6769:8: (lv_declaredParam_7_0= ruleJvmFormalParameter )
                            // InternalXcore.g:6770:9: lv_declaredParam_7_0= ruleJvmFormalParameter
                            {
                            if ( state.backtracking==0 ) {

                              									newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getDeclaredParamJvmFormalParameterParserRuleCall_2_1_0_0_0_0());
                              								
                            }
                            pushFollow(FOLLOW_110);
                            lv_declaredParam_7_0=ruleJvmFormalParameter();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              									if (current==null) {
                              										current = createModelElementForParent(grammarAccess.getXSwitchExpressionRule());
                              									}
                              									set(
                              										current,
                              										"declaredParam",
                              										lv_declaredParam_7_0,
                              										"org.eclipse.xtext.xbase.Xbase.JvmFormalParameter");
                              									afterParserOrEnumRuleCall();
                              								
                            }

                            }


                            }

                            otherlv_8=(Token)match(input,101,FOLLOW_75); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(otherlv_8, grammarAccess.getXSwitchExpressionAccess().getColonKeyword_2_1_0_0_1());
                              						
                            }

                            }


                            }
                            break;

                    }

                    // InternalXcore.g:6793:5: ( (lv_switch_9_0= ruleXExpression ) )
                    // InternalXcore.g:6794:6: (lv_switch_9_0= ruleXExpression )
                    {
                    // InternalXcore.g:6794:6: (lv_switch_9_0= ruleXExpression )
                    // InternalXcore.g:6795:7: lv_switch_9_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {

                      							newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getSwitchXExpressionParserRuleCall_2_1_1_0());
                      						
                    }
                    pushFollow(FOLLOW_22);
                    lv_switch_9_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElementForParent(grammarAccess.getXSwitchExpressionRule());
                      							}
                      							set(
                      								current,
                      								"switch",
                      								lv_switch_9_0,
                      								"org.eclipse.xtext.xbase.Xbase.XExpression");
                      							afterParserOrEnumRuleCall();
                      						
                    }

                    }


                    }


                    }


                    }
                    break;

            }

            otherlv_10=(Token)match(input,29,FOLLOW_111); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_10, grammarAccess.getXSwitchExpressionAccess().getLeftCurlyBracketKeyword_3());
              		
            }
            // InternalXcore.g:6818:3: ( (lv_cases_11_0= ruleXCasePart ) )*
            loop130:
            do {
                int alt130=2;
                int LA130_0 = input.LA(1);

                if ( (LA130_0==RULE_ID||(LA130_0>=15 && LA130_0<=16)||(LA130_0>=44 && LA130_0<=47)||LA130_0==56||LA130_0==85||LA130_0==101||LA130_0==103) ) {
                    alt130=1;
                }


                switch (alt130) {
            	case 1 :
            	    // InternalXcore.g:6819:4: (lv_cases_11_0= ruleXCasePart )
            	    {
            	    // InternalXcore.g:6819:4: (lv_cases_11_0= ruleXCasePart )
            	    // InternalXcore.g:6820:5: lv_cases_11_0= ruleXCasePart
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getCasesXCasePartParserRuleCall_4_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_111);
            	    lv_cases_11_0=ruleXCasePart();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getXSwitchExpressionRule());
            	      					}
            	      					add(
            	      						current,
            	      						"cases",
            	      						lv_cases_11_0,
            	      						"org.eclipse.xtext.xbase.Xbase.XCasePart");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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

            // InternalXcore.g:6837:3: (otherlv_12= 'default' otherlv_13= ':' ( (lv_default_14_0= ruleXExpression ) ) )?
            int alt131=2;
            int LA131_0 = input.LA(1);

            if ( (LA131_0==102) ) {
                alt131=1;
            }
            switch (alt131) {
                case 1 :
                    // InternalXcore.g:6838:4: otherlv_12= 'default' otherlv_13= ':' ( (lv_default_14_0= ruleXExpression ) )
                    {
                    otherlv_12=(Token)match(input,102,FOLLOW_110); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_12, grammarAccess.getXSwitchExpressionAccess().getDefaultKeyword_5_0());
                      			
                    }
                    otherlv_13=(Token)match(input,101,FOLLOW_75); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_13, grammarAccess.getXSwitchExpressionAccess().getColonKeyword_5_1());
                      			
                    }
                    // InternalXcore.g:6846:4: ( (lv_default_14_0= ruleXExpression ) )
                    // InternalXcore.g:6847:5: (lv_default_14_0= ruleXExpression )
                    {
                    // InternalXcore.g:6847:5: (lv_default_14_0= ruleXExpression )
                    // InternalXcore.g:6848:6: lv_default_14_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getDefaultXExpressionParserRuleCall_5_2_0());
                      					
                    }
                    pushFollow(FOLLOW_112);
                    lv_default_14_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXSwitchExpressionRule());
                      						}
                      						set(
                      							current,
                      							"default",
                      							lv_default_14_0,
                      							"org.eclipse.xtext.xbase.Xbase.XExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            otherlv_15=(Token)match(input,30,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_15, grammarAccess.getXSwitchExpressionAccess().getRightCurlyBracketKeyword_6());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXSwitchExpression"


    // $ANTLR start "entryRuleXCasePart"
    // InternalXcore.g:6874:1: entryRuleXCasePart returns [EObject current=null] : iv_ruleXCasePart= ruleXCasePart EOF ;
    public final EObject entryRuleXCasePart() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXCasePart = null;


        try {
            // InternalXcore.g:6874:50: (iv_ruleXCasePart= ruleXCasePart EOF )
            // InternalXcore.g:6875:2: iv_ruleXCasePart= ruleXCasePart EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXCasePartRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXCasePart=ruleXCasePart();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXCasePart; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXCasePart"


    // $ANTLR start "ruleXCasePart"
    // InternalXcore.g:6881:1: ruleXCasePart returns [EObject current=null] : ( () ( (lv_typeGuard_1_0= ruleJvmTypeReference ) )? (otherlv_2= 'case' ( (lv_case_3_0= ruleXExpression ) ) )? ( (otherlv_4= ':' ( (lv_then_5_0= ruleXExpression ) ) ) | ( (lv_fallThrough_6_0= ',' ) ) ) ) ;
    public final EObject ruleXCasePart() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        Token otherlv_4=null;
        Token lv_fallThrough_6_0=null;
        EObject lv_typeGuard_1_0 = null;

        EObject lv_case_3_0 = null;

        EObject lv_then_5_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:6887:2: ( ( () ( (lv_typeGuard_1_0= ruleJvmTypeReference ) )? (otherlv_2= 'case' ( (lv_case_3_0= ruleXExpression ) ) )? ( (otherlv_4= ':' ( (lv_then_5_0= ruleXExpression ) ) ) | ( (lv_fallThrough_6_0= ',' ) ) ) ) )
            // InternalXcore.g:6888:2: ( () ( (lv_typeGuard_1_0= ruleJvmTypeReference ) )? (otherlv_2= 'case' ( (lv_case_3_0= ruleXExpression ) ) )? ( (otherlv_4= ':' ( (lv_then_5_0= ruleXExpression ) ) ) | ( (lv_fallThrough_6_0= ',' ) ) ) )
            {
            // InternalXcore.g:6888:2: ( () ( (lv_typeGuard_1_0= ruleJvmTypeReference ) )? (otherlv_2= 'case' ( (lv_case_3_0= ruleXExpression ) ) )? ( (otherlv_4= ':' ( (lv_then_5_0= ruleXExpression ) ) ) | ( (lv_fallThrough_6_0= ',' ) ) ) )
            // InternalXcore.g:6889:3: () ( (lv_typeGuard_1_0= ruleJvmTypeReference ) )? (otherlv_2= 'case' ( (lv_case_3_0= ruleXExpression ) ) )? ( (otherlv_4= ':' ( (lv_then_5_0= ruleXExpression ) ) ) | ( (lv_fallThrough_6_0= ',' ) ) )
            {
            // InternalXcore.g:6889:3: ()
            // InternalXcore.g:6890:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXCasePartAccess().getXCasePartAction_0(),
              					current);
              			
            }

            }

            // InternalXcore.g:6896:3: ( (lv_typeGuard_1_0= ruleJvmTypeReference ) )?
            int alt132=2;
            int LA132_0 = input.LA(1);

            if ( (LA132_0==RULE_ID||LA132_0==15||(LA132_0>=44 && LA132_0<=47)||LA132_0==56||LA132_0==85) ) {
                alt132=1;
            }
            switch (alt132) {
                case 1 :
                    // InternalXcore.g:6897:4: (lv_typeGuard_1_0= ruleJvmTypeReference )
                    {
                    // InternalXcore.g:6897:4: (lv_typeGuard_1_0= ruleJvmTypeReference )
                    // InternalXcore.g:6898:5: lv_typeGuard_1_0= ruleJvmTypeReference
                    {
                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getXCasePartAccess().getTypeGuardJvmTypeReferenceParserRuleCall_1_0());
                      				
                    }
                    pushFollow(FOLLOW_113);
                    lv_typeGuard_1_0=ruleJvmTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElementForParent(grammarAccess.getXCasePartRule());
                      					}
                      					set(
                      						current,
                      						"typeGuard",
                      						lv_typeGuard_1_0,
                      						"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                      					afterParserOrEnumRuleCall();
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalXcore.g:6915:3: (otherlv_2= 'case' ( (lv_case_3_0= ruleXExpression ) ) )?
            int alt133=2;
            int LA133_0 = input.LA(1);

            if ( (LA133_0==103) ) {
                alt133=1;
            }
            switch (alt133) {
                case 1 :
                    // InternalXcore.g:6916:4: otherlv_2= 'case' ( (lv_case_3_0= ruleXExpression ) )
                    {
                    otherlv_2=(Token)match(input,103,FOLLOW_75); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getXCasePartAccess().getCaseKeyword_2_0());
                      			
                    }
                    // InternalXcore.g:6920:4: ( (lv_case_3_0= ruleXExpression ) )
                    // InternalXcore.g:6921:5: (lv_case_3_0= ruleXExpression )
                    {
                    // InternalXcore.g:6921:5: (lv_case_3_0= ruleXExpression )
                    // InternalXcore.g:6922:6: lv_case_3_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXCasePartAccess().getCaseXExpressionParserRuleCall_2_1_0());
                      					
                    }
                    pushFollow(FOLLOW_114);
                    lv_case_3_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXCasePartRule());
                      						}
                      						set(
                      							current,
                      							"case",
                      							lv_case_3_0,
                      							"org.eclipse.xtext.xbase.Xbase.XExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalXcore.g:6940:3: ( (otherlv_4= ':' ( (lv_then_5_0= ruleXExpression ) ) ) | ( (lv_fallThrough_6_0= ',' ) ) )
            int alt134=2;
            int LA134_0 = input.LA(1);

            if ( (LA134_0==101) ) {
                alt134=1;
            }
            else if ( (LA134_0==16) ) {
                alt134=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 134, 0, input);

                throw nvae;
            }
            switch (alt134) {
                case 1 :
                    // InternalXcore.g:6941:4: (otherlv_4= ':' ( (lv_then_5_0= ruleXExpression ) ) )
                    {
                    // InternalXcore.g:6941:4: (otherlv_4= ':' ( (lv_then_5_0= ruleXExpression ) ) )
                    // InternalXcore.g:6942:5: otherlv_4= ':' ( (lv_then_5_0= ruleXExpression ) )
                    {
                    otherlv_4=(Token)match(input,101,FOLLOW_75); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_4, grammarAccess.getXCasePartAccess().getColonKeyword_3_0_0());
                      				
                    }
                    // InternalXcore.g:6946:5: ( (lv_then_5_0= ruleXExpression ) )
                    // InternalXcore.g:6947:6: (lv_then_5_0= ruleXExpression )
                    {
                    // InternalXcore.g:6947:6: (lv_then_5_0= ruleXExpression )
                    // InternalXcore.g:6948:7: lv_then_5_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {

                      							newCompositeNode(grammarAccess.getXCasePartAccess().getThenXExpressionParserRuleCall_3_0_1_0());
                      						
                    }
                    pushFollow(FOLLOW_2);
                    lv_then_5_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElementForParent(grammarAccess.getXCasePartRule());
                      							}
                      							set(
                      								current,
                      								"then",
                      								lv_then_5_0,
                      								"org.eclipse.xtext.xbase.Xbase.XExpression");
                      							afterParserOrEnumRuleCall();
                      						
                    }

                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:6967:4: ( (lv_fallThrough_6_0= ',' ) )
                    {
                    // InternalXcore.g:6967:4: ( (lv_fallThrough_6_0= ',' ) )
                    // InternalXcore.g:6968:5: (lv_fallThrough_6_0= ',' )
                    {
                    // InternalXcore.g:6968:5: (lv_fallThrough_6_0= ',' )
                    // InternalXcore.g:6969:6: lv_fallThrough_6_0= ','
                    {
                    lv_fallThrough_6_0=(Token)match(input,16,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_fallThrough_6_0, grammarAccess.getXCasePartAccess().getFallThroughCommaKeyword_3_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getXCasePartRule());
                      						}
                      						setWithLastConsumed(current, "fallThrough", lv_fallThrough_6_0 != null, ",");
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXCasePart"


    // $ANTLR start "entryRuleXForLoopExpression"
    // InternalXcore.g:6986:1: entryRuleXForLoopExpression returns [EObject current=null] : iv_ruleXForLoopExpression= ruleXForLoopExpression EOF ;
    public final EObject entryRuleXForLoopExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXForLoopExpression = null;


        try {
            // InternalXcore.g:6986:59: (iv_ruleXForLoopExpression= ruleXForLoopExpression EOF )
            // InternalXcore.g:6987:2: iv_ruleXForLoopExpression= ruleXForLoopExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXForLoopExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXForLoopExpression=ruleXForLoopExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXForLoopExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXForLoopExpression"


    // $ANTLR start "ruleXForLoopExpression"
    // InternalXcore.g:6993:1: ruleXForLoopExpression returns [EObject current=null] : ( ( ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_forExpression_5_0= ruleXExpression ) ) otherlv_6= ')' ( (lv_eachExpression_7_0= ruleXExpression ) ) ) ;
    public final EObject ruleXForLoopExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_declaredParam_3_0 = null;

        EObject lv_forExpression_5_0 = null;

        EObject lv_eachExpression_7_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:6999:2: ( ( ( ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_forExpression_5_0= ruleXExpression ) ) otherlv_6= ')' ( (lv_eachExpression_7_0= ruleXExpression ) ) ) )
            // InternalXcore.g:7000:2: ( ( ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_forExpression_5_0= ruleXExpression ) ) otherlv_6= ')' ( (lv_eachExpression_7_0= ruleXExpression ) ) )
            {
            // InternalXcore.g:7000:2: ( ( ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_forExpression_5_0= ruleXExpression ) ) otherlv_6= ')' ( (lv_eachExpression_7_0= ruleXExpression ) ) )
            // InternalXcore.g:7001:3: ( ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_forExpression_5_0= ruleXExpression ) ) otherlv_6= ')' ( (lv_eachExpression_7_0= ruleXExpression ) )
            {
            // InternalXcore.g:7001:3: ( ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) )
            // InternalXcore.g:7002:4: ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' )
            {
            // InternalXcore.g:7015:4: ( () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' )
            // InternalXcore.g:7016:5: () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':'
            {
            // InternalXcore.g:7016:5: ()
            // InternalXcore.g:7017:6: 
            {
            if ( state.backtracking==0 ) {

              						current = forceCreateModelElement(
              							grammarAccess.getXForLoopExpressionAccess().getXForLoopExpressionAction_0_0_0(),
              							current);
              					
            }

            }

            otherlv_1=(Token)match(input,104,FOLLOW_56); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_1, grammarAccess.getXForLoopExpressionAccess().getForKeyword_0_0_1());
              				
            }
            otherlv_2=(Token)match(input,15,FOLLOW_20); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_2, grammarAccess.getXForLoopExpressionAccess().getLeftParenthesisKeyword_0_0_2());
              				
            }
            // InternalXcore.g:7031:5: ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) )
            // InternalXcore.g:7032:6: (lv_declaredParam_3_0= ruleJvmFormalParameter )
            {
            // InternalXcore.g:7032:6: (lv_declaredParam_3_0= ruleJvmFormalParameter )
            // InternalXcore.g:7033:7: lv_declaredParam_3_0= ruleJvmFormalParameter
            {
            if ( state.backtracking==0 ) {

              							newCompositeNode(grammarAccess.getXForLoopExpressionAccess().getDeclaredParamJvmFormalParameterParserRuleCall_0_0_3_0());
              						
            }
            pushFollow(FOLLOW_110);
            lv_declaredParam_3_0=ruleJvmFormalParameter();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              							if (current==null) {
              								current = createModelElementForParent(grammarAccess.getXForLoopExpressionRule());
              							}
              							set(
              								current,
              								"declaredParam",
              								lv_declaredParam_3_0,
              								"org.eclipse.xtext.xbase.Xbase.JvmFormalParameter");
              							afterParserOrEnumRuleCall();
              						
            }

            }


            }

            otherlv_4=(Token)match(input,101,FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_4, grammarAccess.getXForLoopExpressionAccess().getColonKeyword_0_0_4());
              				
            }

            }


            }

            // InternalXcore.g:7056:3: ( (lv_forExpression_5_0= ruleXExpression ) )
            // InternalXcore.g:7057:4: (lv_forExpression_5_0= ruleXExpression )
            {
            // InternalXcore.g:7057:4: (lv_forExpression_5_0= ruleXExpression )
            // InternalXcore.g:7058:5: lv_forExpression_5_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXForLoopExpressionAccess().getForExpressionXExpressionParserRuleCall_1_0());
              				
            }
            pushFollow(FOLLOW_98);
            lv_forExpression_5_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXForLoopExpressionRule());
              					}
              					set(
              						current,
              						"forExpression",
              						lv_forExpression_5_0,
              						"org.eclipse.xtext.xbase.Xbase.XExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_6=(Token)match(input,17,FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_6, grammarAccess.getXForLoopExpressionAccess().getRightParenthesisKeyword_2());
              		
            }
            // InternalXcore.g:7079:3: ( (lv_eachExpression_7_0= ruleXExpression ) )
            // InternalXcore.g:7080:4: (lv_eachExpression_7_0= ruleXExpression )
            {
            // InternalXcore.g:7080:4: (lv_eachExpression_7_0= ruleXExpression )
            // InternalXcore.g:7081:5: lv_eachExpression_7_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXForLoopExpressionAccess().getEachExpressionXExpressionParserRuleCall_3_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_eachExpression_7_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXForLoopExpressionRule());
              					}
              					set(
              						current,
              						"eachExpression",
              						lv_eachExpression_7_0,
              						"org.eclipse.xtext.xbase.Xbase.XExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXForLoopExpression"


    // $ANTLR start "entryRuleXBasicForLoopExpression"
    // InternalXcore.g:7102:1: entryRuleXBasicForLoopExpression returns [EObject current=null] : iv_ruleXBasicForLoopExpression= ruleXBasicForLoopExpression EOF ;
    public final EObject entryRuleXBasicForLoopExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXBasicForLoopExpression = null;


        try {
            // InternalXcore.g:7102:64: (iv_ruleXBasicForLoopExpression= ruleXBasicForLoopExpression EOF )
            // InternalXcore.g:7103:2: iv_ruleXBasicForLoopExpression= ruleXBasicForLoopExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXBasicForLoopExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXBasicForLoopExpression=ruleXBasicForLoopExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXBasicForLoopExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXBasicForLoopExpression"


    // $ANTLR start "ruleXBasicForLoopExpression"
    // InternalXcore.g:7109:1: ruleXBasicForLoopExpression returns [EObject current=null] : ( () otherlv_1= 'for' otherlv_2= '(' ( ( (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) ) )* )? otherlv_6= ';' ( (lv_expression_7_0= ruleXExpression ) )? otherlv_8= ';' ( ( (lv_updateExpressions_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) ) )* )? otherlv_12= ')' ( (lv_eachExpression_13_0= ruleXExpression ) ) ) ;
    public final EObject ruleXBasicForLoopExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Token otherlv_10=null;
        Token otherlv_12=null;
        EObject lv_initExpressions_3_0 = null;

        EObject lv_initExpressions_5_0 = null;

        EObject lv_expression_7_0 = null;

        EObject lv_updateExpressions_9_0 = null;

        EObject lv_updateExpressions_11_0 = null;

        EObject lv_eachExpression_13_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:7115:2: ( ( () otherlv_1= 'for' otherlv_2= '(' ( ( (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) ) )* )? otherlv_6= ';' ( (lv_expression_7_0= ruleXExpression ) )? otherlv_8= ';' ( ( (lv_updateExpressions_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) ) )* )? otherlv_12= ')' ( (lv_eachExpression_13_0= ruleXExpression ) ) ) )
            // InternalXcore.g:7116:2: ( () otherlv_1= 'for' otherlv_2= '(' ( ( (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) ) )* )? otherlv_6= ';' ( (lv_expression_7_0= ruleXExpression ) )? otherlv_8= ';' ( ( (lv_updateExpressions_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) ) )* )? otherlv_12= ')' ( (lv_eachExpression_13_0= ruleXExpression ) ) )
            {
            // InternalXcore.g:7116:2: ( () otherlv_1= 'for' otherlv_2= '(' ( ( (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) ) )* )? otherlv_6= ';' ( (lv_expression_7_0= ruleXExpression ) )? otherlv_8= ';' ( ( (lv_updateExpressions_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) ) )* )? otherlv_12= ')' ( (lv_eachExpression_13_0= ruleXExpression ) ) )
            // InternalXcore.g:7117:3: () otherlv_1= 'for' otherlv_2= '(' ( ( (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) ) )* )? otherlv_6= ';' ( (lv_expression_7_0= ruleXExpression ) )? otherlv_8= ';' ( ( (lv_updateExpressions_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) ) )* )? otherlv_12= ')' ( (lv_eachExpression_13_0= ruleXExpression ) )
            {
            // InternalXcore.g:7117:3: ()
            // InternalXcore.g:7118:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXBasicForLoopExpressionAccess().getXBasicForLoopExpressionAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,104,FOLLOW_56); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXBasicForLoopExpressionAccess().getForKeyword_1());
              		
            }
            otherlv_2=(Token)match(input,15,FOLLOW_115); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getXBasicForLoopExpressionAccess().getLeftParenthesisKeyword_2());
              		
            }
            // InternalXcore.g:7132:3: ( ( (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) ) )* )?
            int alt136=2;
            int LA136_0 = input.LA(1);

            if ( ((LA136_0>=RULE_STRING && LA136_0<=RULE_DECIMAL)||LA136_0==13||LA136_0==15||(LA136_0>=19 && LA136_0<=21)||LA136_0==23||(LA136_0>=25 && LA136_0<=29)||(LA136_0>=31 && LA136_0<=57)||LA136_0==59||LA136_0==62||LA136_0==66||(LA136_0>=68 && LA136_0<=69)||LA136_0==91||LA136_0==96||LA136_0==98||LA136_0==100||(LA136_0>=104 && LA136_0<=116)||LA136_0==118) ) {
                alt136=1;
            }
            switch (alt136) {
                case 1 :
                    // InternalXcore.g:7133:4: ( (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) ) )*
                    {
                    // InternalXcore.g:7133:4: ( (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration ) )
                    // InternalXcore.g:7134:5: (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration )
                    {
                    // InternalXcore.g:7134:5: (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration )
                    // InternalXcore.g:7135:6: lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsXExpressionOrVarDeclarationParserRuleCall_3_0_0());
                      					
                    }
                    pushFollow(FOLLOW_116);
                    lv_initExpressions_3_0=ruleXExpressionOrVarDeclaration();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
                      						}
                      						add(
                      							current,
                      							"initExpressions",
                      							lv_initExpressions_3_0,
                      							"org.eclipse.xtext.xbase.Xbase.XExpressionOrVarDeclaration");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:7152:4: (otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) ) )*
                    loop135:
                    do {
                        int alt135=2;
                        int LA135_0 = input.LA(1);

                        if ( (LA135_0==16) ) {
                            alt135=1;
                        }


                        switch (alt135) {
                    	case 1 :
                    	    // InternalXcore.g:7153:5: otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) )
                    	    {
                    	    otherlv_4=(Token)match(input,16,FOLLOW_75); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_4, grammarAccess.getXBasicForLoopExpressionAccess().getCommaKeyword_3_1_0());
                    	      				
                    	    }
                    	    // InternalXcore.g:7157:5: ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) )
                    	    // InternalXcore.g:7158:6: (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration )
                    	    {
                    	    // InternalXcore.g:7158:6: (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration )
                    	    // InternalXcore.g:7159:7: lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsXExpressionOrVarDeclarationParserRuleCall_3_1_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_116);
                    	    lv_initExpressions_5_0=ruleXExpressionOrVarDeclaration();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"initExpressions",
                    	      								lv_initExpressions_5_0,
                    	      								"org.eclipse.xtext.xbase.Xbase.XExpressionOrVarDeclaration");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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


                    }
                    break;

            }

            otherlv_6=(Token)match(input,65,FOLLOW_115); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_6, grammarAccess.getXBasicForLoopExpressionAccess().getSemicolonKeyword_4());
              		
            }
            // InternalXcore.g:7182:3: ( (lv_expression_7_0= ruleXExpression ) )?
            int alt137=2;
            int LA137_0 = input.LA(1);

            if ( ((LA137_0>=RULE_STRING && LA137_0<=RULE_DECIMAL)||LA137_0==13||LA137_0==15||(LA137_0>=19 && LA137_0<=21)||LA137_0==23||(LA137_0>=25 && LA137_0<=29)||(LA137_0>=31 && LA137_0<=57)||LA137_0==59||LA137_0==62||LA137_0==66||(LA137_0>=68 && LA137_0<=69)||LA137_0==91||LA137_0==96||LA137_0==98||LA137_0==100||(LA137_0>=104 && LA137_0<=106)||(LA137_0>=109 && LA137_0<=116)||LA137_0==118) ) {
                alt137=1;
            }
            switch (alt137) {
                case 1 :
                    // InternalXcore.g:7183:4: (lv_expression_7_0= ruleXExpression )
                    {
                    // InternalXcore.g:7183:4: (lv_expression_7_0= ruleXExpression )
                    // InternalXcore.g:7184:5: lv_expression_7_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getExpressionXExpressionParserRuleCall_5_0());
                      				
                    }
                    pushFollow(FOLLOW_117);
                    lv_expression_7_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
                      					}
                      					set(
                      						current,
                      						"expression",
                      						lv_expression_7_0,
                      						"org.eclipse.xtext.xbase.Xbase.XExpression");
                      					afterParserOrEnumRuleCall();
                      				
                    }

                    }


                    }
                    break;

            }

            otherlv_8=(Token)match(input,65,FOLLOW_118); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_8, grammarAccess.getXBasicForLoopExpressionAccess().getSemicolonKeyword_6());
              		
            }
            // InternalXcore.g:7205:3: ( ( (lv_updateExpressions_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) ) )* )?
            int alt139=2;
            int LA139_0 = input.LA(1);

            if ( ((LA139_0>=RULE_STRING && LA139_0<=RULE_DECIMAL)||LA139_0==13||LA139_0==15||(LA139_0>=19 && LA139_0<=21)||LA139_0==23||(LA139_0>=25 && LA139_0<=29)||(LA139_0>=31 && LA139_0<=57)||LA139_0==59||LA139_0==62||LA139_0==66||(LA139_0>=68 && LA139_0<=69)||LA139_0==91||LA139_0==96||LA139_0==98||LA139_0==100||(LA139_0>=104 && LA139_0<=106)||(LA139_0>=109 && LA139_0<=116)||LA139_0==118) ) {
                alt139=1;
            }
            switch (alt139) {
                case 1 :
                    // InternalXcore.g:7206:4: ( (lv_updateExpressions_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) ) )*
                    {
                    // InternalXcore.g:7206:4: ( (lv_updateExpressions_9_0= ruleXExpression ) )
                    // InternalXcore.g:7207:5: (lv_updateExpressions_9_0= ruleXExpression )
                    {
                    // InternalXcore.g:7207:5: (lv_updateExpressions_9_0= ruleXExpression )
                    // InternalXcore.g:7208:6: lv_updateExpressions_9_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsXExpressionParserRuleCall_7_0_0());
                      					
                    }
                    pushFollow(FOLLOW_10);
                    lv_updateExpressions_9_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
                      						}
                      						add(
                      							current,
                      							"updateExpressions",
                      							lv_updateExpressions_9_0,
                      							"org.eclipse.xtext.xbase.Xbase.XExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:7225:4: (otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) ) )*
                    loop138:
                    do {
                        int alt138=2;
                        int LA138_0 = input.LA(1);

                        if ( (LA138_0==16) ) {
                            alt138=1;
                        }


                        switch (alt138) {
                    	case 1 :
                    	    // InternalXcore.g:7226:5: otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) )
                    	    {
                    	    otherlv_10=(Token)match(input,16,FOLLOW_75); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_10, grammarAccess.getXBasicForLoopExpressionAccess().getCommaKeyword_7_1_0());
                    	      				
                    	    }
                    	    // InternalXcore.g:7230:5: ( (lv_updateExpressions_11_0= ruleXExpression ) )
                    	    // InternalXcore.g:7231:6: (lv_updateExpressions_11_0= ruleXExpression )
                    	    {
                    	    // InternalXcore.g:7231:6: (lv_updateExpressions_11_0= ruleXExpression )
                    	    // InternalXcore.g:7232:7: lv_updateExpressions_11_0= ruleXExpression
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsXExpressionParserRuleCall_7_1_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_10);
                    	    lv_updateExpressions_11_0=ruleXExpression();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"updateExpressions",
                    	      								lv_updateExpressions_11_0,
                    	      								"org.eclipse.xtext.xbase.Xbase.XExpression");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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


                    }
                    break;

            }

            otherlv_12=(Token)match(input,17,FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_12, grammarAccess.getXBasicForLoopExpressionAccess().getRightParenthesisKeyword_8());
              		
            }
            // InternalXcore.g:7255:3: ( (lv_eachExpression_13_0= ruleXExpression ) )
            // InternalXcore.g:7256:4: (lv_eachExpression_13_0= ruleXExpression )
            {
            // InternalXcore.g:7256:4: (lv_eachExpression_13_0= ruleXExpression )
            // InternalXcore.g:7257:5: lv_eachExpression_13_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getEachExpressionXExpressionParserRuleCall_9_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_eachExpression_13_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
              					}
              					set(
              						current,
              						"eachExpression",
              						lv_eachExpression_13_0,
              						"org.eclipse.xtext.xbase.Xbase.XExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXBasicForLoopExpression"


    // $ANTLR start "entryRuleXWhileExpression"
    // InternalXcore.g:7278:1: entryRuleXWhileExpression returns [EObject current=null] : iv_ruleXWhileExpression= ruleXWhileExpression EOF ;
    public final EObject entryRuleXWhileExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXWhileExpression = null;


        try {
            // InternalXcore.g:7278:57: (iv_ruleXWhileExpression= ruleXWhileExpression EOF )
            // InternalXcore.g:7279:2: iv_ruleXWhileExpression= ruleXWhileExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXWhileExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXWhileExpression=ruleXWhileExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXWhileExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXWhileExpression"


    // $ANTLR start "ruleXWhileExpression"
    // InternalXcore.g:7285:1: ruleXWhileExpression returns [EObject current=null] : ( () otherlv_1= 'while' otherlv_2= '(' ( (lv_predicate_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_body_5_0= ruleXExpression ) ) ) ;
    public final EObject ruleXWhileExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        EObject lv_predicate_3_0 = null;

        EObject lv_body_5_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:7291:2: ( ( () otherlv_1= 'while' otherlv_2= '(' ( (lv_predicate_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_body_5_0= ruleXExpression ) ) ) )
            // InternalXcore.g:7292:2: ( () otherlv_1= 'while' otherlv_2= '(' ( (lv_predicate_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_body_5_0= ruleXExpression ) ) )
            {
            // InternalXcore.g:7292:2: ( () otherlv_1= 'while' otherlv_2= '(' ( (lv_predicate_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_body_5_0= ruleXExpression ) ) )
            // InternalXcore.g:7293:3: () otherlv_1= 'while' otherlv_2= '(' ( (lv_predicate_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_body_5_0= ruleXExpression ) )
            {
            // InternalXcore.g:7293:3: ()
            // InternalXcore.g:7294:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXWhileExpressionAccess().getXWhileExpressionAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,105,FOLLOW_56); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXWhileExpressionAccess().getWhileKeyword_1());
              		
            }
            otherlv_2=(Token)match(input,15,FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getXWhileExpressionAccess().getLeftParenthesisKeyword_2());
              		
            }
            // InternalXcore.g:7308:3: ( (lv_predicate_3_0= ruleXExpression ) )
            // InternalXcore.g:7309:4: (lv_predicate_3_0= ruleXExpression )
            {
            // InternalXcore.g:7309:4: (lv_predicate_3_0= ruleXExpression )
            // InternalXcore.g:7310:5: lv_predicate_3_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXWhileExpressionAccess().getPredicateXExpressionParserRuleCall_3_0());
              				
            }
            pushFollow(FOLLOW_98);
            lv_predicate_3_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXWhileExpressionRule());
              					}
              					set(
              						current,
              						"predicate",
              						lv_predicate_3_0,
              						"org.eclipse.xtext.xbase.Xbase.XExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_4=(Token)match(input,17,FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_4, grammarAccess.getXWhileExpressionAccess().getRightParenthesisKeyword_4());
              		
            }
            // InternalXcore.g:7331:3: ( (lv_body_5_0= ruleXExpression ) )
            // InternalXcore.g:7332:4: (lv_body_5_0= ruleXExpression )
            {
            // InternalXcore.g:7332:4: (lv_body_5_0= ruleXExpression )
            // InternalXcore.g:7333:5: lv_body_5_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXWhileExpressionAccess().getBodyXExpressionParserRuleCall_5_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_body_5_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXWhileExpressionRule());
              					}
              					set(
              						current,
              						"body",
              						lv_body_5_0,
              						"org.eclipse.xtext.xbase.Xbase.XExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXWhileExpression"


    // $ANTLR start "entryRuleXDoWhileExpression"
    // InternalXcore.g:7354:1: entryRuleXDoWhileExpression returns [EObject current=null] : iv_ruleXDoWhileExpression= ruleXDoWhileExpression EOF ;
    public final EObject entryRuleXDoWhileExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXDoWhileExpression = null;


        try {
            // InternalXcore.g:7354:59: (iv_ruleXDoWhileExpression= ruleXDoWhileExpression EOF )
            // InternalXcore.g:7355:2: iv_ruleXDoWhileExpression= ruleXDoWhileExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXDoWhileExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXDoWhileExpression=ruleXDoWhileExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXDoWhileExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXDoWhileExpression"


    // $ANTLR start "ruleXDoWhileExpression"
    // InternalXcore.g:7361:1: ruleXDoWhileExpression returns [EObject current=null] : ( () otherlv_1= 'do' ( (lv_body_2_0= ruleXExpression ) ) otherlv_3= 'while' otherlv_4= '(' ( (lv_predicate_5_0= ruleXExpression ) ) otherlv_6= ')' ) ;
    public final EObject ruleXDoWhileExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_body_2_0 = null;

        EObject lv_predicate_5_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:7367:2: ( ( () otherlv_1= 'do' ( (lv_body_2_0= ruleXExpression ) ) otherlv_3= 'while' otherlv_4= '(' ( (lv_predicate_5_0= ruleXExpression ) ) otherlv_6= ')' ) )
            // InternalXcore.g:7368:2: ( () otherlv_1= 'do' ( (lv_body_2_0= ruleXExpression ) ) otherlv_3= 'while' otherlv_4= '(' ( (lv_predicate_5_0= ruleXExpression ) ) otherlv_6= ')' )
            {
            // InternalXcore.g:7368:2: ( () otherlv_1= 'do' ( (lv_body_2_0= ruleXExpression ) ) otherlv_3= 'while' otherlv_4= '(' ( (lv_predicate_5_0= ruleXExpression ) ) otherlv_6= ')' )
            // InternalXcore.g:7369:3: () otherlv_1= 'do' ( (lv_body_2_0= ruleXExpression ) ) otherlv_3= 'while' otherlv_4= '(' ( (lv_predicate_5_0= ruleXExpression ) ) otherlv_6= ')'
            {
            // InternalXcore.g:7369:3: ()
            // InternalXcore.g:7370:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXDoWhileExpressionAccess().getXDoWhileExpressionAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,106,FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXDoWhileExpressionAccess().getDoKeyword_1());
              		
            }
            // InternalXcore.g:7380:3: ( (lv_body_2_0= ruleXExpression ) )
            // InternalXcore.g:7381:4: (lv_body_2_0= ruleXExpression )
            {
            // InternalXcore.g:7381:4: (lv_body_2_0= ruleXExpression )
            // InternalXcore.g:7382:5: lv_body_2_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXDoWhileExpressionAccess().getBodyXExpressionParserRuleCall_2_0());
              				
            }
            pushFollow(FOLLOW_119);
            lv_body_2_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXDoWhileExpressionRule());
              					}
              					set(
              						current,
              						"body",
              						lv_body_2_0,
              						"org.eclipse.xtext.xbase.Xbase.XExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_3=(Token)match(input,105,FOLLOW_56); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getXDoWhileExpressionAccess().getWhileKeyword_3());
              		
            }
            otherlv_4=(Token)match(input,15,FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_4, grammarAccess.getXDoWhileExpressionAccess().getLeftParenthesisKeyword_4());
              		
            }
            // InternalXcore.g:7407:3: ( (lv_predicate_5_0= ruleXExpression ) )
            // InternalXcore.g:7408:4: (lv_predicate_5_0= ruleXExpression )
            {
            // InternalXcore.g:7408:4: (lv_predicate_5_0= ruleXExpression )
            // InternalXcore.g:7409:5: lv_predicate_5_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXDoWhileExpressionAccess().getPredicateXExpressionParserRuleCall_5_0());
              				
            }
            pushFollow(FOLLOW_98);
            lv_predicate_5_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXDoWhileExpressionRule());
              					}
              					set(
              						current,
              						"predicate",
              						lv_predicate_5_0,
              						"org.eclipse.xtext.xbase.Xbase.XExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_6=(Token)match(input,17,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_6, grammarAccess.getXDoWhileExpressionAccess().getRightParenthesisKeyword_6());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXDoWhileExpression"


    // $ANTLR start "entryRuleXExpressionOrVarDeclaration"
    // InternalXcore.g:7434:1: entryRuleXExpressionOrVarDeclaration returns [EObject current=null] : iv_ruleXExpressionOrVarDeclaration= ruleXExpressionOrVarDeclaration EOF ;
    public final EObject entryRuleXExpressionOrVarDeclaration() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXExpressionOrVarDeclaration = null;


        try {
            // InternalXcore.g:7434:68: (iv_ruleXExpressionOrVarDeclaration= ruleXExpressionOrVarDeclaration EOF )
            // InternalXcore.g:7435:2: iv_ruleXExpressionOrVarDeclaration= ruleXExpressionOrVarDeclaration EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXExpressionOrVarDeclarationRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXExpressionOrVarDeclaration=ruleXExpressionOrVarDeclaration();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXExpressionOrVarDeclaration; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXExpressionOrVarDeclaration"


    // $ANTLR start "ruleXExpressionOrVarDeclaration"
    // InternalXcore.g:7441:1: ruleXExpressionOrVarDeclaration returns [EObject current=null] : (this_XVariableDeclaration_0= ruleXVariableDeclaration | this_XExpression_1= ruleXExpression ) ;
    public final EObject ruleXExpressionOrVarDeclaration() throws RecognitionException {
        EObject current = null;

        EObject this_XVariableDeclaration_0 = null;

        EObject this_XExpression_1 = null;



        	enterRule();

        try {
            // InternalXcore.g:7447:2: ( (this_XVariableDeclaration_0= ruleXVariableDeclaration | this_XExpression_1= ruleXExpression ) )
            // InternalXcore.g:7448:2: (this_XVariableDeclaration_0= ruleXVariableDeclaration | this_XExpression_1= ruleXExpression )
            {
            // InternalXcore.g:7448:2: (this_XVariableDeclaration_0= ruleXVariableDeclaration | this_XExpression_1= ruleXExpression )
            int alt140=2;
            int LA140_0 = input.LA(1);

            if ( ((LA140_0>=107 && LA140_0<=108)) ) {
                alt140=1;
            }
            else if ( ((LA140_0>=RULE_STRING && LA140_0<=RULE_DECIMAL)||LA140_0==13||LA140_0==15||(LA140_0>=19 && LA140_0<=21)||LA140_0==23||(LA140_0>=25 && LA140_0<=29)||(LA140_0>=31 && LA140_0<=57)||LA140_0==59||LA140_0==62||LA140_0==66||(LA140_0>=68 && LA140_0<=69)||LA140_0==91||LA140_0==96||LA140_0==98||LA140_0==100||(LA140_0>=104 && LA140_0<=106)||(LA140_0>=109 && LA140_0<=116)||LA140_0==118) ) {
                alt140=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 140, 0, input);

                throw nvae;
            }
            switch (alt140) {
                case 1 :
                    // InternalXcore.g:7449:3: this_XVariableDeclaration_0= ruleXVariableDeclaration
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXExpressionOrVarDeclarationAccess().getXVariableDeclarationParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XVariableDeclaration_0=ruleXVariableDeclaration();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XVariableDeclaration_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:7458:3: this_XExpression_1= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getXExpressionOrVarDeclarationAccess().getXExpressionParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XExpression_1=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XExpression_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXExpressionOrVarDeclaration"


    // $ANTLR start "entryRuleXVariableDeclaration"
    // InternalXcore.g:7470:1: entryRuleXVariableDeclaration returns [EObject current=null] : iv_ruleXVariableDeclaration= ruleXVariableDeclaration EOF ;
    public final EObject entryRuleXVariableDeclaration() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXVariableDeclaration = null;


        try {
            // InternalXcore.g:7470:61: (iv_ruleXVariableDeclaration= ruleXVariableDeclaration EOF )
            // InternalXcore.g:7471:2: iv_ruleXVariableDeclaration= ruleXVariableDeclaration EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXVariableDeclarationRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXVariableDeclaration=ruleXVariableDeclaration();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXVariableDeclaration; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXVariableDeclaration"


    // $ANTLR start "ruleXVariableDeclaration"
    // InternalXcore.g:7477:1: ruleXVariableDeclaration returns [EObject current=null] : ( () ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) ) | ( (lv_name_5_0= ruleValidID ) ) ) (otherlv_6= '=' ( (lv_right_7_0= ruleXExpression ) ) )? ) ;
    public final EObject ruleXVariableDeclaration() throws RecognitionException {
        EObject current = null;

        Token lv_writeable_1_0=null;
        Token otherlv_2=null;
        Token otherlv_6=null;
        EObject lv_type_3_0 = null;

        AntlrDatatypeRuleToken lv_name_4_0 = null;

        AntlrDatatypeRuleToken lv_name_5_0 = null;

        EObject lv_right_7_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:7483:2: ( ( () ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) ) | ( (lv_name_5_0= ruleValidID ) ) ) (otherlv_6= '=' ( (lv_right_7_0= ruleXExpression ) ) )? ) )
            // InternalXcore.g:7484:2: ( () ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) ) | ( (lv_name_5_0= ruleValidID ) ) ) (otherlv_6= '=' ( (lv_right_7_0= ruleXExpression ) ) )? )
            {
            // InternalXcore.g:7484:2: ( () ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) ) | ( (lv_name_5_0= ruleValidID ) ) ) (otherlv_6= '=' ( (lv_right_7_0= ruleXExpression ) ) )? )
            // InternalXcore.g:7485:3: () ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) ) | ( (lv_name_5_0= ruleValidID ) ) ) (otherlv_6= '=' ( (lv_right_7_0= ruleXExpression ) ) )?
            {
            // InternalXcore.g:7485:3: ()
            // InternalXcore.g:7486:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXVariableDeclarationAccess().getXVariableDeclarationAction_0(),
              					current);
              			
            }

            }

            // InternalXcore.g:7492:3: ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' )
            int alt141=2;
            int LA141_0 = input.LA(1);

            if ( (LA141_0==107) ) {
                alt141=1;
            }
            else if ( (LA141_0==108) ) {
                alt141=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 141, 0, input);

                throw nvae;
            }
            switch (alt141) {
                case 1 :
                    // InternalXcore.g:7493:4: ( (lv_writeable_1_0= 'var' ) )
                    {
                    // InternalXcore.g:7493:4: ( (lv_writeable_1_0= 'var' ) )
                    // InternalXcore.g:7494:5: (lv_writeable_1_0= 'var' )
                    {
                    // InternalXcore.g:7494:5: (lv_writeable_1_0= 'var' )
                    // InternalXcore.g:7495:6: lv_writeable_1_0= 'var'
                    {
                    lv_writeable_1_0=(Token)match(input,107,FOLLOW_20); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_writeable_1_0, grammarAccess.getXVariableDeclarationAccess().getWriteableVarKeyword_1_0_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getXVariableDeclarationRule());
                      						}
                      						setWithLastConsumed(current, "writeable", lv_writeable_1_0 != null, "var");
                      					
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:7508:4: otherlv_2= 'val'
                    {
                    otherlv_2=(Token)match(input,108,FOLLOW_20); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_2, grammarAccess.getXVariableDeclarationAccess().getValKeyword_1_1());
                      			
                    }

                    }
                    break;

            }

            // InternalXcore.g:7513:3: ( ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) ) | ( (lv_name_5_0= ruleValidID ) ) )
            int alt142=2;
            alt142 = dfa142.predict(input);
            switch (alt142) {
                case 1 :
                    // InternalXcore.g:7514:4: ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) )
                    {
                    // InternalXcore.g:7514:4: ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) )
                    // InternalXcore.g:7515:5: ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) )
                    {
                    // InternalXcore.g:7528:5: ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) )
                    // InternalXcore.g:7529:6: ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) )
                    {
                    // InternalXcore.g:7529:6: ( (lv_type_3_0= ruleJvmTypeReference ) )
                    // InternalXcore.g:7530:7: (lv_type_3_0= ruleJvmTypeReference )
                    {
                    // InternalXcore.g:7530:7: (lv_type_3_0= ruleJvmTypeReference )
                    // InternalXcore.g:7531:8: lv_type_3_0= ruleJvmTypeReference
                    {
                    if ( state.backtracking==0 ) {

                      								newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getTypeJvmTypeReferenceParserRuleCall_2_0_0_0_0());
                      							
                    }
                    pushFollow(FOLLOW_4);
                    lv_type_3_0=ruleJvmTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      								if (current==null) {
                      									current = createModelElementForParent(grammarAccess.getXVariableDeclarationRule());
                      								}
                      								set(
                      									current,
                      									"type",
                      									lv_type_3_0,
                      									"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                      								afterParserOrEnumRuleCall();
                      							
                    }

                    }


                    }

                    // InternalXcore.g:7548:6: ( (lv_name_4_0= ruleValidID ) )
                    // InternalXcore.g:7549:7: (lv_name_4_0= ruleValidID )
                    {
                    // InternalXcore.g:7549:7: (lv_name_4_0= ruleValidID )
                    // InternalXcore.g:7550:8: lv_name_4_0= ruleValidID
                    {
                    if ( state.backtracking==0 ) {

                      								newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getNameValidIDParserRuleCall_2_0_0_1_0());
                      							
                    }
                    pushFollow(FOLLOW_27);
                    lv_name_4_0=ruleValidID();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      								if (current==null) {
                      									current = createModelElementForParent(grammarAccess.getXVariableDeclarationRule());
                      								}
                      								set(
                      									current,
                      									"name",
                      									lv_name_4_0,
                      									"org.eclipse.emf.ecore.xcore.Xcore.ValidID");
                      								afterParserOrEnumRuleCall();
                      							
                    }

                    }


                    }


                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:7570:4: ( (lv_name_5_0= ruleValidID ) )
                    {
                    // InternalXcore.g:7570:4: ( (lv_name_5_0= ruleValidID ) )
                    // InternalXcore.g:7571:5: (lv_name_5_0= ruleValidID )
                    {
                    // InternalXcore.g:7571:5: (lv_name_5_0= ruleValidID )
                    // InternalXcore.g:7572:6: lv_name_5_0= ruleValidID
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getNameValidIDParserRuleCall_2_1_0());
                      					
                    }
                    pushFollow(FOLLOW_27);
                    lv_name_5_0=ruleValidID();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXVariableDeclarationRule());
                      						}
                      						set(
                      							current,
                      							"name",
                      							lv_name_5_0,
                      							"org.eclipse.emf.ecore.xcore.Xcore.ValidID");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalXcore.g:7590:3: (otherlv_6= '=' ( (lv_right_7_0= ruleXExpression ) ) )?
            int alt143=2;
            int LA143_0 = input.LA(1);

            if ( (LA143_0==18) ) {
                alt143=1;
            }
            switch (alt143) {
                case 1 :
                    // InternalXcore.g:7591:4: otherlv_6= '=' ( (lv_right_7_0= ruleXExpression ) )
                    {
                    otherlv_6=(Token)match(input,18,FOLLOW_75); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_6, grammarAccess.getXVariableDeclarationAccess().getEqualsSignKeyword_3_0());
                      			
                    }
                    // InternalXcore.g:7595:4: ( (lv_right_7_0= ruleXExpression ) )
                    // InternalXcore.g:7596:5: (lv_right_7_0= ruleXExpression )
                    {
                    // InternalXcore.g:7596:5: (lv_right_7_0= ruleXExpression )
                    // InternalXcore.g:7597:6: lv_right_7_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getRightXExpressionParserRuleCall_3_1_0());
                      					
                    }
                    pushFollow(FOLLOW_2);
                    lv_right_7_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXVariableDeclarationRule());
                      						}
                      						set(
                      							current,
                      							"right",
                      							lv_right_7_0,
                      							"org.eclipse.xtext.xbase.Xbase.XExpression");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXVariableDeclaration"


    // $ANTLR start "entryRuleJvmFormalParameter"
    // InternalXcore.g:7619:1: entryRuleJvmFormalParameter returns [EObject current=null] : iv_ruleJvmFormalParameter= ruleJvmFormalParameter EOF ;
    public final EObject entryRuleJvmFormalParameter() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJvmFormalParameter = null;


        try {
            // InternalXcore.g:7619:59: (iv_ruleJvmFormalParameter= ruleJvmFormalParameter EOF )
            // InternalXcore.g:7620:2: iv_ruleJvmFormalParameter= ruleJvmFormalParameter EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmFormalParameterRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleJvmFormalParameter=ruleJvmFormalParameter();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmFormalParameter; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJvmFormalParameter"


    // $ANTLR start "ruleJvmFormalParameter"
    // InternalXcore.g:7626:1: ruleJvmFormalParameter returns [EObject current=null] : ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) )? ( (lv_name_1_0= ruleValidID ) ) ) ;
    public final EObject ruleJvmFormalParameter() throws RecognitionException {
        EObject current = null;

        EObject lv_parameterType_0_0 = null;

        AntlrDatatypeRuleToken lv_name_1_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:7632:2: ( ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) )? ( (lv_name_1_0= ruleValidID ) ) ) )
            // InternalXcore.g:7633:2: ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) )? ( (lv_name_1_0= ruleValidID ) ) )
            {
            // InternalXcore.g:7633:2: ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) )? ( (lv_name_1_0= ruleValidID ) ) )
            // InternalXcore.g:7634:3: ( (lv_parameterType_0_0= ruleJvmTypeReference ) )? ( (lv_name_1_0= ruleValidID ) )
            {
            // InternalXcore.g:7634:3: ( (lv_parameterType_0_0= ruleJvmTypeReference ) )?
            int alt144=2;
            switch ( input.LA(1) ) {
                case RULE_ID:
                    {
                    int LA144_1 = input.LA(2);

                    if ( (LA144_1==RULE_ID||LA144_1==23||(LA144_1>=44 && LA144_1<=47)||LA144_1==56||LA144_1==59||LA144_1==67) ) {
                        alt144=1;
                    }
                    }
                    break;
                case 44:
                    {
                    int LA144_2 = input.LA(2);

                    if ( (LA144_2==RULE_ID||LA144_2==23||(LA144_2>=44 && LA144_2<=47)||LA144_2==56||LA144_2==59||LA144_2==67) ) {
                        alt144=1;
                    }
                    }
                    break;
                case 46:
                    {
                    int LA144_3 = input.LA(2);

                    if ( (LA144_3==RULE_ID||LA144_3==23||(LA144_3>=44 && LA144_3<=47)||LA144_3==56||LA144_3==59||LA144_3==67) ) {
                        alt144=1;
                    }
                    }
                    break;
                case 45:
                    {
                    int LA144_4 = input.LA(2);

                    if ( (LA144_4==RULE_ID||LA144_4==23||(LA144_4>=44 && LA144_4<=47)||LA144_4==56||LA144_4==59||LA144_4==67) ) {
                        alt144=1;
                    }
                    }
                    break;
                case 47:
                    {
                    int LA144_5 = input.LA(2);

                    if ( (LA144_5==RULE_ID||LA144_5==23||(LA144_5>=44 && LA144_5<=47)||LA144_5==56||LA144_5==59||LA144_5==67) ) {
                        alt144=1;
                    }
                    }
                    break;
                case 56:
                    {
                    int LA144_6 = input.LA(2);

                    if ( (LA144_6==RULE_ID||LA144_6==23||(LA144_6>=44 && LA144_6<=47)||LA144_6==56||LA144_6==59||LA144_6==67) ) {
                        alt144=1;
                    }
                    }
                    break;
                case 15:
                case 85:
                    {
                    alt144=1;
                    }
                    break;
            }

            switch (alt144) {
                case 1 :
                    // InternalXcore.g:7635:4: (lv_parameterType_0_0= ruleJvmTypeReference )
                    {
                    // InternalXcore.g:7635:4: (lv_parameterType_0_0= ruleJvmTypeReference )
                    // InternalXcore.g:7636:5: lv_parameterType_0_0= ruleJvmTypeReference
                    {
                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getJvmFormalParameterAccess().getParameterTypeJvmTypeReferenceParserRuleCall_0_0());
                      				
                    }
                    pushFollow(FOLLOW_4);
                    lv_parameterType_0_0=ruleJvmTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElementForParent(grammarAccess.getJvmFormalParameterRule());
                      					}
                      					set(
                      						current,
                      						"parameterType",
                      						lv_parameterType_0_0,
                      						"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                      					afterParserOrEnumRuleCall();
                      				
                    }

                    }


                    }
                    break;

            }

            // InternalXcore.g:7653:3: ( (lv_name_1_0= ruleValidID ) )
            // InternalXcore.g:7654:4: (lv_name_1_0= ruleValidID )
            {
            // InternalXcore.g:7654:4: (lv_name_1_0= ruleValidID )
            // InternalXcore.g:7655:5: lv_name_1_0= ruleValidID
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getJvmFormalParameterAccess().getNameValidIDParserRuleCall_1_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_name_1_0=ruleValidID();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getJvmFormalParameterRule());
              					}
              					set(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.emf.ecore.xcore.Xcore.ValidID");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJvmFormalParameter"


    // $ANTLR start "entryRuleFullJvmFormalParameter"
    // InternalXcore.g:7676:1: entryRuleFullJvmFormalParameter returns [EObject current=null] : iv_ruleFullJvmFormalParameter= ruleFullJvmFormalParameter EOF ;
    public final EObject entryRuleFullJvmFormalParameter() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleFullJvmFormalParameter = null;


        try {
            // InternalXcore.g:7676:63: (iv_ruleFullJvmFormalParameter= ruleFullJvmFormalParameter EOF )
            // InternalXcore.g:7677:2: iv_ruleFullJvmFormalParameter= ruleFullJvmFormalParameter EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getFullJvmFormalParameterRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleFullJvmFormalParameter=ruleFullJvmFormalParameter();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleFullJvmFormalParameter; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleFullJvmFormalParameter"


    // $ANTLR start "ruleFullJvmFormalParameter"
    // InternalXcore.g:7683:1: ruleFullJvmFormalParameter returns [EObject current=null] : ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) ) ( (lv_name_1_0= ruleValidID ) ) ) ;
    public final EObject ruleFullJvmFormalParameter() throws RecognitionException {
        EObject current = null;

        EObject lv_parameterType_0_0 = null;

        AntlrDatatypeRuleToken lv_name_1_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:7689:2: ( ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) ) ( (lv_name_1_0= ruleValidID ) ) ) )
            // InternalXcore.g:7690:2: ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) ) ( (lv_name_1_0= ruleValidID ) ) )
            {
            // InternalXcore.g:7690:2: ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) ) ( (lv_name_1_0= ruleValidID ) ) )
            // InternalXcore.g:7691:3: ( (lv_parameterType_0_0= ruleJvmTypeReference ) ) ( (lv_name_1_0= ruleValidID ) )
            {
            // InternalXcore.g:7691:3: ( (lv_parameterType_0_0= ruleJvmTypeReference ) )
            // InternalXcore.g:7692:4: (lv_parameterType_0_0= ruleJvmTypeReference )
            {
            // InternalXcore.g:7692:4: (lv_parameterType_0_0= ruleJvmTypeReference )
            // InternalXcore.g:7693:5: lv_parameterType_0_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getFullJvmFormalParameterAccess().getParameterTypeJvmTypeReferenceParserRuleCall_0_0());
              				
            }
            pushFollow(FOLLOW_4);
            lv_parameterType_0_0=ruleJvmTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getFullJvmFormalParameterRule());
              					}
              					set(
              						current,
              						"parameterType",
              						lv_parameterType_0_0,
              						"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalXcore.g:7710:3: ( (lv_name_1_0= ruleValidID ) )
            // InternalXcore.g:7711:4: (lv_name_1_0= ruleValidID )
            {
            // InternalXcore.g:7711:4: (lv_name_1_0= ruleValidID )
            // InternalXcore.g:7712:5: lv_name_1_0= ruleValidID
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getFullJvmFormalParameterAccess().getNameValidIDParserRuleCall_1_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_name_1_0=ruleValidID();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getFullJvmFormalParameterRule());
              					}
              					set(
              						current,
              						"name",
              						lv_name_1_0,
              						"org.eclipse.emf.ecore.xcore.Xcore.ValidID");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleFullJvmFormalParameter"


    // $ANTLR start "entryRuleXFeatureCall"
    // InternalXcore.g:7733:1: entryRuleXFeatureCall returns [EObject current=null] : iv_ruleXFeatureCall= ruleXFeatureCall EOF ;
    public final EObject entryRuleXFeatureCall() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXFeatureCall = null;


        try {
            // InternalXcore.g:7733:53: (iv_ruleXFeatureCall= ruleXFeatureCall EOF )
            // InternalXcore.g:7734:2: iv_ruleXFeatureCall= ruleXFeatureCall EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXFeatureCallRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXFeatureCall=ruleXFeatureCall();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXFeatureCall; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXFeatureCall"


    // $ANTLR start "ruleXFeatureCall"
    // InternalXcore.g:7740:1: ruleXFeatureCall returns [EObject current=null] : ( () (otherlv_1= '<' ( (lv_typeArguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_7_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_featureCallArguments_8_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) ) )* ) )? otherlv_12= ')' )? ( ( ( () '[' ) )=> (lv_featureCallArguments_13_0= ruleXClosure ) )? ) ;
    public final EObject ruleXFeatureCall() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token lv_explicitOperationCall_7_0=null;
        Token otherlv_10=null;
        Token otherlv_12=null;
        EObject lv_typeArguments_2_0 = null;

        EObject lv_typeArguments_4_0 = null;

        EObject lv_featureCallArguments_8_0 = null;

        EObject lv_featureCallArguments_9_0 = null;

        EObject lv_featureCallArguments_11_0 = null;

        EObject lv_featureCallArguments_13_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:7746:2: ( ( () (otherlv_1= '<' ( (lv_typeArguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_7_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_featureCallArguments_8_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) ) )* ) )? otherlv_12= ')' )? ( ( ( () '[' ) )=> (lv_featureCallArguments_13_0= ruleXClosure ) )? ) )
            // InternalXcore.g:7747:2: ( () (otherlv_1= '<' ( (lv_typeArguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_7_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_featureCallArguments_8_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) ) )* ) )? otherlv_12= ')' )? ( ( ( () '[' ) )=> (lv_featureCallArguments_13_0= ruleXClosure ) )? )
            {
            // InternalXcore.g:7747:2: ( () (otherlv_1= '<' ( (lv_typeArguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_7_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_featureCallArguments_8_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) ) )* ) )? otherlv_12= ')' )? ( ( ( () '[' ) )=> (lv_featureCallArguments_13_0= ruleXClosure ) )? )
            // InternalXcore.g:7748:3: () (otherlv_1= '<' ( (lv_typeArguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' )? ( ( ruleIdOrSuper ) ) ( ( ( ( '(' ) )=> (lv_explicitOperationCall_7_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_featureCallArguments_8_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) ) )* ) )? otherlv_12= ')' )? ( ( ( () '[' ) )=> (lv_featureCallArguments_13_0= ruleXClosure ) )?
            {
            // InternalXcore.g:7748:3: ()
            // InternalXcore.g:7749:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXFeatureCallAccess().getXFeatureCallAction_0(),
              					current);
              			
            }

            }

            // InternalXcore.g:7755:3: (otherlv_1= '<' ( (lv_typeArguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' )?
            int alt146=2;
            int LA146_0 = input.LA(1);

            if ( (LA146_0==23) ) {
                alt146=1;
            }
            switch (alt146) {
                case 1 :
                    // InternalXcore.g:7756:4: otherlv_1= '<' ( (lv_typeArguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>'
                    {
                    otherlv_1=(Token)match(input,23,FOLLOW_95); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_1, grammarAccess.getXFeatureCallAccess().getLessThanSignKeyword_1_0());
                      			
                    }
                    // InternalXcore.g:7760:4: ( (lv_typeArguments_2_0= ruleJvmArgumentTypeReference ) )
                    // InternalXcore.g:7761:5: (lv_typeArguments_2_0= ruleJvmArgumentTypeReference )
                    {
                    // InternalXcore.g:7761:5: (lv_typeArguments_2_0= ruleJvmArgumentTypeReference )
                    // InternalXcore.g:7762:6: lv_typeArguments_2_0= ruleJvmArgumentTypeReference
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_0());
                      					
                    }
                    pushFollow(FOLLOW_18);
                    lv_typeArguments_2_0=ruleJvmArgumentTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXFeatureCallRule());
                      						}
                      						add(
                      							current,
                      							"typeArguments",
                      							lv_typeArguments_2_0,
                      							"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:7779:4: (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) )*
                    loop145:
                    do {
                        int alt145=2;
                        int LA145_0 = input.LA(1);

                        if ( (LA145_0==16) ) {
                            alt145=1;
                        }


                        switch (alt145) {
                    	case 1 :
                    	    // InternalXcore.g:7780:5: otherlv_3= ',' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) )
                    	    {
                    	    otherlv_3=(Token)match(input,16,FOLLOW_95); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_3, grammarAccess.getXFeatureCallAccess().getCommaKeyword_1_2_0());
                    	      				
                    	    }
                    	    // InternalXcore.g:7784:5: ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) )
                    	    // InternalXcore.g:7785:6: (lv_typeArguments_4_0= ruleJvmArgumentTypeReference )
                    	    {
                    	    // InternalXcore.g:7785:6: (lv_typeArguments_4_0= ruleJvmArgumentTypeReference )
                    	    // InternalXcore.g:7786:7: lv_typeArguments_4_0= ruleJvmArgumentTypeReference
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_2_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_18);
                    	    lv_typeArguments_4_0=ruleJvmArgumentTypeReference();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getXFeatureCallRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"typeArguments",
                    	      								lv_typeArguments_4_0,
                    	      								"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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

                    otherlv_5=(Token)match(input,24,FOLLOW_94); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_5, grammarAccess.getXFeatureCallAccess().getGreaterThanSignKeyword_1_3());
                      			
                    }

                    }
                    break;

            }

            // InternalXcore.g:7809:3: ( ( ruleIdOrSuper ) )
            // InternalXcore.g:7810:4: ( ruleIdOrSuper )
            {
            // InternalXcore.g:7810:4: ( ruleIdOrSuper )
            // InternalXcore.g:7811:5: ruleIdOrSuper
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getXFeatureCallRule());
              					}
              				
            }
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureJvmIdentifiableElementCrossReference_2_0());
              				
            }
            pushFollow(FOLLOW_120);
            ruleIdOrSuper();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalXcore.g:7825:3: ( ( ( ( '(' ) )=> (lv_explicitOperationCall_7_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_featureCallArguments_8_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) ) )* ) )? otherlv_12= ')' )?
            int alt149=2;
            alt149 = dfa149.predict(input);
            switch (alt149) {
                case 1 :
                    // InternalXcore.g:7826:4: ( ( ( '(' ) )=> (lv_explicitOperationCall_7_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_featureCallArguments_8_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) ) )* ) )? otherlv_12= ')'
                    {
                    // InternalXcore.g:7826:4: ( ( ( '(' ) )=> (lv_explicitOperationCall_7_0= '(' ) )
                    // InternalXcore.g:7827:5: ( ( '(' ) )=> (lv_explicitOperationCall_7_0= '(' )
                    {
                    // InternalXcore.g:7831:5: (lv_explicitOperationCall_7_0= '(' )
                    // InternalXcore.g:7832:6: lv_explicitOperationCall_7_0= '('
                    {
                    lv_explicitOperationCall_7_0=(Token)match(input,15,FOLLOW_97); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_explicitOperationCall_7_0, grammarAccess.getXFeatureCallAccess().getExplicitOperationCallLeftParenthesisKeyword_3_0_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getXFeatureCallRule());
                      						}
                      						setWithLastConsumed(current, "explicitOperationCall", lv_explicitOperationCall_7_0 != null, "(");
                      					
                    }

                    }


                    }

                    // InternalXcore.g:7844:4: ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_featureCallArguments_8_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) ) )* ) )?
                    int alt148=3;
                    alt148 = dfa148.predict(input);
                    switch (alt148) {
                        case 1 :
                            // InternalXcore.g:7845:5: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_featureCallArguments_8_0= ruleXShortClosure ) )
                            {
                            // InternalXcore.g:7845:5: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_featureCallArguments_8_0= ruleXShortClosure ) )
                            // InternalXcore.g:7846:6: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_featureCallArguments_8_0= ruleXShortClosure )
                            {
                            // InternalXcore.g:7871:6: (lv_featureCallArguments_8_0= ruleXShortClosure )
                            // InternalXcore.g:7872:7: lv_featureCallArguments_8_0= ruleXShortClosure
                            {
                            if ( state.backtracking==0 ) {

                              							newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXShortClosureParserRuleCall_3_1_0_0());
                              						
                            }
                            pushFollow(FOLLOW_98);
                            lv_featureCallArguments_8_0=ruleXShortClosure();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElementForParent(grammarAccess.getXFeatureCallRule());
                              							}
                              							add(
                              								current,
                              								"featureCallArguments",
                              								lv_featureCallArguments_8_0,
                              								"org.eclipse.xtext.xbase.Xbase.XShortClosure");
                              							afterParserOrEnumRuleCall();
                              						
                            }

                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalXcore.g:7890:5: ( ( (lv_featureCallArguments_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) ) )* )
                            {
                            // InternalXcore.g:7890:5: ( ( (lv_featureCallArguments_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) ) )* )
                            // InternalXcore.g:7891:6: ( (lv_featureCallArguments_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) ) )*
                            {
                            // InternalXcore.g:7891:6: ( (lv_featureCallArguments_9_0= ruleXExpression ) )
                            // InternalXcore.g:7892:7: (lv_featureCallArguments_9_0= ruleXExpression )
                            {
                            // InternalXcore.g:7892:7: (lv_featureCallArguments_9_0= ruleXExpression )
                            // InternalXcore.g:7893:8: lv_featureCallArguments_9_0= ruleXExpression
                            {
                            if ( state.backtracking==0 ) {

                              								newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXExpressionParserRuleCall_3_1_1_0_0());
                              							
                            }
                            pushFollow(FOLLOW_10);
                            lv_featureCallArguments_9_0=ruleXExpression();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              								if (current==null) {
                              									current = createModelElementForParent(grammarAccess.getXFeatureCallRule());
                              								}
                              								add(
                              									current,
                              									"featureCallArguments",
                              									lv_featureCallArguments_9_0,
                              									"org.eclipse.xtext.xbase.Xbase.XExpression");
                              								afterParserOrEnumRuleCall();
                              							
                            }

                            }


                            }

                            // InternalXcore.g:7910:6: (otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) ) )*
                            loop147:
                            do {
                                int alt147=2;
                                int LA147_0 = input.LA(1);

                                if ( (LA147_0==16) ) {
                                    alt147=1;
                                }


                                switch (alt147) {
                            	case 1 :
                            	    // InternalXcore.g:7911:7: otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) )
                            	    {
                            	    otherlv_10=(Token)match(input,16,FOLLOW_75); if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	      							newLeafNode(otherlv_10, grammarAccess.getXFeatureCallAccess().getCommaKeyword_3_1_1_1_0());
                            	      						
                            	    }
                            	    // InternalXcore.g:7915:7: ( (lv_featureCallArguments_11_0= ruleXExpression ) )
                            	    // InternalXcore.g:7916:8: (lv_featureCallArguments_11_0= ruleXExpression )
                            	    {
                            	    // InternalXcore.g:7916:8: (lv_featureCallArguments_11_0= ruleXExpression )
                            	    // InternalXcore.g:7917:9: lv_featureCallArguments_11_0= ruleXExpression
                            	    {
                            	    if ( state.backtracking==0 ) {

                            	      									newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXExpressionParserRuleCall_3_1_1_1_1_0());
                            	      								
                            	    }
                            	    pushFollow(FOLLOW_10);
                            	    lv_featureCallArguments_11_0=ruleXExpression();

                            	    state._fsp--;
                            	    if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	      									if (current==null) {
                            	      										current = createModelElementForParent(grammarAccess.getXFeatureCallRule());
                            	      									}
                            	      									add(
                            	      										current,
                            	      										"featureCallArguments",
                            	      										lv_featureCallArguments_11_0,
                            	      										"org.eclipse.xtext.xbase.Xbase.XExpression");
                            	      									afterParserOrEnumRuleCall();
                            	      								
                            	    }

                            	    }


                            	    }


                            	    }
                            	    break;

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


                            }


                            }
                            break;

                    }

                    otherlv_12=(Token)match(input,17,FOLLOW_121); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_12, grammarAccess.getXFeatureCallAccess().getRightParenthesisKeyword_3_2());
                      			
                    }

                    }
                    break;

            }

            // InternalXcore.g:7942:3: ( ( ( () '[' ) )=> (lv_featureCallArguments_13_0= ruleXClosure ) )?
            int alt150=2;
            alt150 = dfa150.predict(input);
            switch (alt150) {
                case 1 :
                    // InternalXcore.g:7943:4: ( ( () '[' ) )=> (lv_featureCallArguments_13_0= ruleXClosure )
                    {
                    // InternalXcore.g:7949:4: (lv_featureCallArguments_13_0= ruleXClosure )
                    // InternalXcore.g:7950:5: lv_featureCallArguments_13_0= ruleXClosure
                    {
                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXClosureParserRuleCall_4_0());
                      				
                    }
                    pushFollow(FOLLOW_2);
                    lv_featureCallArguments_13_0=ruleXClosure();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElementForParent(grammarAccess.getXFeatureCallRule());
                      					}
                      					add(
                      						current,
                      						"featureCallArguments",
                      						lv_featureCallArguments_13_0,
                      						"org.eclipse.xtext.xbase.Xbase.XClosure");
                      					afterParserOrEnumRuleCall();
                      				
                    }

                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXFeatureCall"


    // $ANTLR start "entryRuleIdOrSuper"
    // InternalXcore.g:7971:1: entryRuleIdOrSuper returns [String current=null] : iv_ruleIdOrSuper= ruleIdOrSuper EOF ;
    public final String entryRuleIdOrSuper() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleIdOrSuper = null;


        try {
            // InternalXcore.g:7971:49: (iv_ruleIdOrSuper= ruleIdOrSuper EOF )
            // InternalXcore.g:7972:2: iv_ruleIdOrSuper= ruleIdOrSuper EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getIdOrSuperRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleIdOrSuper=ruleIdOrSuper();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleIdOrSuper.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleIdOrSuper"


    // $ANTLR start "ruleIdOrSuper"
    // InternalXcore.g:7978:1: ruleIdOrSuper returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_FeatureCallID_0= ruleFeatureCallID | kw= 'super' ) ;
    public final AntlrDatatypeRuleToken ruleIdOrSuper() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_FeatureCallID_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:7984:2: ( (this_FeatureCallID_0= ruleFeatureCallID | kw= 'super' ) )
            // InternalXcore.g:7985:2: (this_FeatureCallID_0= ruleFeatureCallID | kw= 'super' )
            {
            // InternalXcore.g:7985:2: (this_FeatureCallID_0= ruleFeatureCallID | kw= 'super' )
            int alt151=2;
            int LA151_0 = input.LA(1);

            if ( (LA151_0==RULE_ID||LA151_0==13||(LA151_0>=19 && LA151_0<=21)||(LA151_0>=25 && LA151_0<=28)||(LA151_0>=32 && LA151_0<=57)||(LA151_0>=68 && LA151_0<=69)) ) {
                alt151=1;
            }
            else if ( (LA151_0==66) ) {
                alt151=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 151, 0, input);

                throw nvae;
            }
            switch (alt151) {
                case 1 :
                    // InternalXcore.g:7986:3: this_FeatureCallID_0= ruleFeatureCallID
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getIdOrSuperAccess().getFeatureCallIDParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_FeatureCallID_0=ruleFeatureCallID();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(this_FeatureCallID_0);
                      		
                    }
                    if ( state.backtracking==0 ) {

                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:7997:3: kw= 'super'
                    {
                    kw=(Token)match(input,66,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(kw);
                      			newLeafNode(kw, grammarAccess.getIdOrSuperAccess().getSuperKeyword_1());
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleIdOrSuper"


    // $ANTLR start "entryRuleXConstructorCall"
    // InternalXcore.g:8006:1: entryRuleXConstructorCall returns [EObject current=null] : iv_ruleXConstructorCall= ruleXConstructorCall EOF ;
    public final EObject entryRuleXConstructorCall() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXConstructorCall = null;


        try {
            // InternalXcore.g:8006:57: (iv_ruleXConstructorCall= ruleXConstructorCall EOF )
            // InternalXcore.g:8007:2: iv_ruleXConstructorCall= ruleXConstructorCall EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXConstructorCallRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXConstructorCall=ruleXConstructorCall();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXConstructorCall; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXConstructorCall"


    // $ANTLR start "ruleXConstructorCall"
    // InternalXcore.g:8013:1: ruleXConstructorCall returns [EObject current=null] : ( () otherlv_1= 'new' ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_3= '<' ) ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )? ( ( ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )? ( ( ( () '[' ) )=> (lv_arguments_14_0= ruleXClosure ) )? ) ;
    public final EObject ruleXConstructorCall() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token lv_explicitConstructorCall_8_0=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        EObject lv_typeArguments_4_0 = null;

        EObject lv_typeArguments_6_0 = null;

        EObject lv_arguments_9_0 = null;

        EObject lv_arguments_10_0 = null;

        EObject lv_arguments_12_0 = null;

        EObject lv_arguments_14_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:8019:2: ( ( () otherlv_1= 'new' ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_3= '<' ) ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )? ( ( ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )? ( ( ( () '[' ) )=> (lv_arguments_14_0= ruleXClosure ) )? ) )
            // InternalXcore.g:8020:2: ( () otherlv_1= 'new' ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_3= '<' ) ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )? ( ( ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )? ( ( ( () '[' ) )=> (lv_arguments_14_0= ruleXClosure ) )? )
            {
            // InternalXcore.g:8020:2: ( () otherlv_1= 'new' ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_3= '<' ) ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )? ( ( ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )? ( ( ( () '[' ) )=> (lv_arguments_14_0= ruleXClosure ) )? )
            // InternalXcore.g:8021:3: () otherlv_1= 'new' ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_3= '<' ) ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )? ( ( ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )? ( ( ( () '[' ) )=> (lv_arguments_14_0= ruleXClosure ) )?
            {
            // InternalXcore.g:8021:3: ()
            // InternalXcore.g:8022:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXConstructorCallAccess().getXConstructorCallAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,109,FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXConstructorCallAccess().getNewKeyword_1());
              		
            }
            // InternalXcore.g:8032:3: ( ( ruleQualifiedName ) )
            // InternalXcore.g:8033:4: ( ruleQualifiedName )
            {
            // InternalXcore.g:8033:4: ( ruleQualifiedName )
            // InternalXcore.g:8034:5: ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getXConstructorCallRule());
              					}
              				
            }
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXConstructorCallAccess().getConstructorJvmConstructorCrossReference_2_0());
              				
            }
            pushFollow(FOLLOW_122);
            ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalXcore.g:8048:3: ( ( ( '<' )=>otherlv_3= '<' ) ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )?
            int alt153=2;
            alt153 = dfa153.predict(input);
            switch (alt153) {
                case 1 :
                    // InternalXcore.g:8049:4: ( ( '<' )=>otherlv_3= '<' ) ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>'
                    {
                    // InternalXcore.g:8049:4: ( ( '<' )=>otherlv_3= '<' )
                    // InternalXcore.g:8050:5: ( '<' )=>otherlv_3= '<'
                    {
                    otherlv_3=(Token)match(input,23,FOLLOW_95); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_3, grammarAccess.getXConstructorCallAccess().getLessThanSignKeyword_3_0());
                      				
                    }

                    }

                    // InternalXcore.g:8056:4: ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) )
                    // InternalXcore.g:8057:5: (lv_typeArguments_4_0= ruleJvmArgumentTypeReference )
                    {
                    // InternalXcore.g:8057:5: (lv_typeArguments_4_0= ruleJvmArgumentTypeReference )
                    // InternalXcore.g:8058:6: lv_typeArguments_4_0= ruleJvmArgumentTypeReference
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXConstructorCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_3_1_0());
                      					
                    }
                    pushFollow(FOLLOW_18);
                    lv_typeArguments_4_0=ruleJvmArgumentTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXConstructorCallRule());
                      						}
                      						add(
                      							current,
                      							"typeArguments",
                      							lv_typeArguments_4_0,
                      							"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:8075:4: (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )*
                    loop152:
                    do {
                        int alt152=2;
                        int LA152_0 = input.LA(1);

                        if ( (LA152_0==16) ) {
                            alt152=1;
                        }


                        switch (alt152) {
                    	case 1 :
                    	    // InternalXcore.g:8076:5: otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) )
                    	    {
                    	    otherlv_5=(Token)match(input,16,FOLLOW_95); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_5, grammarAccess.getXConstructorCallAccess().getCommaKeyword_3_2_0());
                    	      				
                    	    }
                    	    // InternalXcore.g:8080:5: ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) )
                    	    // InternalXcore.g:8081:6: (lv_typeArguments_6_0= ruleJvmArgumentTypeReference )
                    	    {
                    	    // InternalXcore.g:8081:6: (lv_typeArguments_6_0= ruleJvmArgumentTypeReference )
                    	    // InternalXcore.g:8082:7: lv_typeArguments_6_0= ruleJvmArgumentTypeReference
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXConstructorCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_3_2_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_18);
                    	    lv_typeArguments_6_0=ruleJvmArgumentTypeReference();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getXConstructorCallRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"typeArguments",
                    	      								lv_typeArguments_6_0,
                    	      								"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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

                    otherlv_7=(Token)match(input,24,FOLLOW_120); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_7, grammarAccess.getXConstructorCallAccess().getGreaterThanSignKeyword_3_3());
                      			
                    }

                    }
                    break;

            }

            // InternalXcore.g:8105:3: ( ( ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )?
            int alt156=2;
            alt156 = dfa156.predict(input);
            switch (alt156) {
                case 1 :
                    // InternalXcore.g:8106:4: ( ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')'
                    {
                    // InternalXcore.g:8106:4: ( ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' ) )
                    // InternalXcore.g:8107:5: ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' )
                    {
                    // InternalXcore.g:8111:5: (lv_explicitConstructorCall_8_0= '(' )
                    // InternalXcore.g:8112:6: lv_explicitConstructorCall_8_0= '('
                    {
                    lv_explicitConstructorCall_8_0=(Token)match(input,15,FOLLOW_97); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_explicitConstructorCall_8_0, grammarAccess.getXConstructorCallAccess().getExplicitConstructorCallLeftParenthesisKeyword_4_0_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getXConstructorCallRule());
                      						}
                      						setWithLastConsumed(current, "explicitConstructorCall", lv_explicitConstructorCall_8_0 != null, "(");
                      					
                    }

                    }


                    }

                    // InternalXcore.g:8124:4: ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )?
                    int alt155=3;
                    alt155 = dfa155.predict(input);
                    switch (alt155) {
                        case 1 :
                            // InternalXcore.g:8125:5: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) )
                            {
                            // InternalXcore.g:8125:5: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) )
                            // InternalXcore.g:8126:6: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure )
                            {
                            // InternalXcore.g:8151:6: (lv_arguments_9_0= ruleXShortClosure )
                            // InternalXcore.g:8152:7: lv_arguments_9_0= ruleXShortClosure
                            {
                            if ( state.backtracking==0 ) {

                              							newCompositeNode(grammarAccess.getXConstructorCallAccess().getArgumentsXShortClosureParserRuleCall_4_1_0_0());
                              						
                            }
                            pushFollow(FOLLOW_98);
                            lv_arguments_9_0=ruleXShortClosure();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElementForParent(grammarAccess.getXConstructorCallRule());
                              							}
                              							add(
                              								current,
                              								"arguments",
                              								lv_arguments_9_0,
                              								"org.eclipse.xtext.xbase.Xbase.XShortClosure");
                              							afterParserOrEnumRuleCall();
                              						
                            }

                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalXcore.g:8170:5: ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* )
                            {
                            // InternalXcore.g:8170:5: ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* )
                            // InternalXcore.g:8171:6: ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )*
                            {
                            // InternalXcore.g:8171:6: ( (lv_arguments_10_0= ruleXExpression ) )
                            // InternalXcore.g:8172:7: (lv_arguments_10_0= ruleXExpression )
                            {
                            // InternalXcore.g:8172:7: (lv_arguments_10_0= ruleXExpression )
                            // InternalXcore.g:8173:8: lv_arguments_10_0= ruleXExpression
                            {
                            if ( state.backtracking==0 ) {

                              								newCompositeNode(grammarAccess.getXConstructorCallAccess().getArgumentsXExpressionParserRuleCall_4_1_1_0_0());
                              							
                            }
                            pushFollow(FOLLOW_10);
                            lv_arguments_10_0=ruleXExpression();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              								if (current==null) {
                              									current = createModelElementForParent(grammarAccess.getXConstructorCallRule());
                              								}
                              								add(
                              									current,
                              									"arguments",
                              									lv_arguments_10_0,
                              									"org.eclipse.xtext.xbase.Xbase.XExpression");
                              								afterParserOrEnumRuleCall();
                              							
                            }

                            }


                            }

                            // InternalXcore.g:8190:6: (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )*
                            loop154:
                            do {
                                int alt154=2;
                                int LA154_0 = input.LA(1);

                                if ( (LA154_0==16) ) {
                                    alt154=1;
                                }


                                switch (alt154) {
                            	case 1 :
                            	    // InternalXcore.g:8191:7: otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) )
                            	    {
                            	    otherlv_11=(Token)match(input,16,FOLLOW_75); if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	      							newLeafNode(otherlv_11, grammarAccess.getXConstructorCallAccess().getCommaKeyword_4_1_1_1_0());
                            	      						
                            	    }
                            	    // InternalXcore.g:8195:7: ( (lv_arguments_12_0= ruleXExpression ) )
                            	    // InternalXcore.g:8196:8: (lv_arguments_12_0= ruleXExpression )
                            	    {
                            	    // InternalXcore.g:8196:8: (lv_arguments_12_0= ruleXExpression )
                            	    // InternalXcore.g:8197:9: lv_arguments_12_0= ruleXExpression
                            	    {
                            	    if ( state.backtracking==0 ) {

                            	      									newCompositeNode(grammarAccess.getXConstructorCallAccess().getArgumentsXExpressionParserRuleCall_4_1_1_1_1_0());
                            	      								
                            	    }
                            	    pushFollow(FOLLOW_10);
                            	    lv_arguments_12_0=ruleXExpression();

                            	    state._fsp--;
                            	    if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	      									if (current==null) {
                            	      										current = createModelElementForParent(grammarAccess.getXConstructorCallRule());
                            	      									}
                            	      									add(
                            	      										current,
                            	      										"arguments",
                            	      										lv_arguments_12_0,
                            	      										"org.eclipse.xtext.xbase.Xbase.XExpression");
                            	      									afterParserOrEnumRuleCall();
                            	      								
                            	    }

                            	    }


                            	    }


                            	    }
                            	    break;

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


                            }


                            }
                            break;

                    }

                    otherlv_13=(Token)match(input,17,FOLLOW_121); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_13, grammarAccess.getXConstructorCallAccess().getRightParenthesisKeyword_4_2());
                      			
                    }

                    }
                    break;

            }

            // InternalXcore.g:8222:3: ( ( ( () '[' ) )=> (lv_arguments_14_0= ruleXClosure ) )?
            int alt157=2;
            alt157 = dfa157.predict(input);
            switch (alt157) {
                case 1 :
                    // InternalXcore.g:8223:4: ( ( () '[' ) )=> (lv_arguments_14_0= ruleXClosure )
                    {
                    // InternalXcore.g:8229:4: (lv_arguments_14_0= ruleXClosure )
                    // InternalXcore.g:8230:5: lv_arguments_14_0= ruleXClosure
                    {
                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getXConstructorCallAccess().getArgumentsXClosureParserRuleCall_5_0());
                      				
                    }
                    pushFollow(FOLLOW_2);
                    lv_arguments_14_0=ruleXClosure();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElementForParent(grammarAccess.getXConstructorCallRule());
                      					}
                      					add(
                      						current,
                      						"arguments",
                      						lv_arguments_14_0,
                      						"org.eclipse.xtext.xbase.Xbase.XClosure");
                      					afterParserOrEnumRuleCall();
                      				
                    }

                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXConstructorCall"


    // $ANTLR start "entryRuleXBooleanLiteral"
    // InternalXcore.g:8251:1: entryRuleXBooleanLiteral returns [EObject current=null] : iv_ruleXBooleanLiteral= ruleXBooleanLiteral EOF ;
    public final EObject entryRuleXBooleanLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXBooleanLiteral = null;


        try {
            // InternalXcore.g:8251:56: (iv_ruleXBooleanLiteral= ruleXBooleanLiteral EOF )
            // InternalXcore.g:8252:2: iv_ruleXBooleanLiteral= ruleXBooleanLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXBooleanLiteralRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXBooleanLiteral=ruleXBooleanLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXBooleanLiteral; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXBooleanLiteral"


    // $ANTLR start "ruleXBooleanLiteral"
    // InternalXcore.g:8258:1: ruleXBooleanLiteral returns [EObject current=null] : ( () (otherlv_1= 'false' | ( (lv_isTrue_2_0= 'true' ) ) ) ) ;
    public final EObject ruleXBooleanLiteral() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token lv_isTrue_2_0=null;


        	enterRule();

        try {
            // InternalXcore.g:8264:2: ( ( () (otherlv_1= 'false' | ( (lv_isTrue_2_0= 'true' ) ) ) ) )
            // InternalXcore.g:8265:2: ( () (otherlv_1= 'false' | ( (lv_isTrue_2_0= 'true' ) ) ) )
            {
            // InternalXcore.g:8265:2: ( () (otherlv_1= 'false' | ( (lv_isTrue_2_0= 'true' ) ) ) )
            // InternalXcore.g:8266:3: () (otherlv_1= 'false' | ( (lv_isTrue_2_0= 'true' ) ) )
            {
            // InternalXcore.g:8266:3: ()
            // InternalXcore.g:8267:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXBooleanLiteralAccess().getXBooleanLiteralAction_0(),
              					current);
              			
            }

            }

            // InternalXcore.g:8273:3: (otherlv_1= 'false' | ( (lv_isTrue_2_0= 'true' ) ) )
            int alt158=2;
            int LA158_0 = input.LA(1);

            if ( (LA158_0==110) ) {
                alt158=1;
            }
            else if ( (LA158_0==111) ) {
                alt158=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 158, 0, input);

                throw nvae;
            }
            switch (alt158) {
                case 1 :
                    // InternalXcore.g:8274:4: otherlv_1= 'false'
                    {
                    otherlv_1=(Token)match(input,110,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_1, grammarAccess.getXBooleanLiteralAccess().getFalseKeyword_1_0());
                      			
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:8279:4: ( (lv_isTrue_2_0= 'true' ) )
                    {
                    // InternalXcore.g:8279:4: ( (lv_isTrue_2_0= 'true' ) )
                    // InternalXcore.g:8280:5: (lv_isTrue_2_0= 'true' )
                    {
                    // InternalXcore.g:8280:5: (lv_isTrue_2_0= 'true' )
                    // InternalXcore.g:8281:6: lv_isTrue_2_0= 'true'
                    {
                    lv_isTrue_2_0=(Token)match(input,111,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						newLeafNode(lv_isTrue_2_0, grammarAccess.getXBooleanLiteralAccess().getIsTrueTrueKeyword_1_1_0());
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getXBooleanLiteralRule());
                      						}
                      						setWithLastConsumed(current, "isTrue", lv_isTrue_2_0 != null, "true");
                      					
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXBooleanLiteral"


    // $ANTLR start "entryRuleXNullLiteral"
    // InternalXcore.g:8298:1: entryRuleXNullLiteral returns [EObject current=null] : iv_ruleXNullLiteral= ruleXNullLiteral EOF ;
    public final EObject entryRuleXNullLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXNullLiteral = null;


        try {
            // InternalXcore.g:8298:53: (iv_ruleXNullLiteral= ruleXNullLiteral EOF )
            // InternalXcore.g:8299:2: iv_ruleXNullLiteral= ruleXNullLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXNullLiteralRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXNullLiteral=ruleXNullLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXNullLiteral; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXNullLiteral"


    // $ANTLR start "ruleXNullLiteral"
    // InternalXcore.g:8305:1: ruleXNullLiteral returns [EObject current=null] : ( () otherlv_1= 'null' ) ;
    public final EObject ruleXNullLiteral() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;


        	enterRule();

        try {
            // InternalXcore.g:8311:2: ( ( () otherlv_1= 'null' ) )
            // InternalXcore.g:8312:2: ( () otherlv_1= 'null' )
            {
            // InternalXcore.g:8312:2: ( () otherlv_1= 'null' )
            // InternalXcore.g:8313:3: () otherlv_1= 'null'
            {
            // InternalXcore.g:8313:3: ()
            // InternalXcore.g:8314:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXNullLiteralAccess().getXNullLiteralAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,112,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXNullLiteralAccess().getNullKeyword_1());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXNullLiteral"


    // $ANTLR start "entryRuleXNumberLiteral"
    // InternalXcore.g:8328:1: entryRuleXNumberLiteral returns [EObject current=null] : iv_ruleXNumberLiteral= ruleXNumberLiteral EOF ;
    public final EObject entryRuleXNumberLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXNumberLiteral = null;


        try {
            // InternalXcore.g:8328:55: (iv_ruleXNumberLiteral= ruleXNumberLiteral EOF )
            // InternalXcore.g:8329:2: iv_ruleXNumberLiteral= ruleXNumberLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXNumberLiteralRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXNumberLiteral=ruleXNumberLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXNumberLiteral; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXNumberLiteral"


    // $ANTLR start "ruleXNumberLiteral"
    // InternalXcore.g:8335:1: ruleXNumberLiteral returns [EObject current=null] : ( () ( (lv_value_1_0= ruleNumber ) ) ) ;
    public final EObject ruleXNumberLiteral() throws RecognitionException {
        EObject current = null;

        AntlrDatatypeRuleToken lv_value_1_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:8341:2: ( ( () ( (lv_value_1_0= ruleNumber ) ) ) )
            // InternalXcore.g:8342:2: ( () ( (lv_value_1_0= ruleNumber ) ) )
            {
            // InternalXcore.g:8342:2: ( () ( (lv_value_1_0= ruleNumber ) ) )
            // InternalXcore.g:8343:3: () ( (lv_value_1_0= ruleNumber ) )
            {
            // InternalXcore.g:8343:3: ()
            // InternalXcore.g:8344:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXNumberLiteralAccess().getXNumberLiteralAction_0(),
              					current);
              			
            }

            }

            // InternalXcore.g:8350:3: ( (lv_value_1_0= ruleNumber ) )
            // InternalXcore.g:8351:4: (lv_value_1_0= ruleNumber )
            {
            // InternalXcore.g:8351:4: (lv_value_1_0= ruleNumber )
            // InternalXcore.g:8352:5: lv_value_1_0= ruleNumber
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXNumberLiteralAccess().getValueNumberParserRuleCall_1_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_value_1_0=ruleNumber();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXNumberLiteralRule());
              					}
              					set(
              						current,
              						"value",
              						lv_value_1_0,
              						"org.eclipse.xtext.xbase.Xbase.Number");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXNumberLiteral"


    // $ANTLR start "entryRuleXStringLiteral"
    // InternalXcore.g:8373:1: entryRuleXStringLiteral returns [EObject current=null] : iv_ruleXStringLiteral= ruleXStringLiteral EOF ;
    public final EObject entryRuleXStringLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXStringLiteral = null;


        try {
            // InternalXcore.g:8373:55: (iv_ruleXStringLiteral= ruleXStringLiteral EOF )
            // InternalXcore.g:8374:2: iv_ruleXStringLiteral= ruleXStringLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXStringLiteralRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXStringLiteral=ruleXStringLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXStringLiteral; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXStringLiteral"


    // $ANTLR start "ruleXStringLiteral"
    // InternalXcore.g:8380:1: ruleXStringLiteral returns [EObject current=null] : ( () ( (lv_value_1_0= RULE_STRING ) ) ) ;
    public final EObject ruleXStringLiteral() throws RecognitionException {
        EObject current = null;

        Token lv_value_1_0=null;


        	enterRule();

        try {
            // InternalXcore.g:8386:2: ( ( () ( (lv_value_1_0= RULE_STRING ) ) ) )
            // InternalXcore.g:8387:2: ( () ( (lv_value_1_0= RULE_STRING ) ) )
            {
            // InternalXcore.g:8387:2: ( () ( (lv_value_1_0= RULE_STRING ) ) )
            // InternalXcore.g:8388:3: () ( (lv_value_1_0= RULE_STRING ) )
            {
            // InternalXcore.g:8388:3: ()
            // InternalXcore.g:8389:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXStringLiteralAccess().getXStringLiteralAction_0(),
              					current);
              			
            }

            }

            // InternalXcore.g:8395:3: ( (lv_value_1_0= RULE_STRING ) )
            // InternalXcore.g:8396:4: (lv_value_1_0= RULE_STRING )
            {
            // InternalXcore.g:8396:4: (lv_value_1_0= RULE_STRING )
            // InternalXcore.g:8397:5: lv_value_1_0= RULE_STRING
            {
            lv_value_1_0=(Token)match(input,RULE_STRING,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(lv_value_1_0, grammarAccess.getXStringLiteralAccess().getValueSTRINGTerminalRuleCall_1_0());
              				
            }
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getXStringLiteralRule());
              					}
              					setWithLastConsumed(
              						current,
              						"value",
              						lv_value_1_0,
              						"org.eclipse.xtext.xbase.Xtype.STRING");
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXStringLiteral"


    // $ANTLR start "entryRuleXTypeLiteral"
    // InternalXcore.g:8417:1: entryRuleXTypeLiteral returns [EObject current=null] : iv_ruleXTypeLiteral= ruleXTypeLiteral EOF ;
    public final EObject entryRuleXTypeLiteral() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXTypeLiteral = null;


        try {
            // InternalXcore.g:8417:53: (iv_ruleXTypeLiteral= ruleXTypeLiteral EOF )
            // InternalXcore.g:8418:2: iv_ruleXTypeLiteral= ruleXTypeLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXTypeLiteralRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXTypeLiteral=ruleXTypeLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXTypeLiteral; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXTypeLiteral"


    // $ANTLR start "ruleXTypeLiteral"
    // InternalXcore.g:8424:1: ruleXTypeLiteral returns [EObject current=null] : ( () otherlv_1= 'typeof' otherlv_2= '(' ( ( ruleQualifiedName ) ) ( (lv_arrayDimensions_4_0= ruleArrayBrackets ) )* otherlv_5= ')' ) ;
    public final EObject ruleXTypeLiteral() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_5=null;
        AntlrDatatypeRuleToken lv_arrayDimensions_4_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:8430:2: ( ( () otherlv_1= 'typeof' otherlv_2= '(' ( ( ruleQualifiedName ) ) ( (lv_arrayDimensions_4_0= ruleArrayBrackets ) )* otherlv_5= ')' ) )
            // InternalXcore.g:8431:2: ( () otherlv_1= 'typeof' otherlv_2= '(' ( ( ruleQualifiedName ) ) ( (lv_arrayDimensions_4_0= ruleArrayBrackets ) )* otherlv_5= ')' )
            {
            // InternalXcore.g:8431:2: ( () otherlv_1= 'typeof' otherlv_2= '(' ( ( ruleQualifiedName ) ) ( (lv_arrayDimensions_4_0= ruleArrayBrackets ) )* otherlv_5= ')' )
            // InternalXcore.g:8432:3: () otherlv_1= 'typeof' otherlv_2= '(' ( ( ruleQualifiedName ) ) ( (lv_arrayDimensions_4_0= ruleArrayBrackets ) )* otherlv_5= ')'
            {
            // InternalXcore.g:8432:3: ()
            // InternalXcore.g:8433:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXTypeLiteralAccess().getXTypeLiteralAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,113,FOLLOW_56); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXTypeLiteralAccess().getTypeofKeyword_1());
              		
            }
            otherlv_2=(Token)match(input,15,FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_2, grammarAccess.getXTypeLiteralAccess().getLeftParenthesisKeyword_2());
              		
            }
            // InternalXcore.g:8447:3: ( ( ruleQualifiedName ) )
            // InternalXcore.g:8448:4: ( ruleQualifiedName )
            {
            // InternalXcore.g:8448:4: ( ruleQualifiedName )
            // InternalXcore.g:8449:5: ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getXTypeLiteralRule());
              					}
              				
            }
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXTypeLiteralAccess().getTypeJvmTypeCrossReference_3_0());
              				
            }
            pushFollow(FOLLOW_123);
            ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalXcore.g:8463:3: ( (lv_arrayDimensions_4_0= ruleArrayBrackets ) )*
            loop159:
            do {
                int alt159=2;
                int LA159_0 = input.LA(1);

                if ( (LA159_0==59) ) {
                    alt159=1;
                }


                switch (alt159) {
            	case 1 :
            	    // InternalXcore.g:8464:4: (lv_arrayDimensions_4_0= ruleArrayBrackets )
            	    {
            	    // InternalXcore.g:8464:4: (lv_arrayDimensions_4_0= ruleArrayBrackets )
            	    // InternalXcore.g:8465:5: lv_arrayDimensions_4_0= ruleArrayBrackets
            	    {
            	    if ( state.backtracking==0 ) {

            	      					newCompositeNode(grammarAccess.getXTypeLiteralAccess().getArrayDimensionsArrayBracketsParserRuleCall_4_0());
            	      				
            	    }
            	    pushFollow(FOLLOW_123);
            	    lv_arrayDimensions_4_0=ruleArrayBrackets();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					if (current==null) {
            	      						current = createModelElementForParent(grammarAccess.getXTypeLiteralRule());
            	      					}
            	      					add(
            	      						current,
            	      						"arrayDimensions",
            	      						lv_arrayDimensions_4_0,
            	      						"org.eclipse.xtext.xbase.Xtype.ArrayBrackets");
            	      					afterParserOrEnumRuleCall();
            	      				
            	    }

            	    }


            	    }
            	    break;

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

            otherlv_5=(Token)match(input,17,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_5, grammarAccess.getXTypeLiteralAccess().getRightParenthesisKeyword_5());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXTypeLiteral"


    // $ANTLR start "entryRuleXThrowExpression"
    // InternalXcore.g:8490:1: entryRuleXThrowExpression returns [EObject current=null] : iv_ruleXThrowExpression= ruleXThrowExpression EOF ;
    public final EObject entryRuleXThrowExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXThrowExpression = null;


        try {
            // InternalXcore.g:8490:57: (iv_ruleXThrowExpression= ruleXThrowExpression EOF )
            // InternalXcore.g:8491:2: iv_ruleXThrowExpression= ruleXThrowExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXThrowExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXThrowExpression=ruleXThrowExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXThrowExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXThrowExpression"


    // $ANTLR start "ruleXThrowExpression"
    // InternalXcore.g:8497:1: ruleXThrowExpression returns [EObject current=null] : ( () otherlv_1= 'throw' ( (lv_expression_2_0= ruleXExpression ) ) ) ;
    public final EObject ruleXThrowExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_expression_2_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:8503:2: ( ( () otherlv_1= 'throw' ( (lv_expression_2_0= ruleXExpression ) ) ) )
            // InternalXcore.g:8504:2: ( () otherlv_1= 'throw' ( (lv_expression_2_0= ruleXExpression ) ) )
            {
            // InternalXcore.g:8504:2: ( () otherlv_1= 'throw' ( (lv_expression_2_0= ruleXExpression ) ) )
            // InternalXcore.g:8505:3: () otherlv_1= 'throw' ( (lv_expression_2_0= ruleXExpression ) )
            {
            // InternalXcore.g:8505:3: ()
            // InternalXcore.g:8506:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXThrowExpressionAccess().getXThrowExpressionAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,114,FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXThrowExpressionAccess().getThrowKeyword_1());
              		
            }
            // InternalXcore.g:8516:3: ( (lv_expression_2_0= ruleXExpression ) )
            // InternalXcore.g:8517:4: (lv_expression_2_0= ruleXExpression )
            {
            // InternalXcore.g:8517:4: (lv_expression_2_0= ruleXExpression )
            // InternalXcore.g:8518:5: lv_expression_2_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXThrowExpressionAccess().getExpressionXExpressionParserRuleCall_2_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_expression_2_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXThrowExpressionRule());
              					}
              					set(
              						current,
              						"expression",
              						lv_expression_2_0,
              						"org.eclipse.xtext.xbase.Xbase.XExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXThrowExpression"


    // $ANTLR start "entryRuleXReturnExpression"
    // InternalXcore.g:8539:1: entryRuleXReturnExpression returns [EObject current=null] : iv_ruleXReturnExpression= ruleXReturnExpression EOF ;
    public final EObject entryRuleXReturnExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXReturnExpression = null;


        try {
            // InternalXcore.g:8539:58: (iv_ruleXReturnExpression= ruleXReturnExpression EOF )
            // InternalXcore.g:8540:2: iv_ruleXReturnExpression= ruleXReturnExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXReturnExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXReturnExpression=ruleXReturnExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXReturnExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXReturnExpression"


    // $ANTLR start "ruleXReturnExpression"
    // InternalXcore.g:8546:1: ruleXReturnExpression returns [EObject current=null] : ( () otherlv_1= 'return' ( ( 'get' | 'isSet' | 'set' | 'unset' | 'void' | 'abstract' | 'annotation' | 'as' | 'class' | 'container' | 'contains' | 'convert' | 'create' | 'derived' | 'enum' | 'extends' | 'extension' | 'id' | 'import' | 'keys' | 'interface' | 'local' | 'op' | 'opposite' | 'package' | 'readonly' | 'refers' | 'resolving' | 'static' | 'throws' | 'transient' | 'unique' | 'unordered' | 'unsettable' | 'volatile' | 'wraps' | '!' | '-' | '+' | 'new' | '{' | 'switch' | 'synchronized' | '<' | 'super' | '#' | '[' | 'false' | 'true' | 'null' | 'typeof' | 'if' | 'for' | 'while' | 'do' | 'throw' | 'return' | 'try' | '(' | RULE_ID | RULE_HEX | RULE_INT | RULE_DECIMAL | RULE_STRING )=> (lv_expression_2_0= ruleXExpression ) )? ) ;
    public final EObject ruleXReturnExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_expression_2_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:8552:2: ( ( () otherlv_1= 'return' ( ( 'get' | 'isSet' | 'set' | 'unset' | 'void' | 'abstract' | 'annotation' | 'as' | 'class' | 'container' | 'contains' | 'convert' | 'create' | 'derived' | 'enum' | 'extends' | 'extension' | 'id' | 'import' | 'keys' | 'interface' | 'local' | 'op' | 'opposite' | 'package' | 'readonly' | 'refers' | 'resolving' | 'static' | 'throws' | 'transient' | 'unique' | 'unordered' | 'unsettable' | 'volatile' | 'wraps' | '!' | '-' | '+' | 'new' | '{' | 'switch' | 'synchronized' | '<' | 'super' | '#' | '[' | 'false' | 'true' | 'null' | 'typeof' | 'if' | 'for' | 'while' | 'do' | 'throw' | 'return' | 'try' | '(' | RULE_ID | RULE_HEX | RULE_INT | RULE_DECIMAL | RULE_STRING )=> (lv_expression_2_0= ruleXExpression ) )? ) )
            // InternalXcore.g:8553:2: ( () otherlv_1= 'return' ( ( 'get' | 'isSet' | 'set' | 'unset' | 'void' | 'abstract' | 'annotation' | 'as' | 'class' | 'container' | 'contains' | 'convert' | 'create' | 'derived' | 'enum' | 'extends' | 'extension' | 'id' | 'import' | 'keys' | 'interface' | 'local' | 'op' | 'opposite' | 'package' | 'readonly' | 'refers' | 'resolving' | 'static' | 'throws' | 'transient' | 'unique' | 'unordered' | 'unsettable' | 'volatile' | 'wraps' | '!' | '-' | '+' | 'new' | '{' | 'switch' | 'synchronized' | '<' | 'super' | '#' | '[' | 'false' | 'true' | 'null' | 'typeof' | 'if' | 'for' | 'while' | 'do' | 'throw' | 'return' | 'try' | '(' | RULE_ID | RULE_HEX | RULE_INT | RULE_DECIMAL | RULE_STRING )=> (lv_expression_2_0= ruleXExpression ) )? )
            {
            // InternalXcore.g:8553:2: ( () otherlv_1= 'return' ( ( 'get' | 'isSet' | 'set' | 'unset' | 'void' | 'abstract' | 'annotation' | 'as' | 'class' | 'container' | 'contains' | 'convert' | 'create' | 'derived' | 'enum' | 'extends' | 'extension' | 'id' | 'import' | 'keys' | 'interface' | 'local' | 'op' | 'opposite' | 'package' | 'readonly' | 'refers' | 'resolving' | 'static' | 'throws' | 'transient' | 'unique' | 'unordered' | 'unsettable' | 'volatile' | 'wraps' | '!' | '-' | '+' | 'new' | '{' | 'switch' | 'synchronized' | '<' | 'super' | '#' | '[' | 'false' | 'true' | 'null' | 'typeof' | 'if' | 'for' | 'while' | 'do' | 'throw' | 'return' | 'try' | '(' | RULE_ID | RULE_HEX | RULE_INT | RULE_DECIMAL | RULE_STRING )=> (lv_expression_2_0= ruleXExpression ) )? )
            // InternalXcore.g:8554:3: () otherlv_1= 'return' ( ( 'get' | 'isSet' | 'set' | 'unset' | 'void' | 'abstract' | 'annotation' | 'as' | 'class' | 'container' | 'contains' | 'convert' | 'create' | 'derived' | 'enum' | 'extends' | 'extension' | 'id' | 'import' | 'keys' | 'interface' | 'local' | 'op' | 'opposite' | 'package' | 'readonly' | 'refers' | 'resolving' | 'static' | 'throws' | 'transient' | 'unique' | 'unordered' | 'unsettable' | 'volatile' | 'wraps' | '!' | '-' | '+' | 'new' | '{' | 'switch' | 'synchronized' | '<' | 'super' | '#' | '[' | 'false' | 'true' | 'null' | 'typeof' | 'if' | 'for' | 'while' | 'do' | 'throw' | 'return' | 'try' | '(' | RULE_ID | RULE_HEX | RULE_INT | RULE_DECIMAL | RULE_STRING )=> (lv_expression_2_0= ruleXExpression ) )?
            {
            // InternalXcore.g:8554:3: ()
            // InternalXcore.g:8555:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXReturnExpressionAccess().getXReturnExpressionAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,115,FOLLOW_107); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXReturnExpressionAccess().getReturnKeyword_1());
              		
            }
            // InternalXcore.g:8565:3: ( ( 'get' | 'isSet' | 'set' | 'unset' | 'void' | 'abstract' | 'annotation' | 'as' | 'class' | 'container' | 'contains' | 'convert' | 'create' | 'derived' | 'enum' | 'extends' | 'extension' | 'id' | 'import' | 'keys' | 'interface' | 'local' | 'op' | 'opposite' | 'package' | 'readonly' | 'refers' | 'resolving' | 'static' | 'throws' | 'transient' | 'unique' | 'unordered' | 'unsettable' | 'volatile' | 'wraps' | '!' | '-' | '+' | 'new' | '{' | 'switch' | 'synchronized' | '<' | 'super' | '#' | '[' | 'false' | 'true' | 'null' | 'typeof' | 'if' | 'for' | 'while' | 'do' | 'throw' | 'return' | 'try' | '(' | RULE_ID | RULE_HEX | RULE_INT | RULE_DECIMAL | RULE_STRING )=> (lv_expression_2_0= ruleXExpression ) )?
            int alt160=2;
            alt160 = dfa160.predict(input);
            switch (alt160) {
                case 1 :
                    // InternalXcore.g:8566:4: ( 'get' | 'isSet' | 'set' | 'unset' | 'void' | 'abstract' | 'annotation' | 'as' | 'class' | 'container' | 'contains' | 'convert' | 'create' | 'derived' | 'enum' | 'extends' | 'extension' | 'id' | 'import' | 'keys' | 'interface' | 'local' | 'op' | 'opposite' | 'package' | 'readonly' | 'refers' | 'resolving' | 'static' | 'throws' | 'transient' | 'unique' | 'unordered' | 'unsettable' | 'volatile' | 'wraps' | '!' | '-' | '+' | 'new' | '{' | 'switch' | 'synchronized' | '<' | 'super' | '#' | '[' | 'false' | 'true' | 'null' | 'typeof' | 'if' | 'for' | 'while' | 'do' | 'throw' | 'return' | 'try' | '(' | RULE_ID | RULE_HEX | RULE_INT | RULE_DECIMAL | RULE_STRING )=> (lv_expression_2_0= ruleXExpression )
                    {
                    // InternalXcore.g:8567:4: (lv_expression_2_0= ruleXExpression )
                    // InternalXcore.g:8568:5: lv_expression_2_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {

                      					newCompositeNode(grammarAccess.getXReturnExpressionAccess().getExpressionXExpressionParserRuleCall_2_0());
                      				
                    }
                    pushFollow(FOLLOW_2);
                    lv_expression_2_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					if (current==null) {
                      						current = createModelElementForParent(grammarAccess.getXReturnExpressionRule());
                      					}
                      					set(
                      						current,
                      						"expression",
                      						lv_expression_2_0,
                      						"org.eclipse.xtext.xbase.Xbase.XExpression");
                      					afterParserOrEnumRuleCall();
                      				
                    }

                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXReturnExpression"


    // $ANTLR start "entryRuleXTryCatchFinallyExpression"
    // InternalXcore.g:8589:1: entryRuleXTryCatchFinallyExpression returns [EObject current=null] : iv_ruleXTryCatchFinallyExpression= ruleXTryCatchFinallyExpression EOF ;
    public final EObject entryRuleXTryCatchFinallyExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXTryCatchFinallyExpression = null;


        try {
            // InternalXcore.g:8589:67: (iv_ruleXTryCatchFinallyExpression= ruleXTryCatchFinallyExpression EOF )
            // InternalXcore.g:8590:2: iv_ruleXTryCatchFinallyExpression= ruleXTryCatchFinallyExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXTryCatchFinallyExpression=ruleXTryCatchFinallyExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXTryCatchFinallyExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXTryCatchFinallyExpression"


    // $ANTLR start "ruleXTryCatchFinallyExpression"
    // InternalXcore.g:8596:1: ruleXTryCatchFinallyExpression returns [EObject current=null] : ( () otherlv_1= 'try' ( (lv_expression_2_0= ruleXExpression ) ) ( ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? ) | (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) ) ) ) ;
    public final EObject ruleXTryCatchFinallyExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_4=null;
        Token otherlv_6=null;
        EObject lv_expression_2_0 = null;

        EObject lv_catchClauses_3_0 = null;

        EObject lv_finallyExpression_5_0 = null;

        EObject lv_finallyExpression_7_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:8602:2: ( ( () otherlv_1= 'try' ( (lv_expression_2_0= ruleXExpression ) ) ( ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? ) | (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) ) ) ) )
            // InternalXcore.g:8603:2: ( () otherlv_1= 'try' ( (lv_expression_2_0= ruleXExpression ) ) ( ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? ) | (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) ) ) )
            {
            // InternalXcore.g:8603:2: ( () otherlv_1= 'try' ( (lv_expression_2_0= ruleXExpression ) ) ( ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? ) | (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) ) ) )
            // InternalXcore.g:8604:3: () otherlv_1= 'try' ( (lv_expression_2_0= ruleXExpression ) ) ( ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? ) | (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) ) )
            {
            // InternalXcore.g:8604:3: ()
            // InternalXcore.g:8605:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getXTryCatchFinallyExpressionAccess().getXTryCatchFinallyExpressionAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,116,FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXTryCatchFinallyExpressionAccess().getTryKeyword_1());
              		
            }
            // InternalXcore.g:8615:3: ( (lv_expression_2_0= ruleXExpression ) )
            // InternalXcore.g:8616:4: (lv_expression_2_0= ruleXExpression )
            {
            // InternalXcore.g:8616:4: (lv_expression_2_0= ruleXExpression )
            // InternalXcore.g:8617:5: lv_expression_2_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionAccess().getExpressionXExpressionParserRuleCall_2_0());
              				
            }
            pushFollow(FOLLOW_124);
            lv_expression_2_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXTryCatchFinallyExpressionRule());
              					}
              					set(
              						current,
              						"expression",
              						lv_expression_2_0,
              						"org.eclipse.xtext.xbase.Xbase.XExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalXcore.g:8634:3: ( ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? ) | (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) ) )
            int alt163=2;
            int LA163_0 = input.LA(1);

            if ( (LA163_0==119) ) {
                alt163=1;
            }
            else if ( (LA163_0==117) ) {
                alt163=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 163, 0, input);

                throw nvae;
            }
            switch (alt163) {
                case 1 :
                    // InternalXcore.g:8635:4: ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? )
                    {
                    // InternalXcore.g:8635:4: ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? )
                    // InternalXcore.g:8636:5: ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )?
                    {
                    // InternalXcore.g:8636:5: ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+
                    int cnt161=0;
                    loop161:
                    do {
                        int alt161=2;
                        int LA161_0 = input.LA(1);

                        if ( (LA161_0==119) ) {
                            int LA161_2 = input.LA(2);

                            if ( (synpred41_InternalXcore()) ) {
                                alt161=1;
                            }


                        }


                        switch (alt161) {
                    	case 1 :
                    	    // InternalXcore.g:8637:6: ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause )
                    	    {
                    	    // InternalXcore.g:8638:6: (lv_catchClauses_3_0= ruleXCatchClause )
                    	    // InternalXcore.g:8639:7: lv_catchClauses_3_0= ruleXCatchClause
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionAccess().getCatchClausesXCatchClauseParserRuleCall_3_0_0_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_125);
                    	    lv_catchClauses_3_0=ruleXCatchClause();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getXTryCatchFinallyExpressionRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"catchClauses",
                    	      								lv_catchClauses_3_0,
                    	      								"org.eclipse.xtext.xbase.Xbase.XCatchClause");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt161 >= 1 ) break loop161;
                    	    if (state.backtracking>0) {state.failed=true; return current;}
                                EarlyExitException eee =
                                    new EarlyExitException(161, input);
                                throw eee;
                        }
                        cnt161++;
                    } while (true);

                    // InternalXcore.g:8656:5: ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )?
                    int alt162=2;
                    int LA162_0 = input.LA(1);

                    if ( (LA162_0==117) ) {
                        int LA162_1 = input.LA(2);

                        if ( (synpred42_InternalXcore()) ) {
                            alt162=1;
                        }
                    }
                    switch (alt162) {
                        case 1 :
                            // InternalXcore.g:8657:6: ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) )
                            {
                            // InternalXcore.g:8657:6: ( ( 'finally' )=>otherlv_4= 'finally' )
                            // InternalXcore.g:8658:7: ( 'finally' )=>otherlv_4= 'finally'
                            {
                            otherlv_4=(Token)match(input,117,FOLLOW_75); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(otherlv_4, grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyKeyword_3_0_1_0());
                              						
                            }

                            }

                            // InternalXcore.g:8664:6: ( (lv_finallyExpression_5_0= ruleXExpression ) )
                            // InternalXcore.g:8665:7: (lv_finallyExpression_5_0= ruleXExpression )
                            {
                            // InternalXcore.g:8665:7: (lv_finallyExpression_5_0= ruleXExpression )
                            // InternalXcore.g:8666:8: lv_finallyExpression_5_0= ruleXExpression
                            {
                            if ( state.backtracking==0 ) {

                              								newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionXExpressionParserRuleCall_3_0_1_1_0());
                              							
                            }
                            pushFollow(FOLLOW_2);
                            lv_finallyExpression_5_0=ruleXExpression();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              								if (current==null) {
                              									current = createModelElementForParent(grammarAccess.getXTryCatchFinallyExpressionRule());
                              								}
                              								set(
                              									current,
                              									"finallyExpression",
                              									lv_finallyExpression_5_0,
                              									"org.eclipse.xtext.xbase.Xbase.XExpression");
                              								afterParserOrEnumRuleCall();
                              							
                            }

                            }


                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:8686:4: (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) )
                    {
                    // InternalXcore.g:8686:4: (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) )
                    // InternalXcore.g:8687:5: otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) )
                    {
                    otherlv_6=(Token)match(input,117,FOLLOW_75); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_6, grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyKeyword_3_1_0());
                      				
                    }
                    // InternalXcore.g:8691:5: ( (lv_finallyExpression_7_0= ruleXExpression ) )
                    // InternalXcore.g:8692:6: (lv_finallyExpression_7_0= ruleXExpression )
                    {
                    // InternalXcore.g:8692:6: (lv_finallyExpression_7_0= ruleXExpression )
                    // InternalXcore.g:8693:7: lv_finallyExpression_7_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {

                      							newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionXExpressionParserRuleCall_3_1_1_0());
                      						
                    }
                    pushFollow(FOLLOW_2);
                    lv_finallyExpression_7_0=ruleXExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElementForParent(grammarAccess.getXTryCatchFinallyExpressionRule());
                      							}
                      							set(
                      								current,
                      								"finallyExpression",
                      								lv_finallyExpression_7_0,
                      								"org.eclipse.xtext.xbase.Xbase.XExpression");
                      							afterParserOrEnumRuleCall();
                      						
                    }

                    }


                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXTryCatchFinallyExpression"


    // $ANTLR start "entryRuleXSynchronizedExpression"
    // InternalXcore.g:8716:1: entryRuleXSynchronizedExpression returns [EObject current=null] : iv_ruleXSynchronizedExpression= ruleXSynchronizedExpression EOF ;
    public final EObject entryRuleXSynchronizedExpression() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXSynchronizedExpression = null;


        try {
            // InternalXcore.g:8716:64: (iv_ruleXSynchronizedExpression= ruleXSynchronizedExpression EOF )
            // InternalXcore.g:8717:2: iv_ruleXSynchronizedExpression= ruleXSynchronizedExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXSynchronizedExpressionRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXSynchronizedExpression=ruleXSynchronizedExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXSynchronizedExpression; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXSynchronizedExpression"


    // $ANTLR start "ruleXSynchronizedExpression"
    // InternalXcore.g:8723:1: ruleXSynchronizedExpression returns [EObject current=null] : ( ( ( ( () 'synchronized' '(' ) )=> ( () otherlv_1= 'synchronized' otherlv_2= '(' ) ) ( (lv_param_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_expression_5_0= ruleXExpression ) ) ) ;
    public final EObject ruleXSynchronizedExpression() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        EObject lv_param_3_0 = null;

        EObject lv_expression_5_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:8729:2: ( ( ( ( ( () 'synchronized' '(' ) )=> ( () otherlv_1= 'synchronized' otherlv_2= '(' ) ) ( (lv_param_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_expression_5_0= ruleXExpression ) ) ) )
            // InternalXcore.g:8730:2: ( ( ( ( () 'synchronized' '(' ) )=> ( () otherlv_1= 'synchronized' otherlv_2= '(' ) ) ( (lv_param_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_expression_5_0= ruleXExpression ) ) )
            {
            // InternalXcore.g:8730:2: ( ( ( ( () 'synchronized' '(' ) )=> ( () otherlv_1= 'synchronized' otherlv_2= '(' ) ) ( (lv_param_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_expression_5_0= ruleXExpression ) ) )
            // InternalXcore.g:8731:3: ( ( ( () 'synchronized' '(' ) )=> ( () otherlv_1= 'synchronized' otherlv_2= '(' ) ) ( (lv_param_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_expression_5_0= ruleXExpression ) )
            {
            // InternalXcore.g:8731:3: ( ( ( () 'synchronized' '(' ) )=> ( () otherlv_1= 'synchronized' otherlv_2= '(' ) )
            // InternalXcore.g:8732:4: ( ( () 'synchronized' '(' ) )=> ( () otherlv_1= 'synchronized' otherlv_2= '(' )
            {
            // InternalXcore.g:8739:4: ( () otherlv_1= 'synchronized' otherlv_2= '(' )
            // InternalXcore.g:8740:5: () otherlv_1= 'synchronized' otherlv_2= '('
            {
            // InternalXcore.g:8740:5: ()
            // InternalXcore.g:8741:6: 
            {
            if ( state.backtracking==0 ) {

              						current = forceCreateModelElement(
              							grammarAccess.getXSynchronizedExpressionAccess().getXSynchronizedExpressionAction_0_0_0(),
              							current);
              					
            }

            }

            otherlv_1=(Token)match(input,118,FOLLOW_56); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_1, grammarAccess.getXSynchronizedExpressionAccess().getSynchronizedKeyword_0_0_1());
              				
            }
            otherlv_2=(Token)match(input,15,FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					newLeafNode(otherlv_2, grammarAccess.getXSynchronizedExpressionAccess().getLeftParenthesisKeyword_0_0_2());
              				
            }

            }


            }

            // InternalXcore.g:8757:3: ( (lv_param_3_0= ruleXExpression ) )
            // InternalXcore.g:8758:4: (lv_param_3_0= ruleXExpression )
            {
            // InternalXcore.g:8758:4: (lv_param_3_0= ruleXExpression )
            // InternalXcore.g:8759:5: lv_param_3_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXSynchronizedExpressionAccess().getParamXExpressionParserRuleCall_1_0());
              				
            }
            pushFollow(FOLLOW_98);
            lv_param_3_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXSynchronizedExpressionRule());
              					}
              					set(
              						current,
              						"param",
              						lv_param_3_0,
              						"org.eclipse.xtext.xbase.Xbase.XExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_4=(Token)match(input,17,FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_4, grammarAccess.getXSynchronizedExpressionAccess().getRightParenthesisKeyword_2());
              		
            }
            // InternalXcore.g:8780:3: ( (lv_expression_5_0= ruleXExpression ) )
            // InternalXcore.g:8781:4: (lv_expression_5_0= ruleXExpression )
            {
            // InternalXcore.g:8781:4: (lv_expression_5_0= ruleXExpression )
            // InternalXcore.g:8782:5: lv_expression_5_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXSynchronizedExpressionAccess().getExpressionXExpressionParserRuleCall_3_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_expression_5_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXSynchronizedExpressionRule());
              					}
              					set(
              						current,
              						"expression",
              						lv_expression_5_0,
              						"org.eclipse.xtext.xbase.Xbase.XExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXSynchronizedExpression"


    // $ANTLR start "entryRuleXCatchClause"
    // InternalXcore.g:8803:1: entryRuleXCatchClause returns [EObject current=null] : iv_ruleXCatchClause= ruleXCatchClause EOF ;
    public final EObject entryRuleXCatchClause() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXCatchClause = null;


        try {
            // InternalXcore.g:8803:53: (iv_ruleXCatchClause= ruleXCatchClause EOF )
            // InternalXcore.g:8804:2: iv_ruleXCatchClause= ruleXCatchClause EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXCatchClauseRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXCatchClause=ruleXCatchClause();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXCatchClause; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXCatchClause"


    // $ANTLR start "ruleXCatchClause"
    // InternalXcore.g:8810:1: ruleXCatchClause returns [EObject current=null] : ( ( ( 'catch' )=>otherlv_0= 'catch' ) otherlv_1= '(' ( (lv_declaredParam_2_0= ruleFullJvmFormalParameter ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleXExpression ) ) ) ;
    public final EObject ruleXCatchClause() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_3=null;
        EObject lv_declaredParam_2_0 = null;

        EObject lv_expression_4_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:8816:2: ( ( ( ( 'catch' )=>otherlv_0= 'catch' ) otherlv_1= '(' ( (lv_declaredParam_2_0= ruleFullJvmFormalParameter ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleXExpression ) ) ) )
            // InternalXcore.g:8817:2: ( ( ( 'catch' )=>otherlv_0= 'catch' ) otherlv_1= '(' ( (lv_declaredParam_2_0= ruleFullJvmFormalParameter ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleXExpression ) ) )
            {
            // InternalXcore.g:8817:2: ( ( ( 'catch' )=>otherlv_0= 'catch' ) otherlv_1= '(' ( (lv_declaredParam_2_0= ruleFullJvmFormalParameter ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleXExpression ) ) )
            // InternalXcore.g:8818:3: ( ( 'catch' )=>otherlv_0= 'catch' ) otherlv_1= '(' ( (lv_declaredParam_2_0= ruleFullJvmFormalParameter ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleXExpression ) )
            {
            // InternalXcore.g:8818:3: ( ( 'catch' )=>otherlv_0= 'catch' )
            // InternalXcore.g:8819:4: ( 'catch' )=>otherlv_0= 'catch'
            {
            otherlv_0=(Token)match(input,119,FOLLOW_56); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              				newLeafNode(otherlv_0, grammarAccess.getXCatchClauseAccess().getCatchKeyword_0());
              			
            }

            }

            otherlv_1=(Token)match(input,15,FOLLOW_20); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getXCatchClauseAccess().getLeftParenthesisKeyword_1());
              		
            }
            // InternalXcore.g:8829:3: ( (lv_declaredParam_2_0= ruleFullJvmFormalParameter ) )
            // InternalXcore.g:8830:4: (lv_declaredParam_2_0= ruleFullJvmFormalParameter )
            {
            // InternalXcore.g:8830:4: (lv_declaredParam_2_0= ruleFullJvmFormalParameter )
            // InternalXcore.g:8831:5: lv_declaredParam_2_0= ruleFullJvmFormalParameter
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXCatchClauseAccess().getDeclaredParamFullJvmFormalParameterParserRuleCall_2_0());
              				
            }
            pushFollow(FOLLOW_98);
            lv_declaredParam_2_0=ruleFullJvmFormalParameter();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXCatchClauseRule());
              					}
              					set(
              						current,
              						"declaredParam",
              						lv_declaredParam_2_0,
              						"org.eclipse.xtext.xbase.Xbase.FullJvmFormalParameter");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            otherlv_3=(Token)match(input,17,FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_3, grammarAccess.getXCatchClauseAccess().getRightParenthesisKeyword_3());
              		
            }
            // InternalXcore.g:8852:3: ( (lv_expression_4_0= ruleXExpression ) )
            // InternalXcore.g:8853:4: (lv_expression_4_0= ruleXExpression )
            {
            // InternalXcore.g:8853:4: (lv_expression_4_0= ruleXExpression )
            // InternalXcore.g:8854:5: lv_expression_4_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXCatchClauseAccess().getExpressionXExpressionParserRuleCall_4_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_expression_4_0=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXCatchClauseRule());
              					}
              					set(
              						current,
              						"expression",
              						lv_expression_4_0,
              						"org.eclipse.xtext.xbase.Xbase.XExpression");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXCatchClause"


    // $ANTLR start "entryRuleQualifiedName"
    // InternalXcore.g:8875:1: entryRuleQualifiedName returns [String current=null] : iv_ruleQualifiedName= ruleQualifiedName EOF ;
    public final String entryRuleQualifiedName() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleQualifiedName = null;


        try {
            // InternalXcore.g:8875:53: (iv_ruleQualifiedName= ruleQualifiedName EOF )
            // InternalXcore.g:8876:2: iv_ruleQualifiedName= ruleQualifiedName EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getQualifiedNameRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleQualifiedName=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleQualifiedName.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleQualifiedName"


    // $ANTLR start "ruleQualifiedName"
    // InternalXcore.g:8882:1: ruleQualifiedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ValidID_0= ruleValidID ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )* ) ;
    public final AntlrDatatypeRuleToken ruleQualifiedName() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_ValidID_0 = null;

        AntlrDatatypeRuleToken this_ValidID_2 = null;



        	enterRule();

        try {
            // InternalXcore.g:8888:2: ( (this_ValidID_0= ruleValidID ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )* ) )
            // InternalXcore.g:8889:2: (this_ValidID_0= ruleValidID ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )* )
            {
            // InternalXcore.g:8889:2: (this_ValidID_0= ruleValidID ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )* )
            // InternalXcore.g:8890:3: this_ValidID_0= ruleValidID ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )*
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getQualifiedNameAccess().getValidIDParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_74);
            this_ValidID_0=ruleValidID();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_ValidID_0);
              		
            }
            if ( state.backtracking==0 ) {

              			afterParserOrEnumRuleCall();
              		
            }
            // InternalXcore.g:8900:3: ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )*
            loop164:
            do {
                int alt164=2;
                alt164 = dfa164.predict(input);
                switch (alt164) {
            	case 1 :
            	    // InternalXcore.g:8901:4: ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID
            	    {
            	    // InternalXcore.g:8901:4: ( ( '.' )=>kw= '.' )
            	    // InternalXcore.g:8902:5: ( '.' )=>kw= '.'
            	    {
            	    kw=(Token)match(input,67,FOLLOW_4); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      					current.merge(kw);
            	      					newLeafNode(kw, grammarAccess.getQualifiedNameAccess().getFullStopKeyword_1_0());
            	      				
            	    }

            	    }

            	    if ( state.backtracking==0 ) {

            	      				newCompositeNode(grammarAccess.getQualifiedNameAccess().getValidIDParserRuleCall_1_1());
            	      			
            	    }
            	    pushFollow(FOLLOW_74);
            	    this_ValidID_2=ruleValidID();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      				current.merge(this_ValidID_2);
            	      			
            	    }
            	    if ( state.backtracking==0 ) {

            	      				afterParserOrEnumRuleCall();
            	      			
            	    }

            	    }
            	    break;

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


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleQualifiedName"


    // $ANTLR start "entryRuleNumber"
    // InternalXcore.g:8924:1: entryRuleNumber returns [String current=null] : iv_ruleNumber= ruleNumber EOF ;
    public final String entryRuleNumber() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleNumber = null;



        	HiddenTokens myHiddenTokenState = ((XtextTokenStream)input).setHiddenTokens();

        try {
            // InternalXcore.g:8926:2: (iv_ruleNumber= ruleNumber EOF )
            // InternalXcore.g:8927:2: iv_ruleNumber= ruleNumber EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getNumberRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleNumber=ruleNumber();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleNumber.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {

            	myHiddenTokenState.restore();

        }
        return current;
    }
    // $ANTLR end "entryRuleNumber"


    // $ANTLR start "ruleNumber"
    // InternalXcore.g:8936:1: ruleNumber returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_HEX_0= RULE_HEX | ( (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL ) (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )? ) ) ;
    public final AntlrDatatypeRuleToken ruleNumber() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_HEX_0=null;
        Token this_INT_1=null;
        Token this_DECIMAL_2=null;
        Token kw=null;
        Token this_INT_4=null;
        Token this_DECIMAL_5=null;


        	enterRule();
        	HiddenTokens myHiddenTokenState = ((XtextTokenStream)input).setHiddenTokens();

        try {
            // InternalXcore.g:8943:2: ( (this_HEX_0= RULE_HEX | ( (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL ) (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )? ) ) )
            // InternalXcore.g:8944:2: (this_HEX_0= RULE_HEX | ( (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL ) (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )? ) )
            {
            // InternalXcore.g:8944:2: (this_HEX_0= RULE_HEX | ( (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL ) (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )? ) )
            int alt168=2;
            int LA168_0 = input.LA(1);

            if ( (LA168_0==RULE_HEX) ) {
                alt168=1;
            }
            else if ( (LA168_0==RULE_INT||LA168_0==RULE_DECIMAL) ) {
                alt168=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 168, 0, input);

                throw nvae;
            }
            switch (alt168) {
                case 1 :
                    // InternalXcore.g:8945:3: this_HEX_0= RULE_HEX
                    {
                    this_HEX_0=(Token)match(input,RULE_HEX,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current.merge(this_HEX_0);
                      		
                    }
                    if ( state.backtracking==0 ) {

                      			newLeafNode(this_HEX_0, grammarAccess.getNumberAccess().getHEXTerminalRuleCall_0());
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:8953:3: ( (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL ) (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )? )
                    {
                    // InternalXcore.g:8953:3: ( (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL ) (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )? )
                    // InternalXcore.g:8954:4: (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL ) (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )?
                    {
                    // InternalXcore.g:8954:4: (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL )
                    int alt165=2;
                    int LA165_0 = input.LA(1);

                    if ( (LA165_0==RULE_INT) ) {
                        alt165=1;
                    }
                    else if ( (LA165_0==RULE_DECIMAL) ) {
                        alt165=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 165, 0, input);

                        throw nvae;
                    }
                    switch (alt165) {
                        case 1 :
                            // InternalXcore.g:8955:5: this_INT_1= RULE_INT
                            {
                            this_INT_1=(Token)match(input,RULE_INT,FOLLOW_74); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					current.merge(this_INT_1);
                              				
                            }
                            if ( state.backtracking==0 ) {

                              					newLeafNode(this_INT_1, grammarAccess.getNumberAccess().getINTTerminalRuleCall_1_0_0());
                              				
                            }

                            }
                            break;
                        case 2 :
                            // InternalXcore.g:8963:5: this_DECIMAL_2= RULE_DECIMAL
                            {
                            this_DECIMAL_2=(Token)match(input,RULE_DECIMAL,FOLLOW_74); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					current.merge(this_DECIMAL_2);
                              				
                            }
                            if ( state.backtracking==0 ) {

                              					newLeafNode(this_DECIMAL_2, grammarAccess.getNumberAccess().getDECIMALTerminalRuleCall_1_0_1());
                              				
                            }

                            }
                            break;

                    }

                    // InternalXcore.g:8971:4: (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )?
                    int alt167=2;
                    int LA167_0 = input.LA(1);

                    if ( (LA167_0==67) ) {
                        int LA167_1 = input.LA(2);

                        if ( (LA167_1==RULE_INT||LA167_1==RULE_DECIMAL) ) {
                            alt167=1;
                        }
                    }
                    switch (alt167) {
                        case 1 :
                            // InternalXcore.g:8972:5: kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL )
                            {
                            kw=(Token)match(input,67,FOLLOW_126); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              					current.merge(kw);
                              					newLeafNode(kw, grammarAccess.getNumberAccess().getFullStopKeyword_1_1_0());
                              				
                            }
                            // InternalXcore.g:8977:5: (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL )
                            int alt166=2;
                            int LA166_0 = input.LA(1);

                            if ( (LA166_0==RULE_INT) ) {
                                alt166=1;
                            }
                            else if ( (LA166_0==RULE_DECIMAL) ) {
                                alt166=2;
                            }
                            else {
                                if (state.backtracking>0) {state.failed=true; return current;}
                                NoViableAltException nvae =
                                    new NoViableAltException("", 166, 0, input);

                                throw nvae;
                            }
                            switch (alt166) {
                                case 1 :
                                    // InternalXcore.g:8978:6: this_INT_4= RULE_INT
                                    {
                                    this_INT_4=(Token)match(input,RULE_INT,FOLLOW_2); if (state.failed) return current;
                                    if ( state.backtracking==0 ) {

                                      						current.merge(this_INT_4);
                                      					
                                    }
                                    if ( state.backtracking==0 ) {

                                      						newLeafNode(this_INT_4, grammarAccess.getNumberAccess().getINTTerminalRuleCall_1_1_1_0());
                                      					
                                    }

                                    }
                                    break;
                                case 2 :
                                    // InternalXcore.g:8986:6: this_DECIMAL_5= RULE_DECIMAL
                                    {
                                    this_DECIMAL_5=(Token)match(input,RULE_DECIMAL,FOLLOW_2); if (state.failed) return current;
                                    if ( state.backtracking==0 ) {

                                      						current.merge(this_DECIMAL_5);
                                      					
                                    }
                                    if ( state.backtracking==0 ) {

                                      						newLeafNode(this_DECIMAL_5, grammarAccess.getNumberAccess().getDECIMALTerminalRuleCall_1_1_1_1());
                                      					
                                    }

                                    }
                                    break;

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {

            	myHiddenTokenState.restore();

        }
        return current;
    }
    // $ANTLR end "ruleNumber"


    // $ANTLR start "entryRuleJvmTypeReference"
    // InternalXcore.g:9003:1: entryRuleJvmTypeReference returns [EObject current=null] : iv_ruleJvmTypeReference= ruleJvmTypeReference EOF ;
    public final EObject entryRuleJvmTypeReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJvmTypeReference = null;


        try {
            // InternalXcore.g:9003:57: (iv_ruleJvmTypeReference= ruleJvmTypeReference EOF )
            // InternalXcore.g:9004:2: iv_ruleJvmTypeReference= ruleJvmTypeReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmTypeReferenceRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleJvmTypeReference=ruleJvmTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmTypeReference; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJvmTypeReference"


    // $ANTLR start "ruleJvmTypeReference"
    // InternalXcore.g:9010:1: ruleJvmTypeReference returns [EObject current=null] : ( (this_JvmParameterizedTypeReference_0= ruleJvmParameterizedTypeReference ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )* ) | this_XFunctionTypeRef_3= ruleXFunctionTypeRef ) ;
    public final EObject ruleJvmTypeReference() throws RecognitionException {
        EObject current = null;

        EObject this_JvmParameterizedTypeReference_0 = null;

        EObject this_XFunctionTypeRef_3 = null;



        	enterRule();

        try {
            // InternalXcore.g:9016:2: ( ( (this_JvmParameterizedTypeReference_0= ruleJvmParameterizedTypeReference ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )* ) | this_XFunctionTypeRef_3= ruleXFunctionTypeRef ) )
            // InternalXcore.g:9017:2: ( (this_JvmParameterizedTypeReference_0= ruleJvmParameterizedTypeReference ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )* ) | this_XFunctionTypeRef_3= ruleXFunctionTypeRef )
            {
            // InternalXcore.g:9017:2: ( (this_JvmParameterizedTypeReference_0= ruleJvmParameterizedTypeReference ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )* ) | this_XFunctionTypeRef_3= ruleXFunctionTypeRef )
            int alt170=2;
            int LA170_0 = input.LA(1);

            if ( (LA170_0==RULE_ID||(LA170_0>=44 && LA170_0<=47)||LA170_0==56) ) {
                alt170=1;
            }
            else if ( (LA170_0==15||LA170_0==85) ) {
                alt170=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 170, 0, input);

                throw nvae;
            }
            switch (alt170) {
                case 1 :
                    // InternalXcore.g:9018:3: (this_JvmParameterizedTypeReference_0= ruleJvmParameterizedTypeReference ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )* )
                    {
                    // InternalXcore.g:9018:3: (this_JvmParameterizedTypeReference_0= ruleJvmParameterizedTypeReference ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )* )
                    // InternalXcore.g:9019:4: this_JvmParameterizedTypeReference_0= ruleJvmParameterizedTypeReference ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )*
                    {
                    if ( state.backtracking==0 ) {

                      				newCompositeNode(grammarAccess.getJvmTypeReferenceAccess().getJvmParameterizedTypeReferenceParserRuleCall_0_0());
                      			
                    }
                    pushFollow(FOLLOW_121);
                    this_JvmParameterizedTypeReference_0=ruleJvmParameterizedTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				current = this_JvmParameterizedTypeReference_0;
                      				afterParserOrEnumRuleCall();
                      			
                    }
                    // InternalXcore.g:9027:4: ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )*
                    loop169:
                    do {
                        int alt169=2;
                        int LA169_0 = input.LA(1);

                        if ( (LA169_0==59) ) {
                            int LA169_2 = input.LA(2);

                            if ( (LA169_2==64) ) {
                                int LA169_3 = input.LA(3);

                                if ( (synpred46_InternalXcore()) ) {
                                    alt169=1;
                                }


                            }


                        }


                        switch (alt169) {
                    	case 1 :
                    	    // InternalXcore.g:9028:5: ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets )
                    	    {
                    	    // InternalXcore.g:9034:5: ( () ruleArrayBrackets )
                    	    // InternalXcore.g:9035:6: () ruleArrayBrackets
                    	    {
                    	    // InternalXcore.g:9035:6: ()
                    	    // InternalXcore.g:9036:7: 
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							current = forceCreateModelElementAndSet(
                    	      								grammarAccess.getJvmTypeReferenceAccess().getJvmGenericArrayTypeReferenceComponentTypeAction_0_1_0_0(),
                    	      								current);
                    	      						
                    	    }

                    	    }

                    	    if ( state.backtracking==0 ) {

                    	      						newCompositeNode(grammarAccess.getJvmTypeReferenceAccess().getArrayBracketsParserRuleCall_0_1_0_1());
                    	      					
                    	    }
                    	    pushFollow(FOLLOW_121);
                    	    ruleArrayBrackets();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      						afterParserOrEnumRuleCall();
                    	      					
                    	    }

                    	    }


                    	    }
                    	    break;

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


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:9053:3: this_XFunctionTypeRef_3= ruleXFunctionTypeRef
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getJvmTypeReferenceAccess().getXFunctionTypeRefParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_XFunctionTypeRef_3=ruleXFunctionTypeRef();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_XFunctionTypeRef_3;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJvmTypeReference"


    // $ANTLR start "entryRuleArrayBrackets"
    // InternalXcore.g:9065:1: entryRuleArrayBrackets returns [String current=null] : iv_ruleArrayBrackets= ruleArrayBrackets EOF ;
    public final String entryRuleArrayBrackets() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleArrayBrackets = null;


        try {
            // InternalXcore.g:9065:53: (iv_ruleArrayBrackets= ruleArrayBrackets EOF )
            // InternalXcore.g:9066:2: iv_ruleArrayBrackets= ruleArrayBrackets EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getArrayBracketsRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleArrayBrackets=ruleArrayBrackets();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleArrayBrackets.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleArrayBrackets"


    // $ANTLR start "ruleArrayBrackets"
    // InternalXcore.g:9072:1: ruleArrayBrackets returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= '[' kw= ']' ) ;
    public final AntlrDatatypeRuleToken ruleArrayBrackets() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;


        	enterRule();

        try {
            // InternalXcore.g:9078:2: ( (kw= '[' kw= ']' ) )
            // InternalXcore.g:9079:2: (kw= '[' kw= ']' )
            {
            // InternalXcore.g:9079:2: (kw= '[' kw= ']' )
            // InternalXcore.g:9080:3: kw= '[' kw= ']'
            {
            kw=(Token)match(input,59,FOLLOW_66); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(kw);
              			newLeafNode(kw, grammarAccess.getArrayBracketsAccess().getLeftSquareBracketKeyword_0());
              		
            }
            kw=(Token)match(input,64,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(kw);
              			newLeafNode(kw, grammarAccess.getArrayBracketsAccess().getRightSquareBracketKeyword_1());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleArrayBrackets"


    // $ANTLR start "entryRuleXFunctionTypeRef"
    // InternalXcore.g:9094:1: entryRuleXFunctionTypeRef returns [EObject current=null] : iv_ruleXFunctionTypeRef= ruleXFunctionTypeRef EOF ;
    public final EObject entryRuleXFunctionTypeRef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXFunctionTypeRef = null;


        try {
            // InternalXcore.g:9094:57: (iv_ruleXFunctionTypeRef= ruleXFunctionTypeRef EOF )
            // InternalXcore.g:9095:2: iv_ruleXFunctionTypeRef= ruleXFunctionTypeRef EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXFunctionTypeRefRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXFunctionTypeRef=ruleXFunctionTypeRef();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXFunctionTypeRef; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXFunctionTypeRef"


    // $ANTLR start "ruleXFunctionTypeRef"
    // InternalXcore.g:9101:1: ruleXFunctionTypeRef returns [EObject current=null] : ( (otherlv_0= '(' ( ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )* )? otherlv_4= ')' )? otherlv_5= '=>' ( (lv_returnType_6_0= ruleJvmTypeReference ) ) ) ;
    public final EObject ruleXFunctionTypeRef() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        EObject lv_paramTypes_1_0 = null;

        EObject lv_paramTypes_3_0 = null;

        EObject lv_returnType_6_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:9107:2: ( ( (otherlv_0= '(' ( ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )* )? otherlv_4= ')' )? otherlv_5= '=>' ( (lv_returnType_6_0= ruleJvmTypeReference ) ) ) )
            // InternalXcore.g:9108:2: ( (otherlv_0= '(' ( ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )* )? otherlv_4= ')' )? otherlv_5= '=>' ( (lv_returnType_6_0= ruleJvmTypeReference ) ) )
            {
            // InternalXcore.g:9108:2: ( (otherlv_0= '(' ( ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )* )? otherlv_4= ')' )? otherlv_5= '=>' ( (lv_returnType_6_0= ruleJvmTypeReference ) ) )
            // InternalXcore.g:9109:3: (otherlv_0= '(' ( ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )* )? otherlv_4= ')' )? otherlv_5= '=>' ( (lv_returnType_6_0= ruleJvmTypeReference ) )
            {
            // InternalXcore.g:9109:3: (otherlv_0= '(' ( ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )* )? otherlv_4= ')' )?
            int alt173=2;
            int LA173_0 = input.LA(1);

            if ( (LA173_0==15) ) {
                alt173=1;
            }
            switch (alt173) {
                case 1 :
                    // InternalXcore.g:9110:4: otherlv_0= '(' ( ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )* )? otherlv_4= ')'
                    {
                    otherlv_0=(Token)match(input,15,FOLLOW_127); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_0, grammarAccess.getXFunctionTypeRefAccess().getLeftParenthesisKeyword_0_0());
                      			
                    }
                    // InternalXcore.g:9114:4: ( ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )* )?
                    int alt172=2;
                    int LA172_0 = input.LA(1);

                    if ( (LA172_0==RULE_ID||LA172_0==15||(LA172_0>=44 && LA172_0<=47)||LA172_0==56||LA172_0==85) ) {
                        alt172=1;
                    }
                    switch (alt172) {
                        case 1 :
                            // InternalXcore.g:9115:5: ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )*
                            {
                            // InternalXcore.g:9115:5: ( (lv_paramTypes_1_0= ruleJvmTypeReference ) )
                            // InternalXcore.g:9116:6: (lv_paramTypes_1_0= ruleJvmTypeReference )
                            {
                            // InternalXcore.g:9116:6: (lv_paramTypes_1_0= ruleJvmTypeReference )
                            // InternalXcore.g:9117:7: lv_paramTypes_1_0= ruleJvmTypeReference
                            {
                            if ( state.backtracking==0 ) {

                              							newCompositeNode(grammarAccess.getXFunctionTypeRefAccess().getParamTypesJvmTypeReferenceParserRuleCall_0_1_0_0());
                              						
                            }
                            pushFollow(FOLLOW_10);
                            lv_paramTypes_1_0=ruleJvmTypeReference();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElementForParent(grammarAccess.getXFunctionTypeRefRule());
                              							}
                              							add(
                              								current,
                              								"paramTypes",
                              								lv_paramTypes_1_0,
                              								"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                              							afterParserOrEnumRuleCall();
                              						
                            }

                            }


                            }

                            // InternalXcore.g:9134:5: (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )*
                            loop171:
                            do {
                                int alt171=2;
                                int LA171_0 = input.LA(1);

                                if ( (LA171_0==16) ) {
                                    alt171=1;
                                }


                                switch (alt171) {
                            	case 1 :
                            	    // InternalXcore.g:9135:6: otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) )
                            	    {
                            	    otherlv_2=(Token)match(input,16,FOLLOW_20); if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	      						newLeafNode(otherlv_2, grammarAccess.getXFunctionTypeRefAccess().getCommaKeyword_0_1_1_0());
                            	      					
                            	    }
                            	    // InternalXcore.g:9139:6: ( (lv_paramTypes_3_0= ruleJvmTypeReference ) )
                            	    // InternalXcore.g:9140:7: (lv_paramTypes_3_0= ruleJvmTypeReference )
                            	    {
                            	    // InternalXcore.g:9140:7: (lv_paramTypes_3_0= ruleJvmTypeReference )
                            	    // InternalXcore.g:9141:8: lv_paramTypes_3_0= ruleJvmTypeReference
                            	    {
                            	    if ( state.backtracking==0 ) {

                            	      								newCompositeNode(grammarAccess.getXFunctionTypeRefAccess().getParamTypesJvmTypeReferenceParserRuleCall_0_1_1_1_0());
                            	      							
                            	    }
                            	    pushFollow(FOLLOW_10);
                            	    lv_paramTypes_3_0=ruleJvmTypeReference();

                            	    state._fsp--;
                            	    if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	      								if (current==null) {
                            	      									current = createModelElementForParent(grammarAccess.getXFunctionTypeRefRule());
                            	      								}
                            	      								add(
                            	      									current,
                            	      									"paramTypes",
                            	      									lv_paramTypes_3_0,
                            	      									"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                            	      								afterParserOrEnumRuleCall();
                            	      							
                            	    }

                            	    }


                            	    }


                            	    }
                            	    break;

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


                            }
                            break;

                    }

                    otherlv_4=(Token)match(input,17,FOLLOW_128); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_4, grammarAccess.getXFunctionTypeRefAccess().getRightParenthesisKeyword_0_2());
                      			
                    }

                    }
                    break;

            }

            otherlv_5=(Token)match(input,85,FOLLOW_20); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_5, grammarAccess.getXFunctionTypeRefAccess().getEqualsSignGreaterThanSignKeyword_1());
              		
            }
            // InternalXcore.g:9169:3: ( (lv_returnType_6_0= ruleJvmTypeReference ) )
            // InternalXcore.g:9170:4: (lv_returnType_6_0= ruleJvmTypeReference )
            {
            // InternalXcore.g:9170:4: (lv_returnType_6_0= ruleJvmTypeReference )
            // InternalXcore.g:9171:5: lv_returnType_6_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getXFunctionTypeRefAccess().getReturnTypeJvmTypeReferenceParserRuleCall_2_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_returnType_6_0=ruleJvmTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getXFunctionTypeRefRule());
              					}
              					set(
              						current,
              						"returnType",
              						lv_returnType_6_0,
              						"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXFunctionTypeRef"


    // $ANTLR start "entryRuleJvmParameterizedTypeReference"
    // InternalXcore.g:9192:1: entryRuleJvmParameterizedTypeReference returns [EObject current=null] : iv_ruleJvmParameterizedTypeReference= ruleJvmParameterizedTypeReference EOF ;
    public final EObject entryRuleJvmParameterizedTypeReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJvmParameterizedTypeReference = null;


        try {
            // InternalXcore.g:9192:70: (iv_ruleJvmParameterizedTypeReference= ruleJvmParameterizedTypeReference EOF )
            // InternalXcore.g:9193:2: iv_ruleJvmParameterizedTypeReference= ruleJvmParameterizedTypeReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleJvmParameterizedTypeReference=ruleJvmParameterizedTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmParameterizedTypeReference; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJvmParameterizedTypeReference"


    // $ANTLR start "ruleJvmParameterizedTypeReference"
    // InternalXcore.g:9199:1: ruleJvmParameterizedTypeReference returns [EObject current=null] : ( ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' ( ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )? )* )? ) ;
    public final EObject ruleJvmParameterizedTypeReference() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        EObject lv_arguments_2_0 = null;

        EObject lv_arguments_4_0 = null;

        EObject lv_arguments_10_0 = null;

        EObject lv_arguments_12_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:9205:2: ( ( ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' ( ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )? )* )? ) )
            // InternalXcore.g:9206:2: ( ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' ( ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )? )* )? )
            {
            // InternalXcore.g:9206:2: ( ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' ( ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )? )* )? )
            // InternalXcore.g:9207:3: ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' ( ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )? )* )?
            {
            // InternalXcore.g:9207:3: ( ( ruleQualifiedName ) )
            // InternalXcore.g:9208:4: ( ruleQualifiedName )
            {
            // InternalXcore.g:9208:4: ( ruleQualifiedName )
            // InternalXcore.g:9209:5: ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElement(grammarAccess.getJvmParameterizedTypeReferenceRule());
              					}
              				
            }
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeJvmTypeCrossReference_0_0());
              				
            }
            pushFollow(FOLLOW_71);
            ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					afterParserOrEnumRuleCall();
              				
            }

            }


            }

            // InternalXcore.g:9223:3: ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' ( ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )? )* )?
            int alt178=2;
            alt178 = dfa178.predict(input);
            switch (alt178) {
                case 1 :
                    // InternalXcore.g:9224:4: ( ( '<' )=>otherlv_1= '<' ) ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' ( ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )? )*
                    {
                    // InternalXcore.g:9224:4: ( ( '<' )=>otherlv_1= '<' )
                    // InternalXcore.g:9225:5: ( '<' )=>otherlv_1= '<'
                    {
                    otherlv_1=(Token)match(input,23,FOLLOW_95); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      					newLeafNode(otherlv_1, grammarAccess.getJvmParameterizedTypeReferenceAccess().getLessThanSignKeyword_1_0());
                      				
                    }

                    }

                    // InternalXcore.g:9231:4: ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) )
                    // InternalXcore.g:9232:5: (lv_arguments_2_0= ruleJvmArgumentTypeReference )
                    {
                    // InternalXcore.g:9232:5: (lv_arguments_2_0= ruleJvmArgumentTypeReference )
                    // InternalXcore.g:9233:6: lv_arguments_2_0= ruleJvmArgumentTypeReference
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_0());
                      					
                    }
                    pushFollow(FOLLOW_18);
                    lv_arguments_2_0=ruleJvmArgumentTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getJvmParameterizedTypeReferenceRule());
                      						}
                      						add(
                      							current,
                      							"arguments",
                      							lv_arguments_2_0,
                      							"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }

                    // InternalXcore.g:9250:4: (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )*
                    loop174:
                    do {
                        int alt174=2;
                        int LA174_0 = input.LA(1);

                        if ( (LA174_0==16) ) {
                            alt174=1;
                        }


                        switch (alt174) {
                    	case 1 :
                    	    // InternalXcore.g:9251:5: otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) )
                    	    {
                    	    otherlv_3=(Token)match(input,16,FOLLOW_95); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      					newLeafNode(otherlv_3, grammarAccess.getJvmParameterizedTypeReferenceAccess().getCommaKeyword_1_2_0());
                    	      				
                    	    }
                    	    // InternalXcore.g:9255:5: ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) )
                    	    // InternalXcore.g:9256:6: (lv_arguments_4_0= ruleJvmArgumentTypeReference )
                    	    {
                    	    // InternalXcore.g:9256:6: (lv_arguments_4_0= ruleJvmArgumentTypeReference )
                    	    // InternalXcore.g:9257:7: lv_arguments_4_0= ruleJvmArgumentTypeReference
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_2_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_18);
                    	    lv_arguments_4_0=ruleJvmArgumentTypeReference();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getJvmParameterizedTypeReferenceRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"arguments",
                    	      								lv_arguments_4_0,
                    	      								"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }


                    	    }
                    	    break;

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

                    otherlv_5=(Token)match(input,24,FOLLOW_74); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_5, grammarAccess.getJvmParameterizedTypeReferenceAccess().getGreaterThanSignKeyword_1_3());
                      			
                    }
                    // InternalXcore.g:9279:4: ( ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )? )*
                    loop177:
                    do {
                        int alt177=2;
                        alt177 = dfa177.predict(input);
                        switch (alt177) {
                    	case 1 :
                    	    // InternalXcore.g:9280:5: ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )?
                    	    {
                    	    // InternalXcore.g:9280:5: ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) )
                    	    // InternalXcore.g:9281:6: ( ( () '.' ) )=> ( () otherlv_7= '.' )
                    	    {
                    	    // InternalXcore.g:9287:6: ( () otherlv_7= '.' )
                    	    // InternalXcore.g:9288:7: () otherlv_7= '.'
                    	    {
                    	    // InternalXcore.g:9288:7: ()
                    	    // InternalXcore.g:9289:8: 
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      								current = forceCreateModelElementAndSet(
                    	      									grammarAccess.getJvmParameterizedTypeReferenceAccess().getJvmInnerTypeReferenceOuterAction_1_4_0_0_0(),
                    	      									current);
                    	      							
                    	    }

                    	    }

                    	    otherlv_7=(Token)match(input,67,FOLLOW_4); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							newLeafNode(otherlv_7, grammarAccess.getJvmParameterizedTypeReferenceAccess().getFullStopKeyword_1_4_0_0_1());
                    	      						
                    	    }

                    	    }


                    	    }

                    	    // InternalXcore.g:9301:5: ( ( ruleValidID ) )
                    	    // InternalXcore.g:9302:6: ( ruleValidID )
                    	    {
                    	    // InternalXcore.g:9302:6: ( ruleValidID )
                    	    // InternalXcore.g:9303:7: ruleValidID
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElement(grammarAccess.getJvmParameterizedTypeReferenceRule());
                    	      							}
                    	      						
                    	    }
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeJvmTypeCrossReference_1_4_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_129);
                    	    ruleValidID();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }

                    	    // InternalXcore.g:9317:5: ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )?
                    	    int alt176=2;
                    	    alt176 = dfa176.predict(input);
                    	    switch (alt176) {
                    	        case 1 :
                    	            // InternalXcore.g:9318:6: ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>'
                    	            {
                    	            // InternalXcore.g:9318:6: ( ( '<' )=>otherlv_9= '<' )
                    	            // InternalXcore.g:9319:7: ( '<' )=>otherlv_9= '<'
                    	            {
                    	            otherlv_9=(Token)match(input,23,FOLLOW_95); if (state.failed) return current;
                    	            if ( state.backtracking==0 ) {

                    	              							newLeafNode(otherlv_9, grammarAccess.getJvmParameterizedTypeReferenceAccess().getLessThanSignKeyword_1_4_2_0());
                    	              						
                    	            }

                    	            }

                    	            // InternalXcore.g:9325:6: ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) )
                    	            // InternalXcore.g:9326:7: (lv_arguments_10_0= ruleJvmArgumentTypeReference )
                    	            {
                    	            // InternalXcore.g:9326:7: (lv_arguments_10_0= ruleJvmArgumentTypeReference )
                    	            // InternalXcore.g:9327:8: lv_arguments_10_0= ruleJvmArgumentTypeReference
                    	            {
                    	            if ( state.backtracking==0 ) {

                    	              								newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_4_2_1_0());
                    	              							
                    	            }
                    	            pushFollow(FOLLOW_18);
                    	            lv_arguments_10_0=ruleJvmArgumentTypeReference();

                    	            state._fsp--;
                    	            if (state.failed) return current;
                    	            if ( state.backtracking==0 ) {

                    	              								if (current==null) {
                    	              									current = createModelElementForParent(grammarAccess.getJvmParameterizedTypeReferenceRule());
                    	              								}
                    	              								add(
                    	              									current,
                    	              									"arguments",
                    	              									lv_arguments_10_0,
                    	              									"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
                    	              								afterParserOrEnumRuleCall();
                    	              							
                    	            }

                    	            }


                    	            }

                    	            // InternalXcore.g:9344:6: (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )*
                    	            loop175:
                    	            do {
                    	                int alt175=2;
                    	                int LA175_0 = input.LA(1);

                    	                if ( (LA175_0==16) ) {
                    	                    alt175=1;
                    	                }


                    	                switch (alt175) {
                    	            	case 1 :
                    	            	    // InternalXcore.g:9345:7: otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) )
                    	            	    {
                    	            	    otherlv_11=(Token)match(input,16,FOLLOW_95); if (state.failed) return current;
                    	            	    if ( state.backtracking==0 ) {

                    	            	      							newLeafNode(otherlv_11, grammarAccess.getJvmParameterizedTypeReferenceAccess().getCommaKeyword_1_4_2_2_0());
                    	            	      						
                    	            	    }
                    	            	    // InternalXcore.g:9349:7: ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) )
                    	            	    // InternalXcore.g:9350:8: (lv_arguments_12_0= ruleJvmArgumentTypeReference )
                    	            	    {
                    	            	    // InternalXcore.g:9350:8: (lv_arguments_12_0= ruleJvmArgumentTypeReference )
                    	            	    // InternalXcore.g:9351:9: lv_arguments_12_0= ruleJvmArgumentTypeReference
                    	            	    {
                    	            	    if ( state.backtracking==0 ) {

                    	            	      									newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_4_2_2_1_0());
                    	            	      								
                    	            	    }
                    	            	    pushFollow(FOLLOW_18);
                    	            	    lv_arguments_12_0=ruleJvmArgumentTypeReference();

                    	            	    state._fsp--;
                    	            	    if (state.failed) return current;
                    	            	    if ( state.backtracking==0 ) {

                    	            	      									if (current==null) {
                    	            	      										current = createModelElementForParent(grammarAccess.getJvmParameterizedTypeReferenceRule());
                    	            	      									}
                    	            	      									add(
                    	            	      										current,
                    	            	      										"arguments",
                    	            	      										lv_arguments_12_0,
                    	            	      										"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
                    	            	      									afterParserOrEnumRuleCall();
                    	            	      								
                    	            	    }

                    	            	    }


                    	            	    }


                    	            	    }
                    	            	    break;

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

                    	            otherlv_13=(Token)match(input,24,FOLLOW_74); if (state.failed) return current;
                    	            if ( state.backtracking==0 ) {

                    	              						newLeafNode(otherlv_13, grammarAccess.getJvmParameterizedTypeReferenceAccess().getGreaterThanSignKeyword_1_4_2_3());
                    	              					
                    	            }

                    	            }
                    	            break;

                    	    }


                    	    }
                    	    break;

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


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJvmParameterizedTypeReference"


    // $ANTLR start "entryRuleJvmArgumentTypeReference"
    // InternalXcore.g:9380:1: entryRuleJvmArgumentTypeReference returns [EObject current=null] : iv_ruleJvmArgumentTypeReference= ruleJvmArgumentTypeReference EOF ;
    public final EObject entryRuleJvmArgumentTypeReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJvmArgumentTypeReference = null;


        try {
            // InternalXcore.g:9380:65: (iv_ruleJvmArgumentTypeReference= ruleJvmArgumentTypeReference EOF )
            // InternalXcore.g:9381:2: iv_ruleJvmArgumentTypeReference= ruleJvmArgumentTypeReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmArgumentTypeReferenceRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleJvmArgumentTypeReference=ruleJvmArgumentTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmArgumentTypeReference; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJvmArgumentTypeReference"


    // $ANTLR start "ruleJvmArgumentTypeReference"
    // InternalXcore.g:9387:1: ruleJvmArgumentTypeReference returns [EObject current=null] : (this_JvmTypeReference_0= ruleJvmTypeReference | this_JvmWildcardTypeReference_1= ruleJvmWildcardTypeReference ) ;
    public final EObject ruleJvmArgumentTypeReference() throws RecognitionException {
        EObject current = null;

        EObject this_JvmTypeReference_0 = null;

        EObject this_JvmWildcardTypeReference_1 = null;



        	enterRule();

        try {
            // InternalXcore.g:9393:2: ( (this_JvmTypeReference_0= ruleJvmTypeReference | this_JvmWildcardTypeReference_1= ruleJvmWildcardTypeReference ) )
            // InternalXcore.g:9394:2: (this_JvmTypeReference_0= ruleJvmTypeReference | this_JvmWildcardTypeReference_1= ruleJvmWildcardTypeReference )
            {
            // InternalXcore.g:9394:2: (this_JvmTypeReference_0= ruleJvmTypeReference | this_JvmWildcardTypeReference_1= ruleJvmWildcardTypeReference )
            int alt179=2;
            int LA179_0 = input.LA(1);

            if ( (LA179_0==RULE_ID||LA179_0==15||(LA179_0>=44 && LA179_0<=47)||LA179_0==56||LA179_0==85) ) {
                alt179=1;
            }
            else if ( (LA179_0==60) ) {
                alt179=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 179, 0, input);

                throw nvae;
            }
            switch (alt179) {
                case 1 :
                    // InternalXcore.g:9395:3: this_JvmTypeReference_0= ruleJvmTypeReference
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getJvmArgumentTypeReferenceAccess().getJvmTypeReferenceParserRuleCall_0());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_JvmTypeReference_0=ruleJvmTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_JvmTypeReference_0;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:9404:3: this_JvmWildcardTypeReference_1= ruleJvmWildcardTypeReference
                    {
                    if ( state.backtracking==0 ) {

                      			newCompositeNode(grammarAccess.getJvmArgumentTypeReferenceAccess().getJvmWildcardTypeReferenceParserRuleCall_1());
                      		
                    }
                    pushFollow(FOLLOW_2);
                    this_JvmWildcardTypeReference_1=ruleJvmWildcardTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      			current = this_JvmWildcardTypeReference_1;
                      			afterParserOrEnumRuleCall();
                      		
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJvmArgumentTypeReference"


    // $ANTLR start "entryRuleJvmWildcardTypeReference"
    // InternalXcore.g:9416:1: entryRuleJvmWildcardTypeReference returns [EObject current=null] : iv_ruleJvmWildcardTypeReference= ruleJvmWildcardTypeReference EOF ;
    public final EObject entryRuleJvmWildcardTypeReference() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJvmWildcardTypeReference = null;


        try {
            // InternalXcore.g:9416:65: (iv_ruleJvmWildcardTypeReference= ruleJvmWildcardTypeReference EOF )
            // InternalXcore.g:9417:2: iv_ruleJvmWildcardTypeReference= ruleJvmWildcardTypeReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleJvmWildcardTypeReference=ruleJvmWildcardTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmWildcardTypeReference; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJvmWildcardTypeReference"


    // $ANTLR start "ruleJvmWildcardTypeReference"
    // InternalXcore.g:9423:1: ruleJvmWildcardTypeReference returns [EObject current=null] : ( () otherlv_1= '?' ( ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) ( (lv_constraints_3_0= ruleJvmUpperBoundAnded ) )* ) | ( ( (lv_constraints_4_0= ruleJvmLowerBound ) ) ( (lv_constraints_5_0= ruleJvmLowerBoundAnded ) )* ) )? ) ;
    public final EObject ruleJvmWildcardTypeReference() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        EObject lv_constraints_2_0 = null;

        EObject lv_constraints_3_0 = null;

        EObject lv_constraints_4_0 = null;

        EObject lv_constraints_5_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:9429:2: ( ( () otherlv_1= '?' ( ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) ( (lv_constraints_3_0= ruleJvmUpperBoundAnded ) )* ) | ( ( (lv_constraints_4_0= ruleJvmLowerBound ) ) ( (lv_constraints_5_0= ruleJvmLowerBoundAnded ) )* ) )? ) )
            // InternalXcore.g:9430:2: ( () otherlv_1= '?' ( ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) ( (lv_constraints_3_0= ruleJvmUpperBoundAnded ) )* ) | ( ( (lv_constraints_4_0= ruleJvmLowerBound ) ) ( (lv_constraints_5_0= ruleJvmLowerBoundAnded ) )* ) )? )
            {
            // InternalXcore.g:9430:2: ( () otherlv_1= '?' ( ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) ( (lv_constraints_3_0= ruleJvmUpperBoundAnded ) )* ) | ( ( (lv_constraints_4_0= ruleJvmLowerBound ) ) ( (lv_constraints_5_0= ruleJvmLowerBoundAnded ) )* ) )? )
            // InternalXcore.g:9431:3: () otherlv_1= '?' ( ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) ( (lv_constraints_3_0= ruleJvmUpperBoundAnded ) )* ) | ( ( (lv_constraints_4_0= ruleJvmLowerBound ) ) ( (lv_constraints_5_0= ruleJvmLowerBoundAnded ) )* ) )?
            {
            // InternalXcore.g:9431:3: ()
            // InternalXcore.g:9432:4: 
            {
            if ( state.backtracking==0 ) {

              				current = forceCreateModelElement(
              					grammarAccess.getJvmWildcardTypeReferenceAccess().getJvmWildcardTypeReferenceAction_0(),
              					current);
              			
            }

            }

            otherlv_1=(Token)match(input,60,FOLLOW_73); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_1, grammarAccess.getJvmWildcardTypeReferenceAccess().getQuestionMarkKeyword_1());
              		
            }
            // InternalXcore.g:9442:3: ( ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) ( (lv_constraints_3_0= ruleJvmUpperBoundAnded ) )* ) | ( ( (lv_constraints_4_0= ruleJvmLowerBound ) ) ( (lv_constraints_5_0= ruleJvmLowerBoundAnded ) )* ) )?
            int alt182=3;
            int LA182_0 = input.LA(1);

            if ( (LA182_0==35) ) {
                alt182=1;
            }
            else if ( (LA182_0==66) ) {
                alt182=2;
            }
            switch (alt182) {
                case 1 :
                    // InternalXcore.g:9443:4: ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) ( (lv_constraints_3_0= ruleJvmUpperBoundAnded ) )* )
                    {
                    // InternalXcore.g:9443:4: ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) ( (lv_constraints_3_0= ruleJvmUpperBoundAnded ) )* )
                    // InternalXcore.g:9444:5: ( (lv_constraints_2_0= ruleJvmUpperBound ) ) ( (lv_constraints_3_0= ruleJvmUpperBoundAnded ) )*
                    {
                    // InternalXcore.g:9444:5: ( (lv_constraints_2_0= ruleJvmUpperBound ) )
                    // InternalXcore.g:9445:6: (lv_constraints_2_0= ruleJvmUpperBound )
                    {
                    // InternalXcore.g:9445:6: (lv_constraints_2_0= ruleJvmUpperBound )
                    // InternalXcore.g:9446:7: lv_constraints_2_0= ruleJvmUpperBound
                    {
                    if ( state.backtracking==0 ) {

                      							newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmUpperBoundParserRuleCall_2_0_0_0());
                      						
                    }
                    pushFollow(FOLLOW_64);
                    lv_constraints_2_0=ruleJvmUpperBound();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElementForParent(grammarAccess.getJvmWildcardTypeReferenceRule());
                      							}
                      							add(
                      								current,
                      								"constraints",
                      								lv_constraints_2_0,
                      								"org.eclipse.xtext.xbase.Xtype.JvmUpperBound");
                      							afterParserOrEnumRuleCall();
                      						
                    }

                    }


                    }

                    // InternalXcore.g:9463:5: ( (lv_constraints_3_0= ruleJvmUpperBoundAnded ) )*
                    loop180:
                    do {
                        int alt180=2;
                        int LA180_0 = input.LA(1);

                        if ( (LA180_0==58) ) {
                            alt180=1;
                        }


                        switch (alt180) {
                    	case 1 :
                    	    // InternalXcore.g:9464:6: (lv_constraints_3_0= ruleJvmUpperBoundAnded )
                    	    {
                    	    // InternalXcore.g:9464:6: (lv_constraints_3_0= ruleJvmUpperBoundAnded )
                    	    // InternalXcore.g:9465:7: lv_constraints_3_0= ruleJvmUpperBoundAnded
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmUpperBoundAndedParserRuleCall_2_0_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_64);
                    	    lv_constraints_3_0=ruleJvmUpperBoundAnded();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getJvmWildcardTypeReferenceRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"constraints",
                    	      								lv_constraints_3_0,
                    	      								"org.eclipse.xtext.xbase.Xtype.JvmUpperBoundAnded");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }
                    	    break;

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


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:9484:4: ( ( (lv_constraints_4_0= ruleJvmLowerBound ) ) ( (lv_constraints_5_0= ruleJvmLowerBoundAnded ) )* )
                    {
                    // InternalXcore.g:9484:4: ( ( (lv_constraints_4_0= ruleJvmLowerBound ) ) ( (lv_constraints_5_0= ruleJvmLowerBoundAnded ) )* )
                    // InternalXcore.g:9485:5: ( (lv_constraints_4_0= ruleJvmLowerBound ) ) ( (lv_constraints_5_0= ruleJvmLowerBoundAnded ) )*
                    {
                    // InternalXcore.g:9485:5: ( (lv_constraints_4_0= ruleJvmLowerBound ) )
                    // InternalXcore.g:9486:6: (lv_constraints_4_0= ruleJvmLowerBound )
                    {
                    // InternalXcore.g:9486:6: (lv_constraints_4_0= ruleJvmLowerBound )
                    // InternalXcore.g:9487:7: lv_constraints_4_0= ruleJvmLowerBound
                    {
                    if ( state.backtracking==0 ) {

                      							newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmLowerBoundParserRuleCall_2_1_0_0());
                      						
                    }
                    pushFollow(FOLLOW_64);
                    lv_constraints_4_0=ruleJvmLowerBound();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElementForParent(grammarAccess.getJvmWildcardTypeReferenceRule());
                      							}
                      							add(
                      								current,
                      								"constraints",
                      								lv_constraints_4_0,
                      								"org.eclipse.xtext.xbase.Xtype.JvmLowerBound");
                      							afterParserOrEnumRuleCall();
                      						
                    }

                    }


                    }

                    // InternalXcore.g:9504:5: ( (lv_constraints_5_0= ruleJvmLowerBoundAnded ) )*
                    loop181:
                    do {
                        int alt181=2;
                        int LA181_0 = input.LA(1);

                        if ( (LA181_0==58) ) {
                            alt181=1;
                        }


                        switch (alt181) {
                    	case 1 :
                    	    // InternalXcore.g:9505:6: (lv_constraints_5_0= ruleJvmLowerBoundAnded )
                    	    {
                    	    // InternalXcore.g:9505:6: (lv_constraints_5_0= ruleJvmLowerBoundAnded )
                    	    // InternalXcore.g:9506:7: lv_constraints_5_0= ruleJvmLowerBoundAnded
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	      							newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmLowerBoundAndedParserRuleCall_2_1_1_0());
                    	      						
                    	    }
                    	    pushFollow(FOLLOW_64);
                    	    lv_constraints_5_0=ruleJvmLowerBoundAnded();

                    	    state._fsp--;
                    	    if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	      							if (current==null) {
                    	      								current = createModelElementForParent(grammarAccess.getJvmWildcardTypeReferenceRule());
                    	      							}
                    	      							add(
                    	      								current,
                    	      								"constraints",
                    	      								lv_constraints_5_0,
                    	      								"org.eclipse.xtext.xbase.Xtype.JvmLowerBoundAnded");
                    	      							afterParserOrEnumRuleCall();
                    	      						
                    	    }

                    	    }


                    	    }
                    	    break;

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


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJvmWildcardTypeReference"


    // $ANTLR start "entryRuleJvmUpperBound"
    // InternalXcore.g:9529:1: entryRuleJvmUpperBound returns [EObject current=null] : iv_ruleJvmUpperBound= ruleJvmUpperBound EOF ;
    public final EObject entryRuleJvmUpperBound() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJvmUpperBound = null;


        try {
            // InternalXcore.g:9529:54: (iv_ruleJvmUpperBound= ruleJvmUpperBound EOF )
            // InternalXcore.g:9530:2: iv_ruleJvmUpperBound= ruleJvmUpperBound EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmUpperBoundRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleJvmUpperBound=ruleJvmUpperBound();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmUpperBound; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJvmUpperBound"


    // $ANTLR start "ruleJvmUpperBound"
    // InternalXcore.g:9536:1: ruleJvmUpperBound returns [EObject current=null] : (otherlv_0= 'extends' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) ;
    public final EObject ruleJvmUpperBound() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        EObject lv_typeReference_1_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:9542:2: ( (otherlv_0= 'extends' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) )
            // InternalXcore.g:9543:2: (otherlv_0= 'extends' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            {
            // InternalXcore.g:9543:2: (otherlv_0= 'extends' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            // InternalXcore.g:9544:3: otherlv_0= 'extends' ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            {
            otherlv_0=(Token)match(input,35,FOLLOW_20); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getJvmUpperBoundAccess().getExtendsKeyword_0());
              		
            }
            // InternalXcore.g:9548:3: ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            // InternalXcore.g:9549:4: (lv_typeReference_1_0= ruleJvmTypeReference )
            {
            // InternalXcore.g:9549:4: (lv_typeReference_1_0= ruleJvmTypeReference )
            // InternalXcore.g:9550:5: lv_typeReference_1_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getJvmUpperBoundAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_typeReference_1_0=ruleJvmTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getJvmUpperBoundRule());
              					}
              					set(
              						current,
              						"typeReference",
              						lv_typeReference_1_0,
              						"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJvmUpperBound"


    // $ANTLR start "entryRuleJvmUpperBoundAnded"
    // InternalXcore.g:9571:1: entryRuleJvmUpperBoundAnded returns [EObject current=null] : iv_ruleJvmUpperBoundAnded= ruleJvmUpperBoundAnded EOF ;
    public final EObject entryRuleJvmUpperBoundAnded() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJvmUpperBoundAnded = null;


        try {
            // InternalXcore.g:9571:59: (iv_ruleJvmUpperBoundAnded= ruleJvmUpperBoundAnded EOF )
            // InternalXcore.g:9572:2: iv_ruleJvmUpperBoundAnded= ruleJvmUpperBoundAnded EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmUpperBoundAndedRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleJvmUpperBoundAnded=ruleJvmUpperBoundAnded();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmUpperBoundAnded; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJvmUpperBoundAnded"


    // $ANTLR start "ruleJvmUpperBoundAnded"
    // InternalXcore.g:9578:1: ruleJvmUpperBoundAnded returns [EObject current=null] : (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) ;
    public final EObject ruleJvmUpperBoundAnded() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        EObject lv_typeReference_1_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:9584:2: ( (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) )
            // InternalXcore.g:9585:2: (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            {
            // InternalXcore.g:9585:2: (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            // InternalXcore.g:9586:3: otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            {
            otherlv_0=(Token)match(input,58,FOLLOW_20); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getJvmUpperBoundAndedAccess().getAmpersandKeyword_0());
              		
            }
            // InternalXcore.g:9590:3: ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            // InternalXcore.g:9591:4: (lv_typeReference_1_0= ruleJvmTypeReference )
            {
            // InternalXcore.g:9591:4: (lv_typeReference_1_0= ruleJvmTypeReference )
            // InternalXcore.g:9592:5: lv_typeReference_1_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getJvmUpperBoundAndedAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_typeReference_1_0=ruleJvmTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getJvmUpperBoundAndedRule());
              					}
              					set(
              						current,
              						"typeReference",
              						lv_typeReference_1_0,
              						"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJvmUpperBoundAnded"


    // $ANTLR start "entryRuleJvmLowerBound"
    // InternalXcore.g:9613:1: entryRuleJvmLowerBound returns [EObject current=null] : iv_ruleJvmLowerBound= ruleJvmLowerBound EOF ;
    public final EObject entryRuleJvmLowerBound() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJvmLowerBound = null;


        try {
            // InternalXcore.g:9613:54: (iv_ruleJvmLowerBound= ruleJvmLowerBound EOF )
            // InternalXcore.g:9614:2: iv_ruleJvmLowerBound= ruleJvmLowerBound EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmLowerBoundRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleJvmLowerBound=ruleJvmLowerBound();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmLowerBound; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJvmLowerBound"


    // $ANTLR start "ruleJvmLowerBound"
    // InternalXcore.g:9620:1: ruleJvmLowerBound returns [EObject current=null] : (otherlv_0= 'super' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) ;
    public final EObject ruleJvmLowerBound() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        EObject lv_typeReference_1_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:9626:2: ( (otherlv_0= 'super' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) )
            // InternalXcore.g:9627:2: (otherlv_0= 'super' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            {
            // InternalXcore.g:9627:2: (otherlv_0= 'super' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            // InternalXcore.g:9628:3: otherlv_0= 'super' ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            {
            otherlv_0=(Token)match(input,66,FOLLOW_20); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getJvmLowerBoundAccess().getSuperKeyword_0());
              		
            }
            // InternalXcore.g:9632:3: ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            // InternalXcore.g:9633:4: (lv_typeReference_1_0= ruleJvmTypeReference )
            {
            // InternalXcore.g:9633:4: (lv_typeReference_1_0= ruleJvmTypeReference )
            // InternalXcore.g:9634:5: lv_typeReference_1_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getJvmLowerBoundAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_typeReference_1_0=ruleJvmTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getJvmLowerBoundRule());
              					}
              					set(
              						current,
              						"typeReference",
              						lv_typeReference_1_0,
              						"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJvmLowerBound"


    // $ANTLR start "entryRuleJvmLowerBoundAnded"
    // InternalXcore.g:9655:1: entryRuleJvmLowerBoundAnded returns [EObject current=null] : iv_ruleJvmLowerBoundAnded= ruleJvmLowerBoundAnded EOF ;
    public final EObject entryRuleJvmLowerBoundAnded() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleJvmLowerBoundAnded = null;


        try {
            // InternalXcore.g:9655:59: (iv_ruleJvmLowerBoundAnded= ruleJvmLowerBoundAnded EOF )
            // InternalXcore.g:9656:2: iv_ruleJvmLowerBoundAnded= ruleJvmLowerBoundAnded EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmLowerBoundAndedRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleJvmLowerBoundAnded=ruleJvmLowerBoundAnded();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmLowerBoundAnded; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleJvmLowerBoundAnded"


    // $ANTLR start "ruleJvmLowerBoundAnded"
    // InternalXcore.g:9662:1: ruleJvmLowerBoundAnded returns [EObject current=null] : (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) ;
    public final EObject ruleJvmLowerBoundAnded() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        EObject lv_typeReference_1_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:9668:2: ( (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) )
            // InternalXcore.g:9669:2: (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            {
            // InternalXcore.g:9669:2: (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            // InternalXcore.g:9670:3: otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            {
            otherlv_0=(Token)match(input,58,FOLLOW_20); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getJvmLowerBoundAndedAccess().getAmpersandKeyword_0());
              		
            }
            // InternalXcore.g:9674:3: ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            // InternalXcore.g:9675:4: (lv_typeReference_1_0= ruleJvmTypeReference )
            {
            // InternalXcore.g:9675:4: (lv_typeReference_1_0= ruleJvmTypeReference )
            // InternalXcore.g:9676:5: lv_typeReference_1_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {

              					newCompositeNode(grammarAccess.getJvmLowerBoundAndedAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0());
              				
            }
            pushFollow(FOLLOW_2);
            lv_typeReference_1_0=ruleJvmTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getJvmLowerBoundAndedRule());
              					}
              					set(
              						current,
              						"typeReference",
              						lv_typeReference_1_0,
              						"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
              					afterParserOrEnumRuleCall();
              				
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleJvmLowerBoundAnded"


    // $ANTLR start "entryRuleQualifiedNameWithWildcard"
    // InternalXcore.g:9697:1: entryRuleQualifiedNameWithWildcard returns [String current=null] : iv_ruleQualifiedNameWithWildcard= ruleQualifiedNameWithWildcard EOF ;
    public final String entryRuleQualifiedNameWithWildcard() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleQualifiedNameWithWildcard = null;


        try {
            // InternalXcore.g:9697:65: (iv_ruleQualifiedNameWithWildcard= ruleQualifiedNameWithWildcard EOF )
            // InternalXcore.g:9698:2: iv_ruleQualifiedNameWithWildcard= ruleQualifiedNameWithWildcard EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getQualifiedNameWithWildcardRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleQualifiedNameWithWildcard=ruleQualifiedNameWithWildcard();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleQualifiedNameWithWildcard.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleQualifiedNameWithWildcard"


    // $ANTLR start "ruleQualifiedNameWithWildcard"
    // InternalXcore.g:9704:1: ruleQualifiedNameWithWildcard returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_QualifiedName_0= ruleQualifiedName kw= '.' kw= '*' ) ;
    public final AntlrDatatypeRuleToken ruleQualifiedNameWithWildcard() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_QualifiedName_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:9710:2: ( (this_QualifiedName_0= ruleQualifiedName kw= '.' kw= '*' ) )
            // InternalXcore.g:9711:2: (this_QualifiedName_0= ruleQualifiedName kw= '.' kw= '*' )
            {
            // InternalXcore.g:9711:2: (this_QualifiedName_0= ruleQualifiedName kw= '.' kw= '*' )
            // InternalXcore.g:9712:3: this_QualifiedName_0= ruleQualifiedName kw= '.' kw= '*'
            {
            if ( state.backtracking==0 ) {

              			newCompositeNode(grammarAccess.getQualifiedNameWithWildcardAccess().getQualifiedNameParserRuleCall_0());
              		
            }
            pushFollow(FOLLOW_130);
            this_QualifiedName_0=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(this_QualifiedName_0);
              		
            }
            if ( state.backtracking==0 ) {

              			afterParserOrEnumRuleCall();
              		
            }
            kw=(Token)match(input,67,FOLLOW_131); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(kw);
              			newLeafNode(kw, grammarAccess.getQualifiedNameWithWildcardAccess().getFullStopKeyword_1());
              		
            }
            kw=(Token)match(input,61,FOLLOW_2); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			current.merge(kw);
              			newLeafNode(kw, grammarAccess.getQualifiedNameWithWildcardAccess().getAsteriskKeyword_2());
              		
            }

            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleQualifiedNameWithWildcard"


    // $ANTLR start "entryRuleXImportDeclaration"
    // InternalXcore.g:9736:1: entryRuleXImportDeclaration returns [EObject current=null] : iv_ruleXImportDeclaration= ruleXImportDeclaration EOF ;
    public final EObject entryRuleXImportDeclaration() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleXImportDeclaration = null;


        try {
            // InternalXcore.g:9736:59: (iv_ruleXImportDeclaration= ruleXImportDeclaration EOF )
            // InternalXcore.g:9737:2: iv_ruleXImportDeclaration= ruleXImportDeclaration EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXImportDeclarationRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleXImportDeclaration=ruleXImportDeclaration();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXImportDeclaration; 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleXImportDeclaration"


    // $ANTLR start "ruleXImportDeclaration"
    // InternalXcore.g:9743:1: ruleXImportDeclaration returns [EObject current=null] : (otherlv_0= 'import' ( ( ( (lv_static_1_0= 'static' ) ) ( (lv_extension_2_0= 'extension' ) )? ( ( ruleQualifiedNameInStaticImport ) ) ( ( (lv_wildcard_4_0= '*' ) ) | ( (lv_memberName_5_0= ruleValidID ) ) ) ) | ( ( ruleQualifiedName ) ) | ( (lv_importedNamespace_7_0= ruleQualifiedNameWithWildcard ) ) ) (otherlv_8= ';' )? ) ;
    public final EObject ruleXImportDeclaration() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_static_1_0=null;
        Token lv_extension_2_0=null;
        Token lv_wildcard_4_0=null;
        Token otherlv_8=null;
        AntlrDatatypeRuleToken lv_memberName_5_0 = null;

        AntlrDatatypeRuleToken lv_importedNamespace_7_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:9749:2: ( (otherlv_0= 'import' ( ( ( (lv_static_1_0= 'static' ) ) ( (lv_extension_2_0= 'extension' ) )? ( ( ruleQualifiedNameInStaticImport ) ) ( ( (lv_wildcard_4_0= '*' ) ) | ( (lv_memberName_5_0= ruleValidID ) ) ) ) | ( ( ruleQualifiedName ) ) | ( (lv_importedNamespace_7_0= ruleQualifiedNameWithWildcard ) ) ) (otherlv_8= ';' )? ) )
            // InternalXcore.g:9750:2: (otherlv_0= 'import' ( ( ( (lv_static_1_0= 'static' ) ) ( (lv_extension_2_0= 'extension' ) )? ( ( ruleQualifiedNameInStaticImport ) ) ( ( (lv_wildcard_4_0= '*' ) ) | ( (lv_memberName_5_0= ruleValidID ) ) ) ) | ( ( ruleQualifiedName ) ) | ( (lv_importedNamespace_7_0= ruleQualifiedNameWithWildcard ) ) ) (otherlv_8= ';' )? )
            {
            // InternalXcore.g:9750:2: (otherlv_0= 'import' ( ( ( (lv_static_1_0= 'static' ) ) ( (lv_extension_2_0= 'extension' ) )? ( ( ruleQualifiedNameInStaticImport ) ) ( ( (lv_wildcard_4_0= '*' ) ) | ( (lv_memberName_5_0= ruleValidID ) ) ) ) | ( ( ruleQualifiedName ) ) | ( (lv_importedNamespace_7_0= ruleQualifiedNameWithWildcard ) ) ) (otherlv_8= ';' )? )
            // InternalXcore.g:9751:3: otherlv_0= 'import' ( ( ( (lv_static_1_0= 'static' ) ) ( (lv_extension_2_0= 'extension' ) )? ( ( ruleQualifiedNameInStaticImport ) ) ( ( (lv_wildcard_4_0= '*' ) ) | ( (lv_memberName_5_0= ruleValidID ) ) ) ) | ( ( ruleQualifiedName ) ) | ( (lv_importedNamespace_7_0= ruleQualifiedNameWithWildcard ) ) ) (otherlv_8= ';' )?
            {
            otherlv_0=(Token)match(input,19,FOLLOW_132); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(otherlv_0, grammarAccess.getXImportDeclarationAccess().getImportKeyword_0());
              		
            }
            // InternalXcore.g:9755:3: ( ( ( (lv_static_1_0= 'static' ) ) ( (lv_extension_2_0= 'extension' ) )? ( ( ruleQualifiedNameInStaticImport ) ) ( ( (lv_wildcard_4_0= '*' ) ) | ( (lv_memberName_5_0= ruleValidID ) ) ) ) | ( ( ruleQualifiedName ) ) | ( (lv_importedNamespace_7_0= ruleQualifiedNameWithWildcard ) ) )
            int alt185=3;
            alt185 = dfa185.predict(input);
            switch (alt185) {
                case 1 :
                    // InternalXcore.g:9756:4: ( ( (lv_static_1_0= 'static' ) ) ( (lv_extension_2_0= 'extension' ) )? ( ( ruleQualifiedNameInStaticImport ) ) ( ( (lv_wildcard_4_0= '*' ) ) | ( (lv_memberName_5_0= ruleValidID ) ) ) )
                    {
                    // InternalXcore.g:9756:4: ( ( (lv_static_1_0= 'static' ) ) ( (lv_extension_2_0= 'extension' ) )? ( ( ruleQualifiedNameInStaticImport ) ) ( ( (lv_wildcard_4_0= '*' ) ) | ( (lv_memberName_5_0= ruleValidID ) ) ) )
                    // InternalXcore.g:9757:5: ( (lv_static_1_0= 'static' ) ) ( (lv_extension_2_0= 'extension' ) )? ( ( ruleQualifiedNameInStaticImport ) ) ( ( (lv_wildcard_4_0= '*' ) ) | ( (lv_memberName_5_0= ruleValidID ) ) )
                    {
                    // InternalXcore.g:9757:5: ( (lv_static_1_0= 'static' ) )
                    // InternalXcore.g:9758:6: (lv_static_1_0= 'static' )
                    {
                    // InternalXcore.g:9758:6: (lv_static_1_0= 'static' )
                    // InternalXcore.g:9759:7: lv_static_1_0= 'static'
                    {
                    lv_static_1_0=(Token)match(input,69,FOLLOW_133); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							newLeafNode(lv_static_1_0, grammarAccess.getXImportDeclarationAccess().getStaticStaticKeyword_1_0_0_0());
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getXImportDeclarationRule());
                      							}
                      							setWithLastConsumed(current, "static", lv_static_1_0 != null, "static");
                      						
                    }

                    }


                    }

                    // InternalXcore.g:9771:5: ( (lv_extension_2_0= 'extension' ) )?
                    int alt183=2;
                    int LA183_0 = input.LA(1);

                    if ( (LA183_0==68) ) {
                        alt183=1;
                    }
                    switch (alt183) {
                        case 1 :
                            // InternalXcore.g:9772:6: (lv_extension_2_0= 'extension' )
                            {
                            // InternalXcore.g:9772:6: (lv_extension_2_0= 'extension' )
                            // InternalXcore.g:9773:7: lv_extension_2_0= 'extension'
                            {
                            lv_extension_2_0=(Token)match(input,68,FOLLOW_133); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              							newLeafNode(lv_extension_2_0, grammarAccess.getXImportDeclarationAccess().getExtensionExtensionKeyword_1_0_1_0());
                              						
                            }
                            if ( state.backtracking==0 ) {

                              							if (current==null) {
                              								current = createModelElement(grammarAccess.getXImportDeclarationRule());
                              							}
                              							setWithLastConsumed(current, "extension", lv_extension_2_0 != null, "extension");
                              						
                            }

                            }


                            }
                            break;

                    }

                    // InternalXcore.g:9785:5: ( ( ruleQualifiedNameInStaticImport ) )
                    // InternalXcore.g:9786:6: ( ruleQualifiedNameInStaticImport )
                    {
                    // InternalXcore.g:9786:6: ( ruleQualifiedNameInStaticImport )
                    // InternalXcore.g:9787:7: ruleQualifiedNameInStaticImport
                    {
                    if ( state.backtracking==0 ) {

                      							if (current==null) {
                      								current = createModelElement(grammarAccess.getXImportDeclarationRule());
                      							}
                      						
                    }
                    if ( state.backtracking==0 ) {

                      							newCompositeNode(grammarAccess.getXImportDeclarationAccess().getImportedTypeJvmDeclaredTypeCrossReference_1_0_2_0());
                      						
                    }
                    pushFollow(FOLLOW_134);
                    ruleQualifiedNameInStaticImport();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      							afterParserOrEnumRuleCall();
                      						
                    }

                    }


                    }

                    // InternalXcore.g:9801:5: ( ( (lv_wildcard_4_0= '*' ) ) | ( (lv_memberName_5_0= ruleValidID ) ) )
                    int alt184=2;
                    int LA184_0 = input.LA(1);

                    if ( (LA184_0==61) ) {
                        alt184=1;
                    }
                    else if ( (LA184_0==RULE_ID||(LA184_0>=44 && LA184_0<=47)||LA184_0==56) ) {
                        alt184=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 184, 0, input);

                        throw nvae;
                    }
                    switch (alt184) {
                        case 1 :
                            // InternalXcore.g:9802:6: ( (lv_wildcard_4_0= '*' ) )
                            {
                            // InternalXcore.g:9802:6: ( (lv_wildcard_4_0= '*' ) )
                            // InternalXcore.g:9803:7: (lv_wildcard_4_0= '*' )
                            {
                            // InternalXcore.g:9803:7: (lv_wildcard_4_0= '*' )
                            // InternalXcore.g:9804:8: lv_wildcard_4_0= '*'
                            {
                            lv_wildcard_4_0=(Token)match(input,61,FOLLOW_135); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              								newLeafNode(lv_wildcard_4_0, grammarAccess.getXImportDeclarationAccess().getWildcardAsteriskKeyword_1_0_3_0_0());
                              							
                            }
                            if ( state.backtracking==0 ) {

                              								if (current==null) {
                              									current = createModelElement(grammarAccess.getXImportDeclarationRule());
                              								}
                              								setWithLastConsumed(current, "wildcard", lv_wildcard_4_0 != null, "*");
                              							
                            }

                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalXcore.g:9817:6: ( (lv_memberName_5_0= ruleValidID ) )
                            {
                            // InternalXcore.g:9817:6: ( (lv_memberName_5_0= ruleValidID ) )
                            // InternalXcore.g:9818:7: (lv_memberName_5_0= ruleValidID )
                            {
                            // InternalXcore.g:9818:7: (lv_memberName_5_0= ruleValidID )
                            // InternalXcore.g:9819:8: lv_memberName_5_0= ruleValidID
                            {
                            if ( state.backtracking==0 ) {

                              								newCompositeNode(grammarAccess.getXImportDeclarationAccess().getMemberNameValidIDParserRuleCall_1_0_3_1_0());
                              							
                            }
                            pushFollow(FOLLOW_135);
                            lv_memberName_5_0=ruleValidID();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                              								if (current==null) {
                              									current = createModelElementForParent(grammarAccess.getXImportDeclarationRule());
                              								}
                              								set(
                              									current,
                              									"memberName",
                              									lv_memberName_5_0,
                              									"org.eclipse.emf.ecore.xcore.Xcore.ValidID");
                              								afterParserOrEnumRuleCall();
                              							
                            }

                            }


                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:9839:4: ( ( ruleQualifiedName ) )
                    {
                    // InternalXcore.g:9839:4: ( ( ruleQualifiedName ) )
                    // InternalXcore.g:9840:5: ( ruleQualifiedName )
                    {
                    // InternalXcore.g:9840:5: ( ruleQualifiedName )
                    // InternalXcore.g:9841:6: ruleQualifiedName
                    {
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getXImportDeclarationRule());
                      						}
                      					
                    }
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXImportDeclarationAccess().getImportedTypeJvmDeclaredTypeCrossReference_1_1_0());
                      					
                    }
                    pushFollow(FOLLOW_135);
                    ruleQualifiedName();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;
                case 3 :
                    // InternalXcore.g:9856:4: ( (lv_importedNamespace_7_0= ruleQualifiedNameWithWildcard ) )
                    {
                    // InternalXcore.g:9856:4: ( (lv_importedNamespace_7_0= ruleQualifiedNameWithWildcard ) )
                    // InternalXcore.g:9857:5: (lv_importedNamespace_7_0= ruleQualifiedNameWithWildcard )
                    {
                    // InternalXcore.g:9857:5: (lv_importedNamespace_7_0= ruleQualifiedNameWithWildcard )
                    // InternalXcore.g:9858:6: lv_importedNamespace_7_0= ruleQualifiedNameWithWildcard
                    {
                    if ( state.backtracking==0 ) {

                      						newCompositeNode(grammarAccess.getXImportDeclarationAccess().getImportedNamespaceQualifiedNameWithWildcardParserRuleCall_1_2_0());
                      					
                    }
                    pushFollow(FOLLOW_135);
                    lv_importedNamespace_7_0=ruleQualifiedNameWithWildcard();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      						if (current==null) {
                      							current = createModelElementForParent(grammarAccess.getXImportDeclarationRule());
                      						}
                      						set(
                      							current,
                      							"importedNamespace",
                      							lv_importedNamespace_7_0,
                      							"org.eclipse.xtext.xbase.Xtype.QualifiedNameWithWildcard");
                      						afterParserOrEnumRuleCall();
                      					
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalXcore.g:9876:3: (otherlv_8= ';' )?
            int alt186=2;
            int LA186_0 = input.LA(1);

            if ( (LA186_0==65) ) {
                alt186=1;
            }
            switch (alt186) {
                case 1 :
                    // InternalXcore.g:9877:4: otherlv_8= ';'
                    {
                    otherlv_8=(Token)match(input,65,FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      				newLeafNode(otherlv_8, grammarAccess.getXImportDeclarationAccess().getSemicolonKeyword_2());
                      			
                    }

                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXImportDeclaration"


    // $ANTLR start "entryRuleQualifiedNameInStaticImport"
    // InternalXcore.g:9886:1: entryRuleQualifiedNameInStaticImport returns [String current=null] : iv_ruleQualifiedNameInStaticImport= ruleQualifiedNameInStaticImport EOF ;
    public final String entryRuleQualifiedNameInStaticImport() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleQualifiedNameInStaticImport = null;


        try {
            // InternalXcore.g:9886:67: (iv_ruleQualifiedNameInStaticImport= ruleQualifiedNameInStaticImport EOF )
            // InternalXcore.g:9887:2: iv_ruleQualifiedNameInStaticImport= ruleQualifiedNameInStaticImport EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getQualifiedNameInStaticImportRule()); 
            }
            pushFollow(FOLLOW_1);
            iv_ruleQualifiedNameInStaticImport=ruleQualifiedNameInStaticImport();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleQualifiedNameInStaticImport.getText(); 
            }
            match(input,EOF,FOLLOW_2); if (state.failed) return current;

            }

        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleQualifiedNameInStaticImport"


    // $ANTLR start "ruleQualifiedNameInStaticImport"
    // InternalXcore.g:9893:1: ruleQualifiedNameInStaticImport returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ValidID_0= ruleValidID kw= '.' )+ ;
    public final AntlrDatatypeRuleToken ruleQualifiedNameInStaticImport() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_ValidID_0 = null;



        	enterRule();

        try {
            // InternalXcore.g:9899:2: ( (this_ValidID_0= ruleValidID kw= '.' )+ )
            // InternalXcore.g:9900:2: (this_ValidID_0= ruleValidID kw= '.' )+
            {
            // InternalXcore.g:9900:2: (this_ValidID_0= ruleValidID kw= '.' )+
            int cnt187=0;
            loop187:
            do {
                int alt187=2;
                switch ( input.LA(1) ) {
                case RULE_ID:
                    {
                    int LA187_2 = input.LA(2);

                    if ( (LA187_2==67) ) {
                        alt187=1;
                    }


                    }
                    break;
                case 44:
                    {
                    int LA187_3 = input.LA(2);

                    if ( (LA187_3==67) ) {
                        alt187=1;
                    }


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

                    if ( (LA187_4==67) ) {
                        alt187=1;
                    }


                    }
                    break;
                case 45:
                    {
                    int LA187_5 = input.LA(2);

                    if ( (LA187_5==67) ) {
                        alt187=1;
                    }


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

                    if ( (LA187_6==67) ) {
                        alt187=1;
                    }


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

                    if ( (LA187_7==67) ) {
                        alt187=1;
                    }


                    }
                    break;

                }

                switch (alt187) {
            	case 1 :
            	    // InternalXcore.g:9901:3: this_ValidID_0= ruleValidID kw= '.'
            	    {
            	    if ( state.backtracking==0 ) {

            	      			newCompositeNode(grammarAccess.getQualifiedNameInStaticImportAccess().getValidIDParserRuleCall_0());
            	      		
            	    }
            	    pushFollow(FOLLOW_130);
            	    this_ValidID_0=ruleValidID();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      			current.merge(this_ValidID_0);
            	      		
            	    }
            	    if ( state.backtracking==0 ) {

            	      			afterParserOrEnumRuleCall();
            	      		
            	    }
            	    kw=(Token)match(input,67,FOLLOW_136); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      			current.merge(kw);
            	      			newLeafNode(kw, grammarAccess.getQualifiedNameInStaticImportAccess().getFullStopKeyword_1());
            	      		
            	    }

            	    }
            	    break;

            	default :
            	    if ( cnt187 >= 1 ) break loop187;
            	    if (state.backtracking>0) {state.failed=true; return current;}
                        EarlyExitException eee =
                            new EarlyExitException(187, input);
                        throw eee;
                }
                cnt187++;
            } while (true);


            }

            if ( state.backtracking==0 ) {

              	leaveRule();

            }
        }

            catch (RecognitionException re) {
                recover(input,re);
                appendSkippedTokens();
            }
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleQualifiedNameInStaticImport"

    // $ANTLR start synpred1_InternalXcore
    public final void synpred1_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:148:4: ( ( 'annotation' ( ( RULE_STRING ) ) ) )
        // InternalXcore.g:148:5: ( 'annotation' ( ( RULE_STRING ) ) )
        {
        // InternalXcore.g:148:5: ( 'annotation' ( ( RULE_STRING ) ) )
        // InternalXcore.g:149:5: 'annotation' ( ( RULE_STRING ) )
        {
        match(input,20,FOLLOW_12); if (state.failed) return ;
        // InternalXcore.g:150:5: ( ( RULE_STRING ) )
        // InternalXcore.g:151:6: ( RULE_STRING )
        {
        // InternalXcore.g:151:6: ( RULE_STRING )
        // InternalXcore.g:152:7: RULE_STRING
        {
        match(input,RULE_STRING,FOLLOW_2); if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred1_InternalXcore

    // $ANTLR start synpred3_InternalXcore
    public final void synpred3_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:3252:5: ( '<' )
        // InternalXcore.g:3252:6: '<'
        {
        match(input,23,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred3_InternalXcore

    // $ANTLR start synpred4_InternalXcore
    public final void synpred4_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:3879:6: ( ( () ( ( ruleOpMultiAssign ) ) ) )
        // InternalXcore.g:3879:7: ( () ( ( ruleOpMultiAssign ) ) )
        {
        // InternalXcore.g:3879:7: ( () ( ( ruleOpMultiAssign ) ) )
        // InternalXcore.g:3880:7: () ( ( ruleOpMultiAssign ) )
        {
        // InternalXcore.g:3880:7: ()
        // InternalXcore.g:3881:7: 
        {
        }

        // InternalXcore.g:3882:7: ( ( ruleOpMultiAssign ) )
        // InternalXcore.g:3883:8: ( ruleOpMultiAssign )
        {
        // InternalXcore.g:3883:8: ( ruleOpMultiAssign )
        // InternalXcore.g:3884:9: ruleOpMultiAssign
        {
        pushFollow(FOLLOW_2);
        ruleOpMultiAssign();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred4_InternalXcore

    // $ANTLR start synpred5_InternalXcore
    public final void synpred5_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:4073:5: ( ( () ( ( ruleOpOr ) ) ) )
        // InternalXcore.g:4073:6: ( () ( ( ruleOpOr ) ) )
        {
        // InternalXcore.g:4073:6: ( () ( ( ruleOpOr ) ) )
        // InternalXcore.g:4074:6: () ( ( ruleOpOr ) )
        {
        // InternalXcore.g:4074:6: ()
        // InternalXcore.g:4075:6: 
        {
        }

        // InternalXcore.g:4076:6: ( ( ruleOpOr ) )
        // InternalXcore.g:4077:7: ( ruleOpOr )
        {
        // InternalXcore.g:4077:7: ( ruleOpOr )
        // InternalXcore.g:4078:8: ruleOpOr
        {
        pushFollow(FOLLOW_2);
        ruleOpOr();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred5_InternalXcore

    // $ANTLR start synpred6_InternalXcore
    public final void synpred6_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:4180:5: ( ( () ( ( ruleOpAnd ) ) ) )
        // InternalXcore.g:4180:6: ( () ( ( ruleOpAnd ) ) )
        {
        // InternalXcore.g:4180:6: ( () ( ( ruleOpAnd ) ) )
        // InternalXcore.g:4181:6: () ( ( ruleOpAnd ) )
        {
        // InternalXcore.g:4181:6: ()
        // InternalXcore.g:4182:6: 
        {
        }

        // InternalXcore.g:4183:6: ( ( ruleOpAnd ) )
        // InternalXcore.g:4184:7: ( ruleOpAnd )
        {
        // InternalXcore.g:4184:7: ( ruleOpAnd )
        // InternalXcore.g:4185:8: ruleOpAnd
        {
        pushFollow(FOLLOW_2);
        ruleOpAnd();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred6_InternalXcore

    // $ANTLR start synpred7_InternalXcore
    public final void synpred7_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:4287:5: ( ( () ( ( ruleOpEquality ) ) ) )
        // InternalXcore.g:4287:6: ( () ( ( ruleOpEquality ) ) )
        {
        // InternalXcore.g:4287:6: ( () ( ( ruleOpEquality ) ) )
        // InternalXcore.g:4288:6: () ( ( ruleOpEquality ) )
        {
        // InternalXcore.g:4288:6: ()
        // InternalXcore.g:4289:6: 
        {
        }

        // InternalXcore.g:4290:6: ( ( ruleOpEquality ) )
        // InternalXcore.g:4291:7: ( ruleOpEquality )
        {
        // InternalXcore.g:4291:7: ( ruleOpEquality )
        // InternalXcore.g:4292:8: ruleOpEquality
        {
        pushFollow(FOLLOW_2);
        ruleOpEquality();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred7_InternalXcore

    // $ANTLR start synpred8_InternalXcore
    public final void synpred8_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:4415:6: ( ( () 'instanceof' ) )
        // InternalXcore.g:4415:7: ( () 'instanceof' )
        {
        // InternalXcore.g:4415:7: ( () 'instanceof' )
        // InternalXcore.g:4416:7: () 'instanceof'
        {
        // InternalXcore.g:4416:7: ()
        // InternalXcore.g:4417:7: 
        {
        }

        match(input,82,FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred8_InternalXcore

    // $ANTLR start synpred9_InternalXcore
    public final void synpred9_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:4458:6: ( ( () ( ( ruleOpCompare ) ) ) )
        // InternalXcore.g:4458:7: ( () ( ( ruleOpCompare ) ) )
        {
        // InternalXcore.g:4458:7: ( () ( ( ruleOpCompare ) ) )
        // InternalXcore.g:4459:7: () ( ( ruleOpCompare ) )
        {
        // InternalXcore.g:4459:7: ()
        // InternalXcore.g:4460:7: 
        {
        }

        // InternalXcore.g:4461:7: ( ( ruleOpCompare ) )
        // InternalXcore.g:4462:8: ( ruleOpCompare )
        {
        // InternalXcore.g:4462:8: ( ruleOpCompare )
        // InternalXcore.g:4463:9: ruleOpCompare
        {
        pushFollow(FOLLOW_2);
        ruleOpCompare();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred9_InternalXcore

    // $ANTLR start synpred10_InternalXcore
    public final void synpred10_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:4593:5: ( ( () ( ( ruleOpOther ) ) ) )
        // InternalXcore.g:4593:6: ( () ( ( ruleOpOther ) ) )
        {
        // InternalXcore.g:4593:6: ( () ( ( ruleOpOther ) ) )
        // InternalXcore.g:4594:6: () ( ( ruleOpOther ) )
        {
        // InternalXcore.g:4594:6: ()
        // InternalXcore.g:4595:6: 
        {
        }

        // InternalXcore.g:4596:6: ( ( ruleOpOther ) )
        // InternalXcore.g:4597:7: ( ruleOpOther )
        {
        // InternalXcore.g:4597:7: ( ruleOpOther )
        // InternalXcore.g:4598:8: ruleOpOther
        {
        pushFollow(FOLLOW_2);
        ruleOpOther();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred10_InternalXcore

    // $ANTLR start synpred11_InternalXcore
    public final void synpred11_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:4713:6: ( ( '>' '>' ) )
        // InternalXcore.g:4713:7: ( '>' '>' )
        {
        // InternalXcore.g:4713:7: ( '>' '>' )
        // InternalXcore.g:4714:7: '>' '>'
        {
        match(input,24,FOLLOW_86); if (state.failed) return ;
        match(input,24,FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred11_InternalXcore

    // $ANTLR start synpred12_InternalXcore
    public final void synpred12_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:4748:6: ( ( '<' '<' ) )
        // InternalXcore.g:4748:7: ( '<' '<' )
        {
        // InternalXcore.g:4748:7: ( '<' '<' )
        // InternalXcore.g:4749:7: '<' '<'
        {
        match(input,23,FOLLOW_77); if (state.failed) return ;
        match(input,23,FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred12_InternalXcore

    // $ANTLR start synpred13_InternalXcore
    public final void synpred13_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:4821:5: ( ( () ( ( ruleOpAdd ) ) ) )
        // InternalXcore.g:4821:6: ( () ( ( ruleOpAdd ) ) )
        {
        // InternalXcore.g:4821:6: ( () ( ( ruleOpAdd ) ) )
        // InternalXcore.g:4822:6: () ( ( ruleOpAdd ) )
        {
        // InternalXcore.g:4822:6: ()
        // InternalXcore.g:4823:6: 
        {
        }

        // InternalXcore.g:4824:6: ( ( ruleOpAdd ) )
        // InternalXcore.g:4825:7: ( ruleOpAdd )
        {
        // InternalXcore.g:4825:7: ( ruleOpAdd )
        // InternalXcore.g:4826:8: ruleOpAdd
        {
        pushFollow(FOLLOW_2);
        ruleOpAdd();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred13_InternalXcore

    // $ANTLR start synpred14_InternalXcore
    public final void synpred14_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:4936:5: ( ( () ( ( ruleOpMulti ) ) ) )
        // InternalXcore.g:4936:6: ( () ( ( ruleOpMulti ) ) )
        {
        // InternalXcore.g:4936:6: ( () ( ( ruleOpMulti ) ) )
        // InternalXcore.g:4937:6: () ( ( ruleOpMulti ) )
        {
        // InternalXcore.g:4937:6: ()
        // InternalXcore.g:4938:6: 
        {
        }

        // InternalXcore.g:4939:6: ( ( ruleOpMulti ) )
        // InternalXcore.g:4940:7: ( ruleOpMulti )
        {
        // InternalXcore.g:4940:7: ( ruleOpMulti )
        // InternalXcore.g:4941:8: ruleOpMulti
        {
        pushFollow(FOLLOW_2);
        ruleOpMulti();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred14_InternalXcore

    // $ANTLR start synpred15_InternalXcore
    public final void synpred15_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:5171:5: ( ( () 'as' ) )
        // InternalXcore.g:5171:6: ( () 'as' )
        {
        // InternalXcore.g:5171:6: ( () 'as' )
        // InternalXcore.g:5172:6: () 'as'
        {
        // InternalXcore.g:5172:6: ()
        // InternalXcore.g:5173:6: 
        {
        }

        match(input,21,FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred15_InternalXcore

    // $ANTLR start synpred16_InternalXcore
    public final void synpred16_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:5239:4: ( ( () ( ( ruleOpPostfix ) ) ) )
        // InternalXcore.g:5239:5: ( () ( ( ruleOpPostfix ) ) )
        {
        // InternalXcore.g:5239:5: ( () ( ( ruleOpPostfix ) ) )
        // InternalXcore.g:5240:5: () ( ( ruleOpPostfix ) )
        {
        // InternalXcore.g:5240:5: ()
        // InternalXcore.g:5241:5: 
        {
        }

        // InternalXcore.g:5242:5: ( ( ruleOpPostfix ) )
        // InternalXcore.g:5243:6: ( ruleOpPostfix )
        {
        // InternalXcore.g:5243:6: ( ruleOpPostfix )
        // InternalXcore.g:5244:7: ruleOpPostfix
        {
        pushFollow(FOLLOW_2);
        ruleOpPostfix();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred16_InternalXcore

    // $ANTLR start synpred17_InternalXcore
    public final void synpred17_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:5335:6: ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )
        // InternalXcore.g:5335:7: ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign )
        {
        // InternalXcore.g:5335:7: ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign )
        // InternalXcore.g:5336:7: () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign
        {
        // InternalXcore.g:5336:7: ()
        // InternalXcore.g:5337:7: 
        {
        }

        // InternalXcore.g:5338:7: ( '.' | ( ( '::' ) ) )
        int alt188=2;
        int LA188_0 = input.LA(1);

        if ( (LA188_0==67) ) {
            alt188=1;
        }
        else if ( (LA188_0==94) ) {
            alt188=2;
        }
        else {
            if (state.backtracking>0) {state.failed=true; return ;}
            NoViableAltException nvae =
                new NoViableAltException("", 188, 0, input);

            throw nvae;
        }
        switch (alt188) {
            case 1 :
                // InternalXcore.g:5339:8: '.'
                {
                match(input,67,FOLLOW_93); if (state.failed) return ;

                }
                break;
            case 2 :
                // InternalXcore.g:5341:8: ( ( '::' ) )
                {
                // InternalXcore.g:5341:8: ( ( '::' ) )
                // InternalXcore.g:5342:9: ( '::' )
                {
                // InternalXcore.g:5342:9: ( '::' )
                // InternalXcore.g:5343:10: '::'
                {
                match(input,94,FOLLOW_93); if (state.failed) return ;

                }


                }


                }
                break;

        }

        // InternalXcore.g:5347:7: ( ( ruleFeatureCallID ) )
        // InternalXcore.g:5348:8: ( ruleFeatureCallID )
        {
        // InternalXcore.g:5348:8: ( ruleFeatureCallID )
        // InternalXcore.g:5349:9: ruleFeatureCallID
        {
        pushFollow(FOLLOW_11);
        ruleFeatureCallID();

        state._fsp--;
        if (state.failed) return ;

        }


        }

        pushFollow(FOLLOW_2);
        ruleOpSingleAssign();

        state._fsp--;
        if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred17_InternalXcore

    // $ANTLR start synpred18_InternalXcore
    public final void synpred18_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:5432:6: ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )
        // InternalXcore.g:5432:7: ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) )
        {
        // InternalXcore.g:5432:7: ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) )
        // InternalXcore.g:5433:7: () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) )
        {
        // InternalXcore.g:5433:7: ()
        // InternalXcore.g:5434:7: 
        {
        }

        // InternalXcore.g:5435:7: ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) )
        int alt189=3;
        switch ( input.LA(1) ) {
        case 67:
            {
            alt189=1;
            }
            break;
        case 95:
            {
            alt189=2;
            }
            break;
        case 94:
            {
            alt189=3;
            }
            break;
        default:
            if (state.backtracking>0) {state.failed=true; return ;}
            NoViableAltException nvae =
                new NoViableAltException("", 189, 0, input);

            throw nvae;
        }

        switch (alt189) {
            case 1 :
                // InternalXcore.g:5436:8: '.'
                {
                match(input,67,FOLLOW_2); if (state.failed) return ;

                }
                break;
            case 2 :
                // InternalXcore.g:5438:8: ( ( '?.' ) )
                {
                // InternalXcore.g:5438:8: ( ( '?.' ) )
                // InternalXcore.g:5439:9: ( '?.' )
                {
                // InternalXcore.g:5439:9: ( '?.' )
                // InternalXcore.g:5440:10: '?.'
                {
                match(input,95,FOLLOW_2); if (state.failed) return ;

                }


                }


                }
                break;
            case 3 :
                // InternalXcore.g:5444:8: ( ( '::' ) )
                {
                // InternalXcore.g:5444:8: ( ( '::' ) )
                // InternalXcore.g:5445:9: ( '::' )
                {
                // InternalXcore.g:5445:9: ( '::' )
                // InternalXcore.g:5446:10: '::'
                {
                match(input,94,FOLLOW_2); if (state.failed) return ;

                }


                }


                }
                break;

        }


        }


        }
    }
    // $ANTLR end synpred18_InternalXcore

    // $ANTLR start synpred19_InternalXcore
    public final void synpred19_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:5570:7: ( ( '(' ) )
        // InternalXcore.g:5570:8: ( '(' )
        {
        // InternalXcore.g:5570:8: ( '(' )
        // InternalXcore.g:5571:8: '('
        {
        match(input,15,FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred19_InternalXcore

    // $ANTLR start synpred20_InternalXcore
    public final void synpred20_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:5589:8: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )
        // InternalXcore.g:5589:9: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) )
        {
        // InternalXcore.g:5589:9: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) )
        // InternalXcore.g:5590:9: () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) )
        {
        // InternalXcore.g:5590:9: ()
        // InternalXcore.g:5591:9: 
        {
        }

        // InternalXcore.g:5592:9: ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )?
        int alt191=2;
        int LA191_0 = input.LA(1);

        if ( (LA191_0==RULE_ID||LA191_0==15||(LA191_0>=44 && LA191_0<=47)||LA191_0==56||LA191_0==85) ) {
            alt191=1;
        }
        switch (alt191) {
            case 1 :
                // InternalXcore.g:5593:10: ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )*
                {
                // InternalXcore.g:5593:10: ( ( ruleJvmFormalParameter ) )
                // InternalXcore.g:5594:11: ( ruleJvmFormalParameter )
                {
                // InternalXcore.g:5594:11: ( ruleJvmFormalParameter )
                // InternalXcore.g:5595:12: ruleJvmFormalParameter
                {
                pushFollow(FOLLOW_105);
                ruleJvmFormalParameter();

                state._fsp--;
                if (state.failed) return ;

                }


                }

                // InternalXcore.g:5598:10: ( ',' ( ( ruleJvmFormalParameter ) ) )*
                loop190:
                do {
                    int alt190=2;
                    int LA190_0 = input.LA(1);

                    if ( (LA190_0==16) ) {
                        alt190=1;
                    }


                    switch (alt190) {
                	case 1 :
                	    // InternalXcore.g:5599:11: ',' ( ( ruleJvmFormalParameter ) )
                	    {
                	    match(input,16,FOLLOW_20); if (state.failed) return ;
                	    // InternalXcore.g:5600:11: ( ( ruleJvmFormalParameter ) )
                	    // InternalXcore.g:5601:12: ( ruleJvmFormalParameter )
                	    {
                	    // InternalXcore.g:5601:12: ( ruleJvmFormalParameter )
                	    // InternalXcore.g:5602:13: ruleJvmFormalParameter
                	    {
                	    pushFollow(FOLLOW_105);
                	    ruleJvmFormalParameter();

                	    state._fsp--;
                	    if (state.failed) return ;

                	    }


                	    }


                	    }
                	    break;

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


                }
                break;

        }

        // InternalXcore.g:5607:9: ( ( '|' ) )
        // InternalXcore.g:5608:10: ( '|' )
        {
        // InternalXcore.g:5608:10: ( '|' )
        // InternalXcore.g:5609:11: '|'
        {
        match(input,97,FOLLOW_2); if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred20_InternalXcore

    // $ANTLR start synpred21_InternalXcore
    public final void synpred21_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:5686:6: ( ( () '[' ) )
        // InternalXcore.g:5686:7: ( () '[' )
        {
        // InternalXcore.g:5686:7: ( () '[' )
        // InternalXcore.g:5687:7: () '['
        {
        // InternalXcore.g:5687:7: ()
        // InternalXcore.g:5688:7: 
        {
        }

        match(input,59,FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred21_InternalXcore

    // $ANTLR start synpred22_InternalXcore
    public final void synpred22_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:5759:4: ( ( () 'synchronized' '(' ) )
        // InternalXcore.g:5759:5: ( () 'synchronized' '(' )
        {
        // InternalXcore.g:5759:5: ( () 'synchronized' '(' )
        // InternalXcore.g:5760:5: () 'synchronized' '('
        {
        // InternalXcore.g:5760:5: ()
        // InternalXcore.g:5761:5: 
        {
        }

        match(input,118,FOLLOW_56); if (state.failed) return ;
        match(input,15,FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred22_InternalXcore

    // $ANTLR start synpred23_InternalXcore
    public final void synpred23_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:5804:4: ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )
        // InternalXcore.g:5804:5: ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' )
        {
        // InternalXcore.g:5804:5: ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' )
        // InternalXcore.g:5805:5: () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':'
        {
        // InternalXcore.g:5805:5: ()
        // InternalXcore.g:5806:5: 
        {
        }

        match(input,104,FOLLOW_56); if (state.failed) return ;
        match(input,15,FOLLOW_20); if (state.failed) return ;
        // InternalXcore.g:5809:5: ( ( ruleJvmFormalParameter ) )
        // InternalXcore.g:5810:6: ( ruleJvmFormalParameter )
        {
        // InternalXcore.g:5810:6: ( ruleJvmFormalParameter )
        // InternalXcore.g:5811:7: ruleJvmFormalParameter
        {
        pushFollow(FOLLOW_110);
        ruleJvmFormalParameter();

        state._fsp--;
        if (state.failed) return ;

        }


        }

        match(input,101,FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred23_InternalXcore

    // $ANTLR start synpred24_InternalXcore
    public final void synpred24_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:5918:4: ( ( () '[' ) )
        // InternalXcore.g:5918:5: ( () '[' )
        {
        // InternalXcore.g:5918:5: ( () '[' )
        // InternalXcore.g:5919:5: () '['
        {
        // InternalXcore.g:5919:5: ()
        // InternalXcore.g:5920:5: 
        {
        }

        match(input,59,FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred24_InternalXcore

    // $ANTLR start synpred26_InternalXcore
    public final void synpred26_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:6223:4: ( ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )
        // InternalXcore.g:6223:5: ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) )
        {
        // InternalXcore.g:6223:5: ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) )
        // InternalXcore.g:6224:5: ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) )
        {
        // InternalXcore.g:6224:5: ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )?
        int alt193=2;
        int LA193_0 = input.LA(1);

        if ( (LA193_0==RULE_ID||LA193_0==15||(LA193_0>=44 && LA193_0<=47)||LA193_0==56||LA193_0==85) ) {
            alt193=1;
        }
        switch (alt193) {
            case 1 :
                // InternalXcore.g:6225:6: ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )*
                {
                // InternalXcore.g:6225:6: ( ( ruleJvmFormalParameter ) )
                // InternalXcore.g:6226:7: ( ruleJvmFormalParameter )
                {
                // InternalXcore.g:6226:7: ( ruleJvmFormalParameter )
                // InternalXcore.g:6227:8: ruleJvmFormalParameter
                {
                pushFollow(FOLLOW_105);
                ruleJvmFormalParameter();

                state._fsp--;
                if (state.failed) return ;

                }


                }

                // InternalXcore.g:6230:6: ( ',' ( ( ruleJvmFormalParameter ) ) )*
                loop192:
                do {
                    int alt192=2;
                    int LA192_0 = input.LA(1);

                    if ( (LA192_0==16) ) {
                        alt192=1;
                    }


                    switch (alt192) {
                	case 1 :
                	    // InternalXcore.g:6231:7: ',' ( ( ruleJvmFormalParameter ) )
                	    {
                	    match(input,16,FOLLOW_20); if (state.failed) return ;
                	    // InternalXcore.g:6232:7: ( ( ruleJvmFormalParameter ) )
                	    // InternalXcore.g:6233:8: ( ruleJvmFormalParameter )
                	    {
                	    // InternalXcore.g:6233:8: ( ruleJvmFormalParameter )
                	    // InternalXcore.g:6234:9: ruleJvmFormalParameter
                	    {
                	    pushFollow(FOLLOW_105);
                	    ruleJvmFormalParameter();

                	    state._fsp--;
                	    if (state.failed) return ;

                	    }


                	    }


                	    }
                	    break;

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


                }
                break;

        }

        // InternalXcore.g:6239:5: ( ( '|' ) )
        // InternalXcore.g:6240:6: ( '|' )
        {
        // InternalXcore.g:6240:6: ( '|' )
        // InternalXcore.g:6241:7: '|'
        {
        match(input,97,FOLLOW_2); if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred26_InternalXcore

    // $ANTLR start synpred28_InternalXcore
    public final void synpred28_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:6632:5: ( 'else' )
        // InternalXcore.g:6632:6: 'else'
        {
        match(input,99,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred28_InternalXcore

    // $ANTLR start synpred29_InternalXcore
    public final void synpred29_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:6691:6: ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )
        // InternalXcore.g:6691:7: ( '(' ( ( ruleJvmFormalParameter ) ) ':' )
        {
        // InternalXcore.g:6691:7: ( '(' ( ( ruleJvmFormalParameter ) ) ':' )
        // InternalXcore.g:6692:7: '(' ( ( ruleJvmFormalParameter ) ) ':'
        {
        match(input,15,FOLLOW_20); if (state.failed) return ;
        // InternalXcore.g:6693:7: ( ( ruleJvmFormalParameter ) )
        // InternalXcore.g:6694:8: ( ruleJvmFormalParameter )
        {
        // InternalXcore.g:6694:8: ( ruleJvmFormalParameter )
        // InternalXcore.g:6695:9: ruleJvmFormalParameter
        {
        pushFollow(FOLLOW_110);
        ruleJvmFormalParameter();

        state._fsp--;
        if (state.failed) return ;

        }


        }

        match(input,101,FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred29_InternalXcore

    // $ANTLR start synpred30_InternalXcore
    public final void synpred30_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:6758:6: ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )
        // InternalXcore.g:6758:7: ( ( ( ruleJvmFormalParameter ) ) ':' )
        {
        // InternalXcore.g:6758:7: ( ( ( ruleJvmFormalParameter ) ) ':' )
        // InternalXcore.g:6759:7: ( ( ruleJvmFormalParameter ) ) ':'
        {
        // InternalXcore.g:6759:7: ( ( ruleJvmFormalParameter ) )
        // InternalXcore.g:6760:8: ( ruleJvmFormalParameter )
        {
        // InternalXcore.g:6760:8: ( ruleJvmFormalParameter )
        // InternalXcore.g:6761:9: ruleJvmFormalParameter
        {
        pushFollow(FOLLOW_110);
        ruleJvmFormalParameter();

        state._fsp--;
        if (state.failed) return ;

        }


        }

        match(input,101,FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred30_InternalXcore

    // $ANTLR start synpred32_InternalXcore
    public final void synpred32_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:7515:5: ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )
        // InternalXcore.g:7515:6: ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) )
        {
        // InternalXcore.g:7515:6: ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) )
        // InternalXcore.g:7516:6: ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) )
        {
        // InternalXcore.g:7516:6: ( ( ruleJvmTypeReference ) )
        // InternalXcore.g:7517:7: ( ruleJvmTypeReference )
        {
        // InternalXcore.g:7517:7: ( ruleJvmTypeReference )
        // InternalXcore.g:7518:8: ruleJvmTypeReference
        {
        pushFollow(FOLLOW_4);
        ruleJvmTypeReference();

        state._fsp--;
        if (state.failed) return ;

        }


        }

        // InternalXcore.g:7521:6: ( ( ruleValidID ) )
        // InternalXcore.g:7522:7: ( ruleValidID )
        {
        // InternalXcore.g:7522:7: ( ruleValidID )
        // InternalXcore.g:7523:8: ruleValidID
        {
        pushFollow(FOLLOW_2);
        ruleValidID();

        state._fsp--;
        if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred32_InternalXcore

    // $ANTLR start synpred33_InternalXcore
    public final void synpred33_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:7827:5: ( ( '(' ) )
        // InternalXcore.g:7827:6: ( '(' )
        {
        // InternalXcore.g:7827:6: ( '(' )
        // InternalXcore.g:7828:6: '('
        {
        match(input,15,FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred33_InternalXcore

    // $ANTLR start synpred34_InternalXcore
    public final void synpred34_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:7846:6: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )
        // InternalXcore.g:7846:7: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) )
        {
        // InternalXcore.g:7846:7: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) )
        // InternalXcore.g:7847:7: () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) )
        {
        // InternalXcore.g:7847:7: ()
        // InternalXcore.g:7848:7: 
        {
        }

        // InternalXcore.g:7849:7: ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )?
        int alt197=2;
        int LA197_0 = input.LA(1);

        if ( (LA197_0==RULE_ID||LA197_0==15||(LA197_0>=44 && LA197_0<=47)||LA197_0==56||LA197_0==85) ) {
            alt197=1;
        }
        switch (alt197) {
            case 1 :
                // InternalXcore.g:7850:8: ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )*
                {
                // InternalXcore.g:7850:8: ( ( ruleJvmFormalParameter ) )
                // InternalXcore.g:7851:9: ( ruleJvmFormalParameter )
                {
                // InternalXcore.g:7851:9: ( ruleJvmFormalParameter )
                // InternalXcore.g:7852:10: ruleJvmFormalParameter
                {
                pushFollow(FOLLOW_105);
                ruleJvmFormalParameter();

                state._fsp--;
                if (state.failed) return ;

                }


                }

                // InternalXcore.g:7855:8: ( ',' ( ( ruleJvmFormalParameter ) ) )*
                loop196:
                do {
                    int alt196=2;
                    int LA196_0 = input.LA(1);

                    if ( (LA196_0==16) ) {
                        alt196=1;
                    }


                    switch (alt196) {
                	case 1 :
                	    // InternalXcore.g:7856:9: ',' ( ( ruleJvmFormalParameter ) )
                	    {
                	    match(input,16,FOLLOW_20); if (state.failed) return ;
                	    // InternalXcore.g:7857:9: ( ( ruleJvmFormalParameter ) )
                	    // InternalXcore.g:7858:10: ( ruleJvmFormalParameter )
                	    {
                	    // InternalXcore.g:7858:10: ( ruleJvmFormalParameter )
                	    // InternalXcore.g:7859:11: ruleJvmFormalParameter
                	    {
                	    pushFollow(FOLLOW_105);
                	    ruleJvmFormalParameter();

                	    state._fsp--;
                	    if (state.failed) return ;

                	    }


                	    }


                	    }
                	    break;

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


                }
                break;

        }

        // InternalXcore.g:7864:7: ( ( '|' ) )
        // InternalXcore.g:7865:8: ( '|' )
        {
        // InternalXcore.g:7865:8: ( '|' )
        // InternalXcore.g:7866:9: '|'
        {
        match(input,97,FOLLOW_2); if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred34_InternalXcore

    // $ANTLR start synpred35_InternalXcore
    public final void synpred35_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:7943:4: ( ( () '[' ) )
        // InternalXcore.g:7943:5: ( () '[' )
        {
        // InternalXcore.g:7943:5: ( () '[' )
        // InternalXcore.g:7944:5: () '['
        {
        // InternalXcore.g:7944:5: ()
        // InternalXcore.g:7945:5: 
        {
        }

        match(input,59,FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred35_InternalXcore

    // $ANTLR start synpred36_InternalXcore
    public final void synpred36_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:8050:5: ( '<' )
        // InternalXcore.g:8050:6: '<'
        {
        match(input,23,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred36_InternalXcore

    // $ANTLR start synpred37_InternalXcore
    public final void synpred37_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:8107:5: ( ( '(' ) )
        // InternalXcore.g:8107:6: ( '(' )
        {
        // InternalXcore.g:8107:6: ( '(' )
        // InternalXcore.g:8108:6: '('
        {
        match(input,15,FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred37_InternalXcore

    // $ANTLR start synpred38_InternalXcore
    public final void synpred38_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:8126:6: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )
        // InternalXcore.g:8126:7: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) )
        {
        // InternalXcore.g:8126:7: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) )
        // InternalXcore.g:8127:7: () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) )
        {
        // InternalXcore.g:8127:7: ()
        // InternalXcore.g:8128:7: 
        {
        }

        // InternalXcore.g:8129:7: ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )?
        int alt199=2;
        int LA199_0 = input.LA(1);

        if ( (LA199_0==RULE_ID||LA199_0==15||(LA199_0>=44 && LA199_0<=47)||LA199_0==56||LA199_0==85) ) {
            alt199=1;
        }
        switch (alt199) {
            case 1 :
                // InternalXcore.g:8130:8: ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )*
                {
                // InternalXcore.g:8130:8: ( ( ruleJvmFormalParameter ) )
                // InternalXcore.g:8131:9: ( ruleJvmFormalParameter )
                {
                // InternalXcore.g:8131:9: ( ruleJvmFormalParameter )
                // InternalXcore.g:8132:10: ruleJvmFormalParameter
                {
                pushFollow(FOLLOW_105);
                ruleJvmFormalParameter();

                state._fsp--;
                if (state.failed) return ;

                }


                }

                // InternalXcore.g:8135:8: ( ',' ( ( ruleJvmFormalParameter ) ) )*
                loop198:
                do {
                    int alt198=2;
                    int LA198_0 = input.LA(1);

                    if ( (LA198_0==16) ) {
                        alt198=1;
                    }


                    switch (alt198) {
                	case 1 :
                	    // InternalXcore.g:8136:9: ',' ( ( ruleJvmFormalParameter ) )
                	    {
                	    match(input,16,FOLLOW_20); if (state.failed) return ;
                	    // InternalXcore.g:8137:9: ( ( ruleJvmFormalParameter ) )
                	    // InternalXcore.g:8138:10: ( ruleJvmFormalParameter )
                	    {
                	    // InternalXcore.g:8138:10: ( ruleJvmFormalParameter )
                	    // InternalXcore.g:8139:11: ruleJvmFormalParameter
                	    {
                	    pushFollow(FOLLOW_105);
                	    ruleJvmFormalParameter();

                	    state._fsp--;
                	    if (state.failed) return ;

                	    }


                	    }


                	    }
                	    break;

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


                }
                break;

        }

        // InternalXcore.g:8144:7: ( ( '|' ) )
        // InternalXcore.g:8145:8: ( '|' )
        {
        // InternalXcore.g:8145:8: ( '|' )
        // InternalXcore.g:8146:9: '|'
        {
        match(input,97,FOLLOW_2); if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred38_InternalXcore

    // $ANTLR start synpred39_InternalXcore
    public final void synpred39_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:8223:4: ( ( () '[' ) )
        // InternalXcore.g:8223:5: ( () '[' )
        {
        // InternalXcore.g:8223:5: ( () '[' )
        // InternalXcore.g:8224:5: () '['
        {
        // InternalXcore.g:8224:5: ()
        // InternalXcore.g:8225:5: 
        {
        }

        match(input,59,FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred39_InternalXcore

    // $ANTLR start synpred40_InternalXcore
    public final void synpred40_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:8566:4: ( 'get' | 'isSet' | 'set' | 'unset' | 'void' | 'abstract' | 'annotation' | 'as' | 'class' | 'container' | 'contains' | 'convert' | 'create' | 'derived' | 'enum' | 'extends' | 'extension' | 'id' | 'import' | 'keys' | 'interface' | 'local' | 'op' | 'opposite' | 'package' | 'readonly' | 'refers' | 'resolving' | 'static' | 'throws' | 'transient' | 'unique' | 'unordered' | 'unsettable' | 'volatile' | 'wraps' | '!' | '-' | '+' | 'new' | '{' | 'switch' | 'synchronized' | '<' | 'super' | '#' | '[' | 'false' | 'true' | 'null' | 'typeof' | 'if' | 'for' | 'while' | 'do' | 'throw' | 'return' | 'try' | '(' | RULE_ID | RULE_HEX | RULE_INT | RULE_DECIMAL | RULE_STRING )
        // InternalXcore.g:
        {
        if ( (input.LA(1)>=RULE_STRING && input.LA(1)<=RULE_DECIMAL)||input.LA(1)==13||input.LA(1)==15||(input.LA(1)>=19 && input.LA(1)<=21)||input.LA(1)==23||(input.LA(1)>=25 && input.LA(1)<=29)||(input.LA(1)>=31 && input.LA(1)<=57)||input.LA(1)==59||input.LA(1)==62||input.LA(1)==66||(input.LA(1)>=68 && input.LA(1)<=69)||input.LA(1)==91||input.LA(1)==96||input.LA(1)==98||input.LA(1)==100||(input.LA(1)>=104 && input.LA(1)<=106)||(input.LA(1)>=109 && input.LA(1)<=116)||input.LA(1)==118 ) {
            input.consume();
            state.errorRecovery=false;state.failed=false;
        }
        else {
            if (state.backtracking>0) {state.failed=true; return ;}
            MismatchedSetException mse = new MismatchedSetException(null,input);
            throw mse;
        }


        }
    }
    // $ANTLR end synpred40_InternalXcore

    // $ANTLR start synpred41_InternalXcore
    public final void synpred41_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:8637:6: ( 'catch' )
        // InternalXcore.g:8637:7: 'catch'
        {
        match(input,119,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred41_InternalXcore

    // $ANTLR start synpred42_InternalXcore
    public final void synpred42_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:8658:7: ( 'finally' )
        // InternalXcore.g:8658:8: 'finally'
        {
        match(input,117,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred42_InternalXcore

    // $ANTLR start synpred45_InternalXcore
    public final void synpred45_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:8902:5: ( '.' )
        // InternalXcore.g:8902:6: '.'
        {
        match(input,67,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred45_InternalXcore

    // $ANTLR start synpred46_InternalXcore
    public final void synpred46_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:9028:5: ( ( () ruleArrayBrackets ) )
        // InternalXcore.g:9028:6: ( () ruleArrayBrackets )
        {
        // InternalXcore.g:9028:6: ( () ruleArrayBrackets )
        // InternalXcore.g:9029:6: () ruleArrayBrackets
        {
        // InternalXcore.g:9029:6: ()
        // InternalXcore.g:9030:6: 
        {
        }

        pushFollow(FOLLOW_2);
        ruleArrayBrackets();

        state._fsp--;
        if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred46_InternalXcore

    // $ANTLR start synpred47_InternalXcore
    public final void synpred47_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:9225:5: ( '<' )
        // InternalXcore.g:9225:6: '<'
        {
        match(input,23,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred47_InternalXcore

    // $ANTLR start synpred48_InternalXcore
    public final void synpred48_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:9281:6: ( ( () '.' ) )
        // InternalXcore.g:9281:7: ( () '.' )
        {
        // InternalXcore.g:9281:7: ( () '.' )
        // InternalXcore.g:9282:7: () '.'
        {
        // InternalXcore.g:9282:7: ()
        // InternalXcore.g:9283:7: 
        {
        }

        match(input,67,FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred48_InternalXcore

    // $ANTLR start synpred49_InternalXcore
    public final void synpred49_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:9319:7: ( '<' )
        // InternalXcore.g:9319:8: '<'
        {
        match(input,23,FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred49_InternalXcore

    // Delegated rules

    public final boolean synpred15_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred15_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred9_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred9_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred49_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred49_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred23_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred23_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred28_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred28_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred21_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred21_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred42_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred42_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred36_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred36_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred18_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred18_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred39_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred39_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred47_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred47_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred13_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred13_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred34_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred34_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred40_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred40_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred7_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred7_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred24_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred24_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred32_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred32_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred45_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred45_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred5_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred5_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred26_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred26_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred11_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred11_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred30_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred30_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred29_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred29_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred3_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred3_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred8_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred8_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred14_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred14_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred35_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred35_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred37_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred37_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred22_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred22_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred16_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred16_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred1_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred1_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred33_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred33_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred41_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred41_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred12_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred12_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred20_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred20_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred17_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred17_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred38_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred38_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred4_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred4_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred48_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred48_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred19_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred19_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred10_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred10_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred6_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred6_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred46_InternalXcore() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred46_InternalXcore_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }


    protected DFA7 dfa7 = new DFA7(this);
    protected DFA8 dfa8 = new DFA8(this);
    protected DFA30 dfa30 = new DFA30(this);
    protected DFA32 dfa32 = new DFA32(this);
    protected DFA35 dfa35 = new DFA35(this);
    protected DFA46 dfa46 = new DFA46(this);
    protected DFA82 dfa82 = new DFA82(this);
    protected DFA81 dfa81 = new DFA81(this);
    protected DFA91 dfa91 = new DFA91(this);
    protected DFA94 dfa94 = new DFA94(this);
    protected DFA110 dfa110 = new DFA110(this);
    protected DFA109 dfa109 = new DFA109(this);
    protected DFA111 dfa111 = new DFA111(this);
    protected DFA113 dfa113 = new DFA113(this);
    protected DFA122 dfa122 = new DFA122(this);
    protected DFA129 dfa129 = new DFA129(this);
    protected DFA128 dfa128 = new DFA128(this);
    protected DFA142 dfa142 = new DFA142(this);
    protected DFA149 dfa149 = new DFA149(this);
    protected DFA148 dfa148 = new DFA148(this);
    protected DFA150 dfa150 = new DFA150(this);
    protected DFA153 dfa153 = new DFA153(this);
    protected DFA156 dfa156 = new DFA156(this);
    protected DFA155 dfa155 = new DFA155(this);
    protected DFA157 dfa157 = new DFA157(this);
    protected DFA160 dfa160 = new DFA160(this);
    protected DFA164 dfa164 = new DFA164(this);
    protected DFA178 dfa178 = new DFA178(this);
    protected DFA177 dfa177 = new DFA177(this);
    protected DFA176 dfa176 = new DFA176(this);
    protected DFA185 dfa185 = new DFA185(this);
    static final String dfa_1s = "\20\uffff";
    static final String dfa_2s = "\1\uffff\6\10\2\uffff\6\10\1\uffff";
    static final String dfa_3s = "\1\5\6\16\1\5\1\uffff\6\16\1\uffff";
    static final String dfa_4s = "\1\70\6\103\1\75\1\uffff\6\103\1\uffff";
    static final String dfa_5s = "\10\uffff\1\2\6\uffff\1\1";
    static final String dfa_6s = "\20\uffff}>";
    static final String[] dfa_7s = {
            "\1\1\46\uffff\1\2\1\4\1\3\1\5\10\uffff\1\6",
            "\1\10\4\uffff\2\10\1\uffff\1\10\5\uffff\1\10\3\uffff\3\10\40\uffff\1\7",
            "\1\10\4\uffff\2\10\1\uffff\1\10\5\uffff\1\10\3\uffff\3\10\40\uffff\1\7",
            "\1\10\4\uffff\2\10\1\uffff\1\10\5\uffff\1\10\3\uffff\3\10\40\uffff\1\7",
            "\1\10\4\uffff\2\10\1\uffff\1\10\5\uffff\1\10\3\uffff\3\10\40\uffff\1\7",
            "\1\10\4\uffff\2\10\1\uffff\1\10\5\uffff\1\10\3\uffff\3\10\40\uffff\1\7",
            "\1\10\4\uffff\2\10\1\uffff\1\10\5\uffff\1\10\3\uffff\3\10\40\uffff\1\7",
            "\1\11\46\uffff\1\12\1\14\1\13\1\15\10\uffff\1\16\4\uffff\1\17",
            "",
            "\1\10\4\uffff\2\10\1\uffff\1\10\5\uffff\1\10\3\uffff\3\10\40\uffff\1\7",
            "\1\10\4\uffff\2\10\1\uffff\1\10\5\uffff\1\10\3\uffff\3\10\40\uffff\1\7",
            "\1\10\4\uffff\2\10\1\uffff\1\10\5\uffff\1\10\3\uffff\3\10\40\uffff\1\7",
            "\1\10\4\uffff\2\10\1\uffff\1\10\5\uffff\1\10\3\uffff\3\10\40\uffff\1\7",
            "\1\10\4\uffff\2\10\1\uffff\1\10\5\uffff\1\10\3\uffff\3\10\40\uffff\1\7",
            "\1\10\4\uffff\2\10\1\uffff\1\10\5\uffff\1\10\3\uffff\3\10\40\uffff\1\7",
            ""
    };

    static final short[] dfa_1 = DFA.unpackEncodedString(dfa_1s);
    static final short[] dfa_2 = DFA.unpackEncodedString(dfa_2s);
    static final char[] dfa_3 = DFA.unpackEncodedStringToUnsignedChars(dfa_3s);
    static final char[] dfa_4 = DFA.unpackEncodedStringToUnsignedChars(dfa_4s);
    static final short[] dfa_5 = DFA.unpackEncodedString(dfa_5s);
    static final short[] dfa_6 = DFA.unpackEncodedString(dfa_6s);
    static final short[][] dfa_7 = unpackEncodedStringArray(dfa_7s);

    class DFA7 extends DFA {

        public DFA7(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 7;
            this.eot = dfa_1;
            this.eof = dfa_2;
            this.min = dfa_3;
            this.max = dfa_4;
            this.accept = dfa_5;
            this.special = dfa_6;
            this.transition = dfa_7;
        }
        public String getDescription() {
            return "377:3: ( ( (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard ) ) | ( ( ruleQualifiedName ) ) )";
        }
    }
    static final String dfa_8s = "\61\uffff";
    static final String dfa_9s = "\1\16\1\5\3\uffff\5\16\2\5\5\16\6\22\1\5\1\4\6\22\1\20\1\5\1\16\6\22\1\5\1\4\6\22\1\20";
    static final String dfa_10s = "\1\42\1\57\3\uffff\5\103\1\57\1\70\13\103\1\70\1\4\6\103\1\21\1\70\1\42\6\103\1\70\1\4\6\103\1\21";
    static final String dfa_11s = "\2\uffff\1\1\1\2\1\3\54\uffff";
    static final String dfa_12s = "\61\uffff}>";
    static final String[] dfa_13s = {
            "\1\1\7\uffff\1\3\5\uffff\1\4\3\uffff\3\2",
            "\1\5\46\uffff\1\6\1\10\1\7\1\11",
            "",
            "",
            "",
            "\1\1\1\13\6\uffff\1\3\5\uffff\1\4\3\uffff\3\2\40\uffff\1\12",
            "\1\1\1\13\6\uffff\1\3\5\uffff\1\4\3\uffff\3\2\40\uffff\1\12",
            "\1\1\1\13\6\uffff\1\3\5\uffff\1\4\3\uffff\3\2\40\uffff\1\12",
            "\1\1\1\13\6\uffff\1\3\5\uffff\1\4\3\uffff\3\2\40\uffff\1\12",
            "\1\1\1\13\6\uffff\1\3\5\uffff\1\4\3\uffff\3\2\40\uffff\1\12",
            "\1\14\46\uffff\1\15\1\17\1\16\1\20",
            "\1\21\46\uffff\1\22\1\24\1\23\1\25\10\uffff\1\26",
            "\1\1\1\13\6\uffff\1\3\5\uffff\1\4\3\uffff\3\2\40\uffff\1\12",
            "\1\1\1\13\6\uffff\1\3\5\uffff\1\4\3\uffff\3\2\40\uffff\1\12",
            "\1\1\1\13\6\uffff\1\3\5\uffff\1\4\3\uffff\3\2\40\uffff\1\12",
            "\1\1\1\13\6\uffff\1\3\5\uffff\1\4\3\uffff\3\2\40\uffff\1\12",
            "\1\1\1\13\6\uffff\1\3\5\uffff\1\4\3\uffff\3\2\40\uffff\1\12",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\31\46\uffff\1\32\1\34\1\33\1\35\10\uffff\1\36",
            "\1\37",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\40\1\41",
            "\1\42\46\uffff\1\43\1\45\1\44\1\46\10\uffff\1\47",
            "\1\1\7\uffff\1\3\5\uffff\1\4\3\uffff\3\2",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\52\46\uffff\1\53\1\55\1\54\1\56\10\uffff\1\57",
            "\1\60",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\40\1\41"
    };

    static final short[] dfa_8 = DFA.unpackEncodedString(dfa_8s);
    static final char[] dfa_9 = DFA.unpackEncodedStringToUnsignedChars(dfa_9s);
    static final char[] dfa_10 = DFA.unpackEncodedStringToUnsignedChars(dfa_10s);
    static final short[] dfa_11 = DFA.unpackEncodedString(dfa_11s);
    static final short[] dfa_12 = DFA.unpackEncodedString(dfa_12s);
    static final short[][] dfa_13 = unpackEncodedStringArray(dfa_13s);

    class DFA8 extends DFA {

        public DFA8(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 8;
            this.eot = dfa_8;
            this.eof = dfa_8;
            this.min = dfa_9;
            this.max = dfa_10;
            this.accept = dfa_11;
            this.special = dfa_12;
            this.transition = dfa_13;
        }
        public String getDescription() {
            return "510:2: (this_XClass_0= ruleXClass | this_XDataType_1= ruleXDataType | this_XEnum_2= ruleXEnum )";
        }
    }
    static final String dfa_14s = "\2\5\3\uffff\14\5\6\22\1\5\1\4\6\22\1\20\2\5\6\22\1\5\1\4\6\22\1\20";
    static final String dfa_15s = "\1\67\1\57\3\uffff\5\103\1\57\1\70\13\103\1\70\1\4\6\103\1\21\1\70\1\67\6\103\1\70\1\4\6\103\1\21";
    static final String[] dfa_16s = {
            "\1\3\10\uffff\1\1\25\uffff\14\3\5\4\2\uffff\1\2",
            "\1\5\46\uffff\1\6\1\10\1\7\1\11",
            "",
            "",
            "",
            "\1\3\10\uffff\1\1\1\13\24\uffff\14\3\5\4\2\uffff\1\2\13\uffff\1\12",
            "\1\3\10\uffff\1\1\1\13\24\uffff\14\3\5\4\2\uffff\1\2\13\uffff\1\12",
            "\1\3\10\uffff\1\1\1\13\24\uffff\14\3\5\4\2\uffff\1\2\13\uffff\1\12",
            "\1\3\10\uffff\1\1\1\13\24\uffff\14\3\5\4\2\uffff\1\2\13\uffff\1\12",
            "\1\3\10\uffff\1\1\1\13\24\uffff\14\3\5\4\2\uffff\1\2\13\uffff\1\12",
            "\1\14\46\uffff\1\15\1\17\1\16\1\20",
            "\1\21\46\uffff\1\22\1\24\1\23\1\25\10\uffff\1\26",
            "\1\3\10\uffff\1\1\1\13\24\uffff\14\3\5\4\2\uffff\1\2\13\uffff\1\12",
            "\1\3\10\uffff\1\1\1\13\24\uffff\14\3\5\4\2\uffff\1\2\13\uffff\1\12",
            "\1\3\10\uffff\1\1\1\13\24\uffff\14\3\5\4\2\uffff\1\2\13\uffff\1\12",
            "\1\3\10\uffff\1\1\1\13\24\uffff\14\3\5\4\2\uffff\1\2\13\uffff\1\12",
            "\1\3\10\uffff\1\1\1\13\24\uffff\14\3\5\4\2\uffff\1\2\13\uffff\1\12",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\31\46\uffff\1\32\1\34\1\33\1\35\10\uffff\1\36",
            "\1\37",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\30\60\uffff\1\27",
            "\1\40\1\41",
            "\1\42\46\uffff\1\43\1\45\1\44\1\46\10\uffff\1\47",
            "\1\3\10\uffff\1\1\25\uffff\14\3\5\4\2\uffff\1\2",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\52\46\uffff\1\53\1\55\1\54\1\56\10\uffff\1\57",
            "\1\60",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\51\60\uffff\1\50",
            "\1\40\1\41"
    };
    static final char[] dfa_14 = DFA.unpackEncodedStringToUnsignedChars(dfa_14s);
    static final char[] dfa_15 = DFA.unpackEncodedStringToUnsignedChars(dfa_15s);
    static final short[][] dfa_16 = unpackEncodedStringArray(dfa_16s);

    class DFA30 extends DFA {

        public DFA30(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 30;
            this.eot = dfa_8;
            this.eof = dfa_8;
            this.min = dfa_14;
            this.max = dfa_15;
            this.accept = dfa_11;
            this.special = dfa_12;
            this.transition = dfa_16;
        }
        public String getDescription() {
            return "1294:2: (this_XOperation_0= ruleXOperation | this_XAttribute_1= ruleXAttribute | this_XReference_2= ruleXReference )";
        }
    }
    static final String dfa_17s = "\12\uffff";
    static final String dfa_18s = "\1\5\11\uffff";
    static final String dfa_19s = "\1\57\11\uffff";
    static final String dfa_20s = "\1\uffff\1\11\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10";
    static final String dfa_21s = "\1\0\11\uffff}>";
    static final String[] dfa_22s = {
            "\1\1\36\uffff\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\4\1",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_17 = DFA.unpackEncodedString(dfa_17s);
    static final char[] dfa_18 = DFA.unpackEncodedStringToUnsignedChars(dfa_18s);
    static final char[] dfa_19 = DFA.unpackEncodedStringToUnsignedChars(dfa_19s);
    static final short[] dfa_20 = DFA.unpackEncodedString(dfa_20s);
    static final short[] dfa_21 = DFA.unpackEncodedString(dfa_21s);
    static final short[][] dfa_22 = unpackEncodedStringArray(dfa_22s);

    class DFA32 extends DFA {

        public DFA32(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 32;
            this.eot = dfa_17;
            this.eof = dfa_17;
            this.min = dfa_18;
            this.max = dfa_19;
            this.accept = dfa_20;
            this.special = dfa_21;
            this.transition = dfa_22;
        }
        public String getDescription() {
            return "()* loopback of 1372:6: ( ({...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) ) ) | ({...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) ) ) )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA32_0 = input.LA(1);

                         
                        int index32_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA32_0==RULE_ID||(LA32_0>=44 && LA32_0<=47)) ) {s = 1;}

                        else if ( LA32_0 == 36 && getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 0) ) {s = 2;}

                        else if ( LA32_0 == 37 && getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 1) ) {s = 3;}

                        else if ( LA32_0 == 38 && getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 2) ) {s = 4;}

                        else if ( LA32_0 == 39 && getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 3) ) {s = 5;}

                        else if ( LA32_0 == 40 && getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 4) ) {s = 6;}

                        else if ( LA32_0 == 41 && getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 5) ) {s = 7;}

                        else if ( LA32_0 == 42 && getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 6) ) {s = 8;}

                        else if ( LA32_0 == 43 && getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 7) ) {s = 9;}

                         
                        input.seek(index32_0);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 32, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_23s = "\1\1\11\uffff";
    static final String dfa_24s = "\1\5\1\uffff\4\5\4\uffff";
    static final String dfa_25s = "\1\67\1\uffff\4\103\4\uffff";
    static final String dfa_26s = "\1\uffff\1\5\4\uffff\1\1\1\3\1\2\1\4";
    static final String dfa_27s = "\2\uffff\1\2\1\0\1\3\1\1\4\uffff}>";
    static final String[] dfa_28s = {
            "\1\1\10\uffff\1\1\17\uffff\1\1\5\uffff\10\1\1\2\1\4\1\3\1\5\5\1\2\uffff\1\1",
            "",
            "\1\1\21\uffff\1\1\5\uffff\1\6\35\uffff\1\1\7\uffff\1\1",
            "\1\1\21\uffff\1\1\5\uffff\1\7\35\uffff\1\1\7\uffff\1\1",
            "\1\1\21\uffff\1\1\5\uffff\1\10\35\uffff\1\1\7\uffff\1\1",
            "\1\1\21\uffff\1\1\5\uffff\1\11\35\uffff\1\1\7\uffff\1\1",
            "",
            "",
            "",
            ""
    };
    static final short[] dfa_23 = DFA.unpackEncodedString(dfa_23s);
    static final char[] dfa_24 = DFA.unpackEncodedStringToUnsignedChars(dfa_24s);
    static final char[] dfa_25 = DFA.unpackEncodedStringToUnsignedChars(dfa_25s);
    static final short[] dfa_26 = DFA.unpackEncodedString(dfa_26s);
    static final short[] dfa_27 = DFA.unpackEncodedString(dfa_27s);
    static final short[][] dfa_28 = unpackEncodedStringArray(dfa_28s);

    class DFA35 extends DFA {

        public DFA35(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 35;
            this.eot = dfa_17;
            this.eof = dfa_23;
            this.min = dfa_24;
            this.max = dfa_25;
            this.accept = dfa_26;
            this.special = dfa_27;
            this.transition = dfa_28;
        }
        public String getDescription() {
            return "()* loopback of 1650:6: ( ({...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) ) ) )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA35_3 = input.LA(1);

                         
                        int index35_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( LA35_3 == 29 && getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 2) ) {s = 7;}

                        else if ( (LA35_3==RULE_ID||LA35_3==23||LA35_3==59||LA35_3==67) ) {s = 1;}

                         
                        input.seek(index35_3);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA35_5 = input.LA(1);

                         
                        int index35_5 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA35_5==RULE_ID||LA35_5==23||LA35_5==59||LA35_5==67) ) {s = 1;}

                        else if ( LA35_5 == 29 && getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 3) ) {s = 9;}

                         
                        input.seek(index35_5);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA35_2 = input.LA(1);

                         
                        int index35_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( LA35_2 == 29 && getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 0) ) {s = 6;}

                        else if ( (LA35_2==RULE_ID||LA35_2==23||LA35_2==59||LA35_2==67) ) {s = 1;}

                         
                        input.seek(index35_2);
                        if ( s>=0 ) return s;
                        break;
                    case 3 : 
                        int LA35_4 = input.LA(1);

                         
                        int index35_4 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA35_4==RULE_ID||LA35_4==23||LA35_4==59||LA35_4==67) ) {s = 1;}

                        else if ( LA35_4 == 29 && getUnorderedGroupHelper().canSelect(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 1) ) {s = 8;}

                         
                        input.seek(index35_4);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 35, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_29s = "\2\uffff\1\3\1\1\1\0\1\2\4\uffff}>";
    static final short[] dfa_29 = DFA.unpackEncodedString(dfa_29s);

    class DFA46 extends DFA {

        public DFA46(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 46;
            this.eot = dfa_17;
            this.eof = dfa_23;
            this.min = dfa_24;
            this.max = dfa_25;
            this.accept = dfa_26;
            this.special = dfa_29;
            this.transition = dfa_28;
        }
        public String getDescription() {
            return "()* loopback of 2309:6: ( ({...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) ) ) )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA46_4 = input.LA(1);

                         
                        int index46_4 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA46_4==RULE_ID||LA46_4==23||LA46_4==59||LA46_4==67) ) {s = 1;}

                        else if ( LA46_4 == 29 && getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 1) ) {s = 8;}

                         
                        input.seek(index46_4);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA46_3 = input.LA(1);

                         
                        int index46_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( LA46_3 == 29 && getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 2) ) {s = 7;}

                        else if ( (LA46_3==RULE_ID||LA46_3==23||LA46_3==59||LA46_3==67) ) {s = 1;}

                         
                        input.seek(index46_3);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA46_5 = input.LA(1);

                         
                        int index46_5 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA46_5==RULE_ID||LA46_5==23||LA46_5==59||LA46_5==67) ) {s = 1;}

                        else if ( LA46_5 == 29 && getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 3) ) {s = 9;}

                         
                        input.seek(index46_5);
                        if ( s>=0 ) return s;
                        break;
                    case 3 : 
                        int LA46_2 = input.LA(1);

                         
                        int index46_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA46_2==RULE_ID||LA46_2==23||LA46_2==59||LA46_2==67) ) {s = 1;}

                        else if ( LA46_2 == 29 && getUnorderedGroupHelper().canSelect(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 0) ) {s = 6;}

                         
                        input.seek(index46_2);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 46, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_30s = "\50\uffff";
    static final String dfa_31s = "\1\uffff\45\46\2\uffff";
    static final String dfa_32s = "\46\4\2\uffff";
    static final String dfa_33s = "\1\166\45\167\2\uffff";
    static final String dfa_34s = "\46\uffff\1\2\1\1";
    static final String dfa_35s = "\50\uffff}>";
    static final String[] dfa_36s = {
            "\1\46\1\1\3\46\4\uffff\1\32\1\uffff\1\46\3\uffff\1\24\1\10\1\11\1\uffff\1\46\1\uffff\1\45\1\16\1\15\1\20\1\46\1\uffff\1\46\1\7\1\12\1\26\1\21\1\42\1\41\1\33\1\40\1\44\1\43\1\17\1\23\1\2\1\4\1\3\1\5\1\14\1\35\1\13\1\34\1\27\1\31\1\25\1\30\1\6\1\37\1\uffff\1\46\2\uffff\1\46\3\uffff\1\46\1\uffff\1\22\1\36\25\uffff\1\46\4\uffff\1\46\1\uffff\1\46\1\uffff\1\46\3\uffff\3\46\2\uffff\10\46\1\uffff\1\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "\5\46\4\uffff\1\46\1\uffff\3\46\1\47\3\46\1\uffff\43\46\1\uffff\1\46\1\uffff\44\46\1\uffff\26\46",
            "",
            ""
    };

    static final short[] dfa_30 = DFA.unpackEncodedString(dfa_30s);
    static final short[] dfa_31 = DFA.unpackEncodedString(dfa_31s);
    static final char[] dfa_32 = DFA.unpackEncodedStringToUnsignedChars(dfa_32s);
    static final char[] dfa_33 = DFA.unpackEncodedStringToUnsignedChars(dfa_33s);
    static final short[] dfa_34 = DFA.unpackEncodedString(dfa_34s);
    static final short[] dfa_35 = DFA.unpackEncodedString(dfa_35s);
    static final short[][] dfa_36 = unpackEncodedStringArray(dfa_36s);

    class DFA82 extends DFA {

        public DFA82(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 82;
            this.eot = dfa_30;
            this.eof = dfa_31;
            this.min = dfa_32;
            this.max = dfa_33;
            this.accept = dfa_34;
            this.special = dfa_35;
            this.transition = dfa_36;
        }
        public String getDescription() {
            return "3815:2: ( ( () ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) ) ) | (this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )? ) )";
        }
    }
    static final String dfa_37s = "\1\10\11\uffff";
    static final String dfa_38s = "\1\4\7\0\2\uffff";
    static final String dfa_39s = "\1\167\7\0\2\uffff";
    static final String dfa_40s = "\10\uffff\1\2\1\1";
    static final String dfa_41s = "\1\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\2\uffff}>";
    static final String[] dfa_42s = {
            "\5\10\4\uffff\1\10\1\uffff\3\10\1\uffff\3\10\1\uffff\1\6\1\7\41\10\1\uffff\1\10\1\uffff\11\10\1\1\1\2\1\3\1\4\1\5\26\10\1\uffff\26\10",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "",
            ""
    };
    static final short[] dfa_37 = DFA.unpackEncodedString(dfa_37s);
    static final char[] dfa_38 = DFA.unpackEncodedStringToUnsignedChars(dfa_38s);
    static final char[] dfa_39 = DFA.unpackEncodedStringToUnsignedChars(dfa_39s);
    static final short[] dfa_40 = DFA.unpackEncodedString(dfa_40s);
    static final short[] dfa_41 = DFA.unpackEncodedString(dfa_41s);
    static final short[][] dfa_42 = unpackEncodedStringArray(dfa_42s);

    class DFA81 extends DFA {

        public DFA81(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 81;
            this.eot = dfa_17;
            this.eof = dfa_37;
            this.min = dfa_38;
            this.max = dfa_39;
            this.accept = dfa_40;
            this.special = dfa_41;
            this.transition = dfa_42;
        }
        public String getDescription() {
            return "3877:4: ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA81_1 = input.LA(1);

                         
                        int index81_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred4_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 8;}

                         
                        input.seek(index81_1);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA81_2 = input.LA(1);

                         
                        int index81_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred4_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 8;}

                         
                        input.seek(index81_2);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA81_3 = input.LA(1);

                         
                        int index81_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred4_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 8;}

                         
                        input.seek(index81_3);
                        if ( s>=0 ) return s;
                        break;
                    case 3 : 
                        int LA81_4 = input.LA(1);

                         
                        int index81_4 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred4_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 8;}

                         
                        input.seek(index81_4);
                        if ( s>=0 ) return s;
                        break;
                    case 4 : 
                        int LA81_5 = input.LA(1);

                         
                        int index81_5 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred4_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 8;}

                         
                        input.seek(index81_5);
                        if ( s>=0 ) return s;
                        break;
                    case 5 : 
                        int LA81_6 = input.LA(1);

                         
                        int index81_6 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred4_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 8;}

                         
                        input.seek(index81_6);
                        if ( s>=0 ) return s;
                        break;
                    case 6 : 
                        int LA81_7 = input.LA(1);

                         
                        int index81_7 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred4_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 8;}

                         
                        input.seek(index81_7);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 81, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_43s = "\13\uffff";
    static final String dfa_44s = "\1\1\12\uffff";
    static final String dfa_45s = "\1\4\1\uffff\10\0\1\uffff";
    static final String dfa_46s = "\1\167\1\uffff\10\0\1\uffff";
    static final String dfa_47s = "\1\uffff\1\2\10\uffff\1\1";
    static final String dfa_48s = "\2\uffff\1\5\1\3\1\1\1\2\1\0\1\4\1\6\1\7\1\uffff}>";
    static final String[] dfa_49s = {
            "\5\1\4\uffff\1\1\1\uffff\3\1\1\uffff\3\1\1\uffff\1\2\1\3\41\1\1\uffff\1\1\1\uffff\2\1\1\6\23\1\1\4\1\5\1\7\1\10\1\11\11\1\1\uffff\26\1",
            "",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            ""
    };

    static final short[] dfa_43 = DFA.unpackEncodedString(dfa_43s);
    static final short[] dfa_44 = DFA.unpackEncodedString(dfa_44s);
    static final char[] dfa_45 = DFA.unpackEncodedStringToUnsignedChars(dfa_45s);
    static final char[] dfa_46 = DFA.unpackEncodedStringToUnsignedChars(dfa_46s);
    static final short[] dfa_47 = DFA.unpackEncodedString(dfa_47s);
    static final short[] dfa_48 = DFA.unpackEncodedString(dfa_48s);
    static final short[][] dfa_49 = unpackEncodedStringArray(dfa_49s);

    class DFA91 extends DFA {

        public DFA91(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 91;
            this.eot = dfa_43;
            this.eof = dfa_44;
            this.min = dfa_45;
            this.max = dfa_46;
            this.accept = dfa_47;
            this.special = dfa_48;
            this.transition = dfa_49;
        }
        public String getDescription() {
            return "()* loopback of 4591:3: ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA91_6 = input.LA(1);

                         
                        int index91_6 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred10_InternalXcore()) ) {s = 10;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index91_6);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA91_4 = input.LA(1);

                         
                        int index91_4 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred10_InternalXcore()) ) {s = 10;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index91_4);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA91_5 = input.LA(1);

                         
                        int index91_5 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred10_InternalXcore()) ) {s = 10;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index91_5);
                        if ( s>=0 ) return s;
                        break;
                    case 3 : 
                        int LA91_3 = input.LA(1);

                         
                        int index91_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred10_InternalXcore()) ) {s = 10;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index91_3);
                        if ( s>=0 ) return s;
                        break;
                    case 4 : 
                        int LA91_7 = input.LA(1);

                         
                        int index91_7 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred10_InternalXcore()) ) {s = 10;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index91_7);
                        if ( s>=0 ) return s;
                        break;
                    case 5 : 
                        int LA91_2 = input.LA(1);

                         
                        int index91_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred10_InternalXcore()) ) {s = 10;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index91_2);
                        if ( s>=0 ) return s;
                        break;
                    case 6 : 
                        int LA91_8 = input.LA(1);

                         
                        int index91_8 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred10_InternalXcore()) ) {s = 10;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index91_8);
                        if ( s>=0 ) return s;
                        break;
                    case 7 : 
                        int LA91_9 = input.LA(1);

                         
                        int index91_9 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred10_InternalXcore()) ) {s = 10;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index91_9);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 91, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_50s = "\1\27\2\uffff\1\30\7\uffff";
    static final String dfa_51s = "\1\127\2\uffff\1\77\7\uffff";
    static final String dfa_52s = "\1\uffff\1\1\1\2\1\uffff\1\4\1\5\1\7\1\10\1\11\1\6\1\3";
    static final String dfa_53s = "\13\uffff}>";
    static final String[] dfa_54s = {
            "\1\6\1\3\46\uffff\1\4\23\uffff\1\1\1\2\1\5\1\7\1\10",
            "",
            "",
            "\1\11\46\uffff\1\12",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };
    static final char[] dfa_50 = DFA.unpackEncodedStringToUnsignedChars(dfa_50s);
    static final char[] dfa_51 = DFA.unpackEncodedStringToUnsignedChars(dfa_51s);
    static final short[] dfa_52 = DFA.unpackEncodedString(dfa_52s);
    static final short[] dfa_53 = DFA.unpackEncodedString(dfa_53s);
    static final short[][] dfa_54 = unpackEncodedStringArray(dfa_54s);

    class DFA94 extends DFA {

        public DFA94(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 94;
            this.eot = dfa_43;
            this.eof = dfa_43;
            this.min = dfa_50;
            this.max = dfa_51;
            this.accept = dfa_52;
            this.special = dfa_53;
            this.transition = dfa_54;
        }
        public String getDescription() {
            return "4667:2: (kw= '->' | kw= '..<' | (kw= '>' kw= '..' ) | kw= '..' | kw= '=>' | (kw= '>' ( ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) ) | kw= '>' ) ) | (kw= '<' ( ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) ) | kw= '<' | kw= '=>' ) ) | kw= '<>' | kw= '?:' )";
        }
    }
    static final String dfa_55s = "\155\uffff";
    static final String dfa_56s = "\1\2\154\uffff";
    static final String dfa_57s = "\1\4\1\0\153\uffff";
    static final String dfa_58s = "\1\167\1\0\153\uffff";
    static final String dfa_59s = "\2\uffff\1\2\151\uffff\1\1";
    static final String dfa_60s = "\1\uffff\1\0\153\uffff}>";
    static final String[] dfa_61s = {
            "\5\2\4\uffff\1\2\1\uffff\1\1\2\2\1\uffff\3\2\1\uffff\43\2\1\uffff\1\2\1\uffff\44\2\1\uffff\26\2",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_55 = DFA.unpackEncodedString(dfa_55s);
    static final short[] dfa_56 = DFA.unpackEncodedString(dfa_56s);
    static final char[] dfa_57 = DFA.unpackEncodedStringToUnsignedChars(dfa_57s);
    static final char[] dfa_58 = DFA.unpackEncodedStringToUnsignedChars(dfa_58s);
    static final short[] dfa_59 = DFA.unpackEncodedString(dfa_59s);
    static final short[] dfa_60 = DFA.unpackEncodedString(dfa_60s);
    static final short[][] dfa_61 = unpackEncodedStringArray(dfa_61s);

    class DFA110 extends DFA {

        public DFA110(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 110;
            this.eot = dfa_55;
            this.eof = dfa_56;
            this.min = dfa_57;
            this.max = dfa_58;
            this.accept = dfa_59;
            this.special = dfa_60;
            this.transition = dfa_61;
        }
        public String getDescription() {
            return "5568:5: ( ( ( ( '(' ) )=> (lv_explicitOperationCall_17_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* ) )? otherlv_22= ')' )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA110_1 = input.LA(1);

                         
                        int index110_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred19_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index110_1);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 110, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_62s = "\104\uffff";
    static final String dfa_63s = "\1\4\7\0\74\uffff";
    static final String dfa_64s = "\1\166\7\0\74\uffff";
    static final String dfa_65s = "\10\uffff\2\1\1\2\70\uffff\1\3";
    static final String dfa_66s = "\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\74\uffff}>";
    static final String[] dfa_67s = {
            "\1\12\1\1\3\12\4\uffff\1\12\1\uffff\1\7\1\uffff\1\103\1\uffff\3\12\1\uffff\1\12\1\uffff\5\12\1\uffff\15\12\1\2\1\4\1\3\1\5\10\12\1\6\1\12\1\uffff\1\12\2\uffff\1\12\3\uffff\1\12\1\uffff\2\12\17\uffff\1\10\5\uffff\1\12\4\uffff\1\12\1\11\1\12\1\uffff\1\12\3\uffff\3\12\2\uffff\10\12\1\uffff\1\12",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_62 = DFA.unpackEncodedString(dfa_62s);
    static final char[] dfa_63 = DFA.unpackEncodedStringToUnsignedChars(dfa_63s);
    static final char[] dfa_64 = DFA.unpackEncodedStringToUnsignedChars(dfa_64s);
    static final short[] dfa_65 = DFA.unpackEncodedString(dfa_65s);
    static final short[] dfa_66 = DFA.unpackEncodedString(dfa_66s);
    static final short[][] dfa_67 = unpackEncodedStringArray(dfa_67s);

    class DFA109 extends DFA {

        public DFA109(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 109;
            this.eot = dfa_62;
            this.eof = dfa_62;
            this.min = dfa_63;
            this.max = dfa_64;
            this.accept = dfa_65;
            this.special = dfa_66;
            this.transition = dfa_67;
        }
        public String getDescription() {
            return "5587:6: ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) ) | ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* ) )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA109_0 = input.LA(1);

                         
                        int index109_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA109_0==RULE_ID) ) {s = 1;}

                        else if ( (LA109_0==44) ) {s = 2;}

                        else if ( (LA109_0==46) ) {s = 3;}

                        else if ( (LA109_0==45) ) {s = 4;}

                        else if ( (LA109_0==47) ) {s = 5;}

                        else if ( (LA109_0==56) ) {s = 6;}

                        else if ( (LA109_0==15) ) {s = 7;}

                        else if ( (LA109_0==85) && (synpred20_InternalXcore())) {s = 8;}

                        else if ( (LA109_0==97) && (synpred20_InternalXcore())) {s = 9;}

                        else if ( (LA109_0==RULE_STRING||(LA109_0>=RULE_INT && LA109_0<=RULE_DECIMAL)||LA109_0==13||(LA109_0>=19 && LA109_0<=21)||LA109_0==23||(LA109_0>=25 && LA109_0<=29)||(LA109_0>=31 && LA109_0<=43)||(LA109_0>=48 && LA109_0<=55)||LA109_0==57||LA109_0==59||LA109_0==62||LA109_0==66||(LA109_0>=68 && LA109_0<=69)||LA109_0==91||LA109_0==96||LA109_0==98||LA109_0==100||(LA109_0>=104 && LA109_0<=106)||(LA109_0>=109 && LA109_0<=116)||LA109_0==118) ) {s = 10;}

                        else if ( (LA109_0==17) ) {s = 67;}

                         
                        input.seek(index109_0);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA109_1 = input.LA(1);

                         
                        int index109_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred20_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index109_1);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA109_2 = input.LA(1);

                         
                        int index109_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred20_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index109_2);
                        if ( s>=0 ) return s;
                        break;
                    case 3 : 
                        int LA109_3 = input.LA(1);

                         
                        int index109_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred20_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index109_3);
                        if ( s>=0 ) return s;
                        break;
                    case 4 : 
                        int LA109_4 = input.LA(1);

                         
                        int index109_4 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred20_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index109_4);
                        if ( s>=0 ) return s;
                        break;
                    case 5 : 
                        int LA109_5 = input.LA(1);

                         
                        int index109_5 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred20_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index109_5);
                        if ( s>=0 ) return s;
                        break;
                    case 6 : 
                        int LA109_6 = input.LA(1);

                         
                        int index109_6 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred20_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index109_6);
                        if ( s>=0 ) return s;
                        break;
                    case 7 : 
                        int LA109_7 = input.LA(1);

                         
                        int index109_7 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred20_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index109_7);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 109, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String[] dfa_68s = {
            "\5\2\4\uffff\1\2\1\uffff\3\2\1\uffff\3\2\1\uffff\43\2\1\uffff\1\1\1\uffff\44\2\1\uffff\26\2",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };
    static final short[][] dfa_68 = unpackEncodedStringArray(dfa_68s);

    class DFA111 extends DFA {

        public DFA111(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 111;
            this.eot = dfa_55;
            this.eof = dfa_56;
            this.min = dfa_57;
            this.max = dfa_58;
            this.accept = dfa_59;
            this.special = dfa_60;
            this.transition = dfa_68;
        }
        public String getDescription() {
            return "5685:5: ( ( ( () '[' ) )=> (lv_memberCallArguments_23_0= ruleXClosure ) )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA111_1 = input.LA(1);

                         
                        int index111_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred21_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index111_1);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 111, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_69s = "\100\uffff";
    static final String dfa_70s = "\1\4\66\uffff\1\0\10\uffff";
    static final String dfa_71s = "\1\166\66\uffff\1\0\10\uffff";
    static final String dfa_72s = "\1\uffff\1\1\1\2\1\3\1\4\1\5\46\uffff\1\6\11\uffff\1\7\1\uffff\1\12\1\13\1\14\1\15\1\16\1\17\1\10\1\11";
    static final String dfa_73s = "\1\0\66\uffff\1\1\10\uffff}>";
    static final String[] dfa_74s = {
            "\1\54\1\5\3\54\4\uffff\1\5\1\uffff\1\75\3\uffff\3\5\1\uffff\1\5\1\uffff\4\5\1\2\2\uffff\32\5\1\uffff\1\54\6\uffff\1\5\1\uffff\2\5\32\uffff\1\54\1\uffff\1\66\1\uffff\1\3\3\uffff\1\67\1\70\1\71\2\uffff\1\1\4\54\1\72\1\73\1\74\1\uffff\1\4",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_69 = DFA.unpackEncodedString(dfa_69s);
    static final char[] dfa_70 = DFA.unpackEncodedStringToUnsignedChars(dfa_70s);
    static final char[] dfa_71 = DFA.unpackEncodedStringToUnsignedChars(dfa_71s);
    static final short[] dfa_72 = DFA.unpackEncodedString(dfa_72s);
    static final short[] dfa_73 = DFA.unpackEncodedString(dfa_73s);
    static final short[][] dfa_74 = unpackEncodedStringArray(dfa_74s);

    class DFA113 extends DFA {

        public DFA113(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 113;
            this.eot = dfa_69;
            this.eof = dfa_69;
            this.min = dfa_70;
            this.max = dfa_71;
            this.accept = dfa_72;
            this.special = dfa_73;
            this.transition = dfa_74;
        }
        public String getDescription() {
            return "5730:2: (this_XConstructorCall_0= ruleXConstructorCall | this_XBlockExpression_1= ruleXBlockExpression | this_XSwitchExpression_2= ruleXSwitchExpression | ( ( ( () 'synchronized' '(' ) )=>this_XSynchronizedExpression_3= ruleXSynchronizedExpression ) | this_XFeatureCall_4= ruleXFeatureCall | this_XLiteral_5= ruleXLiteral | this_XIfExpression_6= ruleXIfExpression | ( ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=>this_XForLoopExpression_7= ruleXForLoopExpression ) | this_XBasicForLoopExpression_8= ruleXBasicForLoopExpression | this_XWhileExpression_9= ruleXWhileExpression | this_XDoWhileExpression_10= ruleXDoWhileExpression | this_XThrowExpression_11= ruleXThrowExpression | this_XReturnExpression_12= ruleXReturnExpression | this_XTryCatchFinallyExpression_13= ruleXTryCatchFinallyExpression | this_XParenthesizedExpression_14= ruleXParenthesizedExpression )";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA113_0 = input.LA(1);

                         
                        int index113_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA113_0==109) ) {s = 1;}

                        else if ( (LA113_0==29) ) {s = 2;}

                        else if ( (LA113_0==100) ) {s = 3;}

                        else if ( (LA113_0==118) && (synpred22_InternalXcore())) {s = 4;}

                        else if ( (LA113_0==RULE_ID||LA113_0==13||(LA113_0>=19 && LA113_0<=21)||LA113_0==23||(LA113_0>=25 && LA113_0<=28)||(LA113_0>=32 && LA113_0<=57)||LA113_0==66||(LA113_0>=68 && LA113_0<=69)) ) {s = 5;}

                        else if ( (LA113_0==RULE_STRING||(LA113_0>=RULE_INT && LA113_0<=RULE_DECIMAL)||LA113_0==59||LA113_0==96||(LA113_0>=110 && LA113_0<=113)) ) {s = 44;}

                        else if ( (LA113_0==98) ) {s = 54;}

                        else if ( (LA113_0==104) ) {s = 55;}

                        else if ( (LA113_0==105) ) {s = 56;}

                        else if ( (LA113_0==106) ) {s = 57;}

                        else if ( (LA113_0==114) ) {s = 58;}

                        else if ( (LA113_0==115) ) {s = 59;}

                        else if ( (LA113_0==116) ) {s = 60;}

                        else if ( (LA113_0==15) ) {s = 61;}

                         
                        input.seek(index113_0);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA113_55 = input.LA(1);

                         
                        int index113_55 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred23_InternalXcore()) ) {s = 62;}

                        else if ( (true) ) {s = 63;}

                         
                        input.seek(index113_55);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 113, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_75s = "\106\uffff";
    static final String dfa_76s = "\1\4\7\0\76\uffff";
    static final String dfa_77s = "\1\166\7\0\76\uffff";
    static final String dfa_78s = "\10\uffff\2\1\1\2\73\uffff";
    static final String dfa_79s = "\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\76\uffff}>";
    static final String[] dfa_80s = {
            "\1\12\1\1\3\12\4\uffff\1\12\1\uffff\1\7\3\uffff\3\12\1\uffff\1\12\1\uffff\5\12\1\uffff\15\12\1\2\1\4\1\3\1\5\10\12\1\6\1\12\1\uffff\1\12\2\uffff\1\12\1\uffff\1\12\1\uffff\1\12\1\uffff\2\12\17\uffff\1\10\5\uffff\1\12\4\uffff\1\12\1\11\1\12\1\uffff\1\12\3\uffff\15\12\1\uffff\1\12",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_75 = DFA.unpackEncodedString(dfa_75s);
    static final char[] dfa_76 = DFA.unpackEncodedStringToUnsignedChars(dfa_76s);
    static final char[] dfa_77 = DFA.unpackEncodedStringToUnsignedChars(dfa_77s);
    static final short[] dfa_78 = DFA.unpackEncodedString(dfa_78s);
    static final short[] dfa_79 = DFA.unpackEncodedString(dfa_79s);
    static final short[][] dfa_80 = unpackEncodedStringArray(dfa_80s);

    class DFA122 extends DFA {

        public DFA122(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 122;
            this.eot = dfa_75;
            this.eof = dfa_75;
            this.min = dfa_76;
            this.max = dfa_77;
            this.accept = dfa_78;
            this.special = dfa_79;
            this.transition = dfa_80;
        }
        public String getDescription() {
            return "6222:3: ( ( ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) ) )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA122_0 = input.LA(1);

                         
                        int index122_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA122_0==RULE_ID) ) {s = 1;}

                        else if ( (LA122_0==44) ) {s = 2;}

                        else if ( (LA122_0==46) ) {s = 3;}

                        else if ( (LA122_0==45) ) {s = 4;}

                        else if ( (LA122_0==47) ) {s = 5;}

                        else if ( (LA122_0==56) ) {s = 6;}

                        else if ( (LA122_0==15) ) {s = 7;}

                        else if ( (LA122_0==85) && (synpred26_InternalXcore())) {s = 8;}

                        else if ( (LA122_0==97) && (synpred26_InternalXcore())) {s = 9;}

                        else if ( (LA122_0==RULE_STRING||(LA122_0>=RULE_INT && LA122_0<=RULE_DECIMAL)||LA122_0==13||(LA122_0>=19 && LA122_0<=21)||LA122_0==23||(LA122_0>=25 && LA122_0<=29)||(LA122_0>=31 && LA122_0<=43)||(LA122_0>=48 && LA122_0<=55)||LA122_0==57||LA122_0==59||LA122_0==62||LA122_0==64||LA122_0==66||(LA122_0>=68 && LA122_0<=69)||LA122_0==91||LA122_0==96||LA122_0==98||LA122_0==100||(LA122_0>=104 && LA122_0<=116)||LA122_0==118) ) {s = 10;}

                         
                        input.seek(index122_0);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA122_1 = input.LA(1);

                         
                        int index122_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred26_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index122_1);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA122_2 = input.LA(1);

                         
                        int index122_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred26_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index122_2);
                        if ( s>=0 ) return s;
                        break;
                    case 3 : 
                        int LA122_3 = input.LA(1);

                         
                        int index122_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred26_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index122_3);
                        if ( s>=0 ) return s;
                        break;
                    case 4 : 
                        int LA122_4 = input.LA(1);

                         
                        int index122_4 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred26_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index122_4);
                        if ( s>=0 ) return s;
                        break;
                    case 5 : 
                        int LA122_5 = input.LA(1);

                         
                        int index122_5 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred26_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index122_5);
                        if ( s>=0 ) return s;
                        break;
                    case 6 : 
                        int LA122_6 = input.LA(1);

                         
                        int index122_6 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred26_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index122_6);
                        if ( s>=0 ) return s;
                        break;
                    case 7 : 
                        int LA122_7 = input.LA(1);

                         
                        int index122_7 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred26_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index122_7);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 122, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_81s = "\103\uffff";
    static final String dfa_82s = "\1\4\1\0\101\uffff";
    static final String dfa_83s = "\1\166\1\0\101\uffff";
    static final String dfa_84s = "\2\uffff\1\2\77\uffff\1\1";
    static final String dfa_85s = "\1\uffff\1\0\101\uffff}>";
    static final String[] dfa_86s = {
            "\5\2\4\uffff\1\2\1\uffff\1\1\3\uffff\3\2\1\uffff\1\2\1\uffff\5\2\1\uffff\33\2\1\uffff\1\2\2\uffff\1\2\3\uffff\1\2\1\uffff\2\2\17\uffff\1\2\5\uffff\1\2\4\uffff\1\2\1\uffff\1\2\1\uffff\1\2\3\uffff\3\2\2\uffff\10\2\1\uffff\1\2",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_81 = DFA.unpackEncodedString(dfa_81s);
    static final char[] dfa_82 = DFA.unpackEncodedStringToUnsignedChars(dfa_82s);
    static final char[] dfa_83 = DFA.unpackEncodedStringToUnsignedChars(dfa_83s);
    static final short[] dfa_84 = DFA.unpackEncodedString(dfa_84s);
    static final short[] dfa_85 = DFA.unpackEncodedString(dfa_85s);
    static final short[][] dfa_86 = unpackEncodedStringArray(dfa_86s);

    class DFA129 extends DFA {

        public DFA129(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 129;
            this.eot = dfa_81;
            this.eof = dfa_81;
            this.min = dfa_82;
            this.max = dfa_83;
            this.accept = dfa_84;
            this.special = dfa_85;
            this.transition = dfa_86;
        }
        public String getDescription() {
            return "6688:3: ( ( ( ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_switch_5_0= ruleXExpression ) ) otherlv_6= ')' ) | ( ( ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' ) )? ( (lv_switch_9_0= ruleXExpression ) ) ) )";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA129_1 = input.LA(1);

                         
                        int index129_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred29_InternalXcore()) ) {s = 66;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index129_1);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 129, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_87s = "\102\uffff";
    static final String dfa_88s = "\1\4\7\0\72\uffff";
    static final String dfa_89s = "\1\166\7\0\72\uffff";
    static final String dfa_90s = "\10\uffff\1\1\1\2\70\uffff";
    static final String dfa_91s = "\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\72\uffff}>";
    static final String[] dfa_92s = {
            "\1\11\1\1\3\11\4\uffff\1\11\1\uffff\1\7\3\uffff\3\11\1\uffff\1\11\1\uffff\5\11\1\uffff\15\11\1\2\1\4\1\3\1\5\10\11\1\6\1\11\1\uffff\1\11\2\uffff\1\11\3\uffff\1\11\1\uffff\2\11\17\uffff\1\10\5\uffff\1\11\4\uffff\1\11\1\uffff\1\11\1\uffff\1\11\3\uffff\3\11\2\uffff\10\11\1\uffff\1\11",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_87 = DFA.unpackEncodedString(dfa_87s);
    static final char[] dfa_88 = DFA.unpackEncodedStringToUnsignedChars(dfa_88s);
    static final char[] dfa_89 = DFA.unpackEncodedStringToUnsignedChars(dfa_89s);
    static final short[] dfa_90 = DFA.unpackEncodedString(dfa_90s);
    static final short[] dfa_91 = DFA.unpackEncodedString(dfa_91s);
    static final short[][] dfa_92 = unpackEncodedStringArray(dfa_92s);

    class DFA128 extends DFA {

        public DFA128(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 128;
            this.eot = dfa_87;
            this.eof = dfa_87;
            this.min = dfa_88;
            this.max = dfa_89;
            this.accept = dfa_90;
            this.special = dfa_91;
            this.transition = dfa_92;
        }
        public String getDescription() {
            return "6757:5: ( ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' ) )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA128_0 = input.LA(1);

                         
                        int index128_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA128_0==RULE_ID) ) {s = 1;}

                        else if ( (LA128_0==44) ) {s = 2;}

                        else if ( (LA128_0==46) ) {s = 3;}

                        else if ( (LA128_0==45) ) {s = 4;}

                        else if ( (LA128_0==47) ) {s = 5;}

                        else if ( (LA128_0==56) ) {s = 6;}

                        else if ( (LA128_0==15) ) {s = 7;}

                        else if ( (LA128_0==85) && (synpred30_InternalXcore())) {s = 8;}

                        else if ( (LA128_0==RULE_STRING||(LA128_0>=RULE_INT && LA128_0<=RULE_DECIMAL)||LA128_0==13||(LA128_0>=19 && LA128_0<=21)||LA128_0==23||(LA128_0>=25 && LA128_0<=29)||(LA128_0>=31 && LA128_0<=43)||(LA128_0>=48 && LA128_0<=55)||LA128_0==57||LA128_0==59||LA128_0==62||LA128_0==66||(LA128_0>=68 && LA128_0<=69)||LA128_0==91||LA128_0==96||LA128_0==98||LA128_0==100||(LA128_0>=104 && LA128_0<=106)||(LA128_0>=109 && LA128_0<=116)||LA128_0==118) ) {s = 9;}

                         
                        input.seek(index128_0);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA128_1 = input.LA(1);

                         
                        int index128_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred30_InternalXcore()) ) {s = 8;}

                        else if ( (true) ) {s = 9;}

                         
                        input.seek(index128_1);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA128_2 = input.LA(1);

                         
                        int index128_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred30_InternalXcore()) ) {s = 8;}

                        else if ( (true) ) {s = 9;}

                         
                        input.seek(index128_2);
                        if ( s>=0 ) return s;
                        break;
                    case 3 : 
                        int LA128_3 = input.LA(1);

                         
                        int index128_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred30_InternalXcore()) ) {s = 8;}

                        else if ( (true) ) {s = 9;}

                         
                        input.seek(index128_3);
                        if ( s>=0 ) return s;
                        break;
                    case 4 : 
                        int LA128_4 = input.LA(1);

                         
                        int index128_4 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred30_InternalXcore()) ) {s = 8;}

                        else if ( (true) ) {s = 9;}

                         
                        input.seek(index128_4);
                        if ( s>=0 ) return s;
                        break;
                    case 5 : 
                        int LA128_5 = input.LA(1);

                         
                        int index128_5 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred30_InternalXcore()) ) {s = 8;}

                        else if ( (true) ) {s = 9;}

                         
                        input.seek(index128_5);
                        if ( s>=0 ) return s;
                        break;
                    case 6 : 
                        int LA128_6 = input.LA(1);

                         
                        int index128_6 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred30_InternalXcore()) ) {s = 8;}

                        else if ( (true) ) {s = 9;}

                         
                        input.seek(index128_6);
                        if ( s>=0 ) return s;
                        break;
                    case 7 : 
                        int LA128_7 = input.LA(1);

                         
                        int index128_7 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred30_InternalXcore()) ) {s = 8;}

                        else if ( (true) ) {s = 9;}

                         
                        input.seek(index128_7);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 128, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_93s = "\1\5\6\0\3\uffff";
    static final String dfa_94s = "\1\125\6\0\3\uffff";
    static final String dfa_95s = "\7\uffff\2\1\1\2";
    static final String dfa_96s = "\1\0\1\1\1\2\1\3\1\4\1\5\1\6\3\uffff}>";
    static final String[] dfa_97s = {
            "\1\1\11\uffff\1\7\34\uffff\1\2\1\4\1\3\1\5\10\uffff\1\6\34\uffff\1\10",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "",
            "",
            ""
    };
    static final char[] dfa_93 = DFA.unpackEncodedStringToUnsignedChars(dfa_93s);
    static final char[] dfa_94 = DFA.unpackEncodedStringToUnsignedChars(dfa_94s);
    static final short[] dfa_95 = DFA.unpackEncodedString(dfa_95s);
    static final short[] dfa_96 = DFA.unpackEncodedString(dfa_96s);
    static final short[][] dfa_97 = unpackEncodedStringArray(dfa_97s);

    class DFA142 extends DFA {

        public DFA142(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 142;
            this.eot = dfa_17;
            this.eof = dfa_17;
            this.min = dfa_93;
            this.max = dfa_94;
            this.accept = dfa_95;
            this.special = dfa_96;
            this.transition = dfa_97;
        }
        public String getDescription() {
            return "7513:3: ( ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) ) | ( (lv_name_5_0= ruleValidID ) ) )";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA142_0 = input.LA(1);

                         
                        int index142_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA142_0==RULE_ID) ) {s = 1;}

                        else if ( (LA142_0==44) ) {s = 2;}

                        else if ( (LA142_0==46) ) {s = 3;}

                        else if ( (LA142_0==45) ) {s = 4;}

                        else if ( (LA142_0==47) ) {s = 5;}

                        else if ( (LA142_0==56) ) {s = 6;}

                        else if ( (LA142_0==15) && (synpred32_InternalXcore())) {s = 7;}

                        else if ( (LA142_0==85) && (synpred32_InternalXcore())) {s = 8;}

                         
                        input.seek(index142_0);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA142_1 = input.LA(1);

                         
                        int index142_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred32_InternalXcore()) ) {s = 8;}

                        else if ( (true) ) {s = 9;}

                         
                        input.seek(index142_1);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA142_2 = input.LA(1);

                         
                        int index142_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred32_InternalXcore()) ) {s = 8;}

                        else if ( (true) ) {s = 9;}

                         
                        input.seek(index142_2);
                        if ( s>=0 ) return s;
                        break;
                    case 3 : 
                        int LA142_3 = input.LA(1);

                         
                        int index142_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred32_InternalXcore()) ) {s = 8;}

                        else if ( (true) ) {s = 9;}

                         
                        input.seek(index142_3);
                        if ( s>=0 ) return s;
                        break;
                    case 4 : 
                        int LA142_4 = input.LA(1);

                         
                        int index142_4 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred32_InternalXcore()) ) {s = 8;}

                        else if ( (true) ) {s = 9;}

                         
                        input.seek(index142_4);
                        if ( s>=0 ) return s;
                        break;
                    case 5 : 
                        int LA142_5 = input.LA(1);

                         
                        int index142_5 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred32_InternalXcore()) ) {s = 8;}

                        else if ( (true) ) {s = 9;}

                         
                        input.seek(index142_5);
                        if ( s>=0 ) return s;
                        break;
                    case 6 : 
                        int LA142_6 = input.LA(1);

                         
                        int index142_6 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred32_InternalXcore()) ) {s = 8;}

                        else if ( (true) ) {s = 9;}

                         
                        input.seek(index142_6);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 142, _s, input);
            error(nvae);
            throw nvae;
        }
    }

    class DFA149 extends DFA {

        public DFA149(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 149;
            this.eot = dfa_55;
            this.eof = dfa_56;
            this.min = dfa_57;
            this.max = dfa_58;
            this.accept = dfa_59;
            this.special = dfa_60;
            this.transition = dfa_61;
        }
        public String getDescription() {
            return "7825:3: ( ( ( ( '(' ) )=> (lv_explicitOperationCall_7_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_featureCallArguments_8_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) ) )* ) )? otherlv_12= ')' )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA149_1 = input.LA(1);

                         
                        int index149_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred33_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index149_1);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 149, _s, input);
            error(nvae);
            throw nvae;
        }
    }

    class DFA148 extends DFA {

        public DFA148(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 148;
            this.eot = dfa_62;
            this.eof = dfa_62;
            this.min = dfa_63;
            this.max = dfa_64;
            this.accept = dfa_65;
            this.special = dfa_66;
            this.transition = dfa_67;
        }
        public String getDescription() {
            return "7844:4: ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_featureCallArguments_8_0= ruleXShortClosure ) ) | ( ( (lv_featureCallArguments_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) ) )* ) )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA148_0 = input.LA(1);

                         
                        int index148_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA148_0==RULE_ID) ) {s = 1;}

                        else if ( (LA148_0==44) ) {s = 2;}

                        else if ( (LA148_0==46) ) {s = 3;}

                        else if ( (LA148_0==45) ) {s = 4;}

                        else if ( (LA148_0==47) ) {s = 5;}

                        else if ( (LA148_0==56) ) {s = 6;}

                        else if ( (LA148_0==15) ) {s = 7;}

                        else if ( (LA148_0==85) && (synpred34_InternalXcore())) {s = 8;}

                        else if ( (LA148_0==97) && (synpred34_InternalXcore())) {s = 9;}

                        else if ( (LA148_0==RULE_STRING||(LA148_0>=RULE_INT && LA148_0<=RULE_DECIMAL)||LA148_0==13||(LA148_0>=19 && LA148_0<=21)||LA148_0==23||(LA148_0>=25 && LA148_0<=29)||(LA148_0>=31 && LA148_0<=43)||(LA148_0>=48 && LA148_0<=55)||LA148_0==57||LA148_0==59||LA148_0==62||LA148_0==66||(LA148_0>=68 && LA148_0<=69)||LA148_0==91||LA148_0==96||LA148_0==98||LA148_0==100||(LA148_0>=104 && LA148_0<=106)||(LA148_0>=109 && LA148_0<=116)||LA148_0==118) ) {s = 10;}

                        else if ( (LA148_0==17) ) {s = 67;}

                         
                        input.seek(index148_0);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA148_1 = input.LA(1);

                         
                        int index148_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred34_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index148_1);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA148_2 = input.LA(1);

                         
                        int index148_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred34_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index148_2);
                        if ( s>=0 ) return s;
                        break;
                    case 3 : 
                        int LA148_3 = input.LA(1);

                         
                        int index148_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred34_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index148_3);
                        if ( s>=0 ) return s;
                        break;
                    case 4 : 
                        int LA148_4 = input.LA(1);

                         
                        int index148_4 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred34_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index148_4);
                        if ( s>=0 ) return s;
                        break;
                    case 5 : 
                        int LA148_5 = input.LA(1);

                         
                        int index148_5 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred34_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index148_5);
                        if ( s>=0 ) return s;
                        break;
                    case 6 : 
                        int LA148_6 = input.LA(1);

                         
                        int index148_6 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred34_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index148_6);
                        if ( s>=0 ) return s;
                        break;
                    case 7 : 
                        int LA148_7 = input.LA(1);

                         
                        int index148_7 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred34_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index148_7);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 148, _s, input);
            error(nvae);
            throw nvae;
        }
    }

    class DFA150 extends DFA {

        public DFA150(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 150;
            this.eot = dfa_55;
            this.eof = dfa_56;
            this.min = dfa_57;
            this.max = dfa_58;
            this.accept = dfa_59;
            this.special = dfa_60;
            this.transition = dfa_68;
        }
        public String getDescription() {
            return "7942:3: ( ( ( () '[' ) )=> (lv_featureCallArguments_13_0= ruleXClosure ) )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA150_1 = input.LA(1);

                         
                        int index150_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred35_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index150_1);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 150, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String[] dfa_98s = {
            "\5\2\4\uffff\1\2\1\uffff\3\2\1\uffff\3\2\1\uffff\1\1\42\2\1\uffff\1\2\1\uffff\44\2\1\uffff\26\2",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };
    static final short[][] dfa_98 = unpackEncodedStringArray(dfa_98s);

    class DFA153 extends DFA {

        public DFA153(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 153;
            this.eot = dfa_55;
            this.eof = dfa_56;
            this.min = dfa_57;
            this.max = dfa_58;
            this.accept = dfa_59;
            this.special = dfa_60;
            this.transition = dfa_98;
        }
        public String getDescription() {
            return "8048:3: ( ( ( '<' )=>otherlv_3= '<' ) ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA153_1 = input.LA(1);

                         
                        int index153_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred36_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index153_1);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 153, _s, input);
            error(nvae);
            throw nvae;
        }
    }

    class DFA156 extends DFA {

        public DFA156(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 156;
            this.eot = dfa_55;
            this.eof = dfa_56;
            this.min = dfa_57;
            this.max = dfa_58;
            this.accept = dfa_59;
            this.special = dfa_60;
            this.transition = dfa_61;
        }
        public String getDescription() {
            return "8105:3: ( ( ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA156_1 = input.LA(1);

                         
                        int index156_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred37_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index156_1);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 156, _s, input);
            error(nvae);
            throw nvae;
        }
    }

    class DFA155 extends DFA {

        public DFA155(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 155;
            this.eot = dfa_62;
            this.eof = dfa_62;
            this.min = dfa_63;
            this.max = dfa_64;
            this.accept = dfa_65;
            this.special = dfa_66;
            this.transition = dfa_67;
        }
        public String getDescription() {
            return "8124:4: ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA155_0 = input.LA(1);

                         
                        int index155_0 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (LA155_0==RULE_ID) ) {s = 1;}

                        else if ( (LA155_0==44) ) {s = 2;}

                        else if ( (LA155_0==46) ) {s = 3;}

                        else if ( (LA155_0==45) ) {s = 4;}

                        else if ( (LA155_0==47) ) {s = 5;}

                        else if ( (LA155_0==56) ) {s = 6;}

                        else if ( (LA155_0==15) ) {s = 7;}

                        else if ( (LA155_0==85) && (synpred38_InternalXcore())) {s = 8;}

                        else if ( (LA155_0==97) && (synpred38_InternalXcore())) {s = 9;}

                        else if ( (LA155_0==RULE_STRING||(LA155_0>=RULE_INT && LA155_0<=RULE_DECIMAL)||LA155_0==13||(LA155_0>=19 && LA155_0<=21)||LA155_0==23||(LA155_0>=25 && LA155_0<=29)||(LA155_0>=31 && LA155_0<=43)||(LA155_0>=48 && LA155_0<=55)||LA155_0==57||LA155_0==59||LA155_0==62||LA155_0==66||(LA155_0>=68 && LA155_0<=69)||LA155_0==91||LA155_0==96||LA155_0==98||LA155_0==100||(LA155_0>=104 && LA155_0<=106)||(LA155_0>=109 && LA155_0<=116)||LA155_0==118) ) {s = 10;}

                        else if ( (LA155_0==17) ) {s = 67;}

                         
                        input.seek(index155_0);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA155_1 = input.LA(1);

                         
                        int index155_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred38_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index155_1);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA155_2 = input.LA(1);

                         
                        int index155_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred38_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index155_2);
                        if ( s>=0 ) return s;
                        break;
                    case 3 : 
                        int LA155_3 = input.LA(1);

                         
                        int index155_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred38_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index155_3);
                        if ( s>=0 ) return s;
                        break;
                    case 4 : 
                        int LA155_4 = input.LA(1);

                         
                        int index155_4 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred38_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index155_4);
                        if ( s>=0 ) return s;
                        break;
                    case 5 : 
                        int LA155_5 = input.LA(1);

                         
                        int index155_5 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred38_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index155_5);
                        if ( s>=0 ) return s;
                        break;
                    case 6 : 
                        int LA155_6 = input.LA(1);

                         
                        int index155_6 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred38_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index155_6);
                        if ( s>=0 ) return s;
                        break;
                    case 7 : 
                        int LA155_7 = input.LA(1);

                         
                        int index155_7 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred38_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 10;}

                         
                        input.seek(index155_7);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 155, _s, input);
            error(nvae);
            throw nvae;
        }
    }

    class DFA157 extends DFA {

        public DFA157(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 157;
            this.eot = dfa_55;
            this.eof = dfa_56;
            this.min = dfa_57;
            this.max = dfa_58;
            this.accept = dfa_59;
            this.special = dfa_60;
            this.transition = dfa_68;
        }
        public String getDescription() {
            return "8222:3: ( ( ( () '[' ) )=> (lv_arguments_14_0= ruleXClosure ) )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA157_1 = input.LA(1);

                         
                        int index157_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred39_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index157_1);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 157, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_99s = "\1\101\154\uffff";
    static final String dfa_100s = "\1\4\100\0\54\uffff";
    static final String dfa_101s = "\1\167\100\0\54\uffff";
    static final String dfa_102s = "\101\uffff\1\2\52\uffff\1\1";
    static final String dfa_103s = "\1\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\42\1\43\1\44\1\45\1\46\1\47\1\50\1\51\1\52\1\53\1\54\1\55\1\56\1\57\1\60\1\61\1\62\1\63\1\64\1\65\1\66\1\67\1\70\1\71\1\72\1\73\1\74\1\75\1\76\1\77\54\uffff}>";
    static final String[] dfa_104s = {
            "\1\67\1\1\1\64\1\63\1\65\4\uffff\1\32\1\uffff\1\100\2\101\1\uffff\1\24\1\10\1\11\1\uffff\1\55\1\101\1\45\1\16\1\15\1\20\1\52\1\101\1\47\1\7\1\12\1\26\1\21\1\42\1\41\1\33\1\40\1\44\1\43\1\17\1\23\1\2\1\4\1\3\1\5\1\14\1\35\1\13\1\34\1\27\1\31\1\25\1\30\1\6\1\37\1\uffff\1\60\1\uffff\1\101\1\50\3\101\1\56\1\101\1\22\1\36\25\101\1\46\4\101\1\57\1\uffff\1\71\1\101\1\53\3\101\1\72\1\73\1\74\2\101\1\51\1\61\1\62\1\66\1\70\1\75\1\76\1\77\1\101\1\54\1\101",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };
    static final short[] dfa_99 = DFA.unpackEncodedString(dfa_99s);
    static final char[] dfa_100 = DFA.unpackEncodedStringToUnsignedChars(dfa_100s);
    static final char[] dfa_101 = DFA.unpackEncodedStringToUnsignedChars(dfa_101s);
    static final short[] dfa_102 = DFA.unpackEncodedString(dfa_102s);
    static final short[] dfa_103 = DFA.unpackEncodedString(dfa_103s);
    static final short[][] dfa_104 = unpackEncodedStringArray(dfa_104s);

    class DFA160 extends DFA {

        public DFA160(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 160;
            this.eot = dfa_55;
            this.eof = dfa_99;
            this.min = dfa_100;
            this.max = dfa_101;
            this.accept = dfa_102;
            this.special = dfa_103;
            this.transition = dfa_104;
        }
        public String getDescription() {
            return "8565:3: ( ( 'get' | 'isSet' | 'set' | 'unset' | 'void' | 'abstract' | 'annotation' | 'as' | 'class' | 'container' | 'contains' | 'convert' | 'create' | 'derived' | 'enum' | 'extends' | 'extension' | 'id' | 'import' | 'keys' | 'interface' | 'local' | 'op' | 'opposite' | 'package' | 'readonly' | 'refers' | 'resolving' | 'static' | 'throws' | 'transient' | 'unique' | 'unordered' | 'unsettable' | 'volatile' | 'wraps' | '!' | '-' | '+' | 'new' | '{' | 'switch' | 'synchronized' | '<' | 'super' | '#' | '[' | 'false' | 'true' | 'null' | 'typeof' | 'if' | 'for' | 'while' | 'do' | 'throw' | 'return' | 'try' | '(' | RULE_ID | RULE_HEX | RULE_INT | RULE_DECIMAL | RULE_STRING )=> (lv_expression_2_0= ruleXExpression ) )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA160_1 = input.LA(1);

                         
                        int index160_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_1);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA160_2 = input.LA(1);

                         
                        int index160_2 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_2);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA160_3 = input.LA(1);

                         
                        int index160_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_3);
                        if ( s>=0 ) return s;
                        break;
                    case 3 : 
                        int LA160_4 = input.LA(1);

                         
                        int index160_4 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_4);
                        if ( s>=0 ) return s;
                        break;
                    case 4 : 
                        int LA160_5 = input.LA(1);

                         
                        int index160_5 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_5);
                        if ( s>=0 ) return s;
                        break;
                    case 5 : 
                        int LA160_6 = input.LA(1);

                         
                        int index160_6 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_6);
                        if ( s>=0 ) return s;
                        break;
                    case 6 : 
                        int LA160_7 = input.LA(1);

                         
                        int index160_7 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_7);
                        if ( s>=0 ) return s;
                        break;
                    case 7 : 
                        int LA160_8 = input.LA(1);

                         
                        int index160_8 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_8);
                        if ( s>=0 ) return s;
                        break;
                    case 8 : 
                        int LA160_9 = input.LA(1);

                         
                        int index160_9 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_9);
                        if ( s>=0 ) return s;
                        break;
                    case 9 : 
                        int LA160_10 = input.LA(1);

                         
                        int index160_10 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_10);
                        if ( s>=0 ) return s;
                        break;
                    case 10 : 
                        int LA160_11 = input.LA(1);

                         
                        int index160_11 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_11);
                        if ( s>=0 ) return s;
                        break;
                    case 11 : 
                        int LA160_12 = input.LA(1);

                         
                        int index160_12 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_12);
                        if ( s>=0 ) return s;
                        break;
                    case 12 : 
                        int LA160_13 = input.LA(1);

                         
                        int index160_13 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_13);
                        if ( s>=0 ) return s;
                        break;
                    case 13 : 
                        int LA160_14 = input.LA(1);

                         
                        int index160_14 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_14);
                        if ( s>=0 ) return s;
                        break;
                    case 14 : 
                        int LA160_15 = input.LA(1);

                         
                        int index160_15 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_15);
                        if ( s>=0 ) return s;
                        break;
                    case 15 : 
                        int LA160_16 = input.LA(1);

                         
                        int index160_16 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_16);
                        if ( s>=0 ) return s;
                        break;
                    case 16 : 
                        int LA160_17 = input.LA(1);

                         
                        int index160_17 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_17);
                        if ( s>=0 ) return s;
                        break;
                    case 17 : 
                        int LA160_18 = input.LA(1);

                         
                        int index160_18 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_18);
                        if ( s>=0 ) return s;
                        break;
                    case 18 : 
                        int LA160_19 = input.LA(1);

                         
                        int index160_19 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_19);
                        if ( s>=0 ) return s;
                        break;
                    case 19 : 
                        int LA160_20 = input.LA(1);

                         
                        int index160_20 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_20);
                        if ( s>=0 ) return s;
                        break;
                    case 20 : 
                        int LA160_21 = input.LA(1);

                         
                        int index160_21 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_21);
                        if ( s>=0 ) return s;
                        break;
                    case 21 : 
                        int LA160_22 = input.LA(1);

                         
                        int index160_22 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_22);
                        if ( s>=0 ) return s;
                        break;
                    case 22 : 
                        int LA160_23 = input.LA(1);

                         
                        int index160_23 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_23);
                        if ( s>=0 ) return s;
                        break;
                    case 23 : 
                        int LA160_24 = input.LA(1);

                         
                        int index160_24 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_24);
                        if ( s>=0 ) return s;
                        break;
                    case 24 : 
                        int LA160_25 = input.LA(1);

                         
                        int index160_25 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_25);
                        if ( s>=0 ) return s;
                        break;
                    case 25 : 
                        int LA160_26 = input.LA(1);

                         
                        int index160_26 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_26);
                        if ( s>=0 ) return s;
                        break;
                    case 26 : 
                        int LA160_27 = input.LA(1);

                         
                        int index160_27 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_27);
                        if ( s>=0 ) return s;
                        break;
                    case 27 : 
                        int LA160_28 = input.LA(1);

                         
                        int index160_28 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_28);
                        if ( s>=0 ) return s;
                        break;
                    case 28 : 
                        int LA160_29 = input.LA(1);

                         
                        int index160_29 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_29);
                        if ( s>=0 ) return s;
                        break;
                    case 29 : 
                        int LA160_30 = input.LA(1);

                         
                        int index160_30 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_30);
                        if ( s>=0 ) return s;
                        break;
                    case 30 : 
                        int LA160_31 = input.LA(1);

                         
                        int index160_31 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_31);
                        if ( s>=0 ) return s;
                        break;
                    case 31 : 
                        int LA160_32 = input.LA(1);

                         
                        int index160_32 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_32);
                        if ( s>=0 ) return s;
                        break;
                    case 32 : 
                        int LA160_33 = input.LA(1);

                         
                        int index160_33 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_33);
                        if ( s>=0 ) return s;
                        break;
                    case 33 : 
                        int LA160_34 = input.LA(1);

                         
                        int index160_34 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_34);
                        if ( s>=0 ) return s;
                        break;
                    case 34 : 
                        int LA160_35 = input.LA(1);

                         
                        int index160_35 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_35);
                        if ( s>=0 ) return s;
                        break;
                    case 35 : 
                        int LA160_36 = input.LA(1);

                         
                        int index160_36 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_36);
                        if ( s>=0 ) return s;
                        break;
                    case 36 : 
                        int LA160_37 = input.LA(1);

                         
                        int index160_37 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_37);
                        if ( s>=0 ) return s;
                        break;
                    case 37 : 
                        int LA160_38 = input.LA(1);

                         
                        int index160_38 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_38);
                        if ( s>=0 ) return s;
                        break;
                    case 38 : 
                        int LA160_39 = input.LA(1);

                         
                        int index160_39 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_39);
                        if ( s>=0 ) return s;
                        break;
                    case 39 : 
                        int LA160_40 = input.LA(1);

                         
                        int index160_40 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_40);
                        if ( s>=0 ) return s;
                        break;
                    case 40 : 
                        int LA160_41 = input.LA(1);

                         
                        int index160_41 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_41);
                        if ( s>=0 ) return s;
                        break;
                    case 41 : 
                        int LA160_42 = input.LA(1);

                         
                        int index160_42 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_42);
                        if ( s>=0 ) return s;
                        break;
                    case 42 : 
                        int LA160_43 = input.LA(1);

                         
                        int index160_43 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_43);
                        if ( s>=0 ) return s;
                        break;
                    case 43 : 
                        int LA160_44 = input.LA(1);

                         
                        int index160_44 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_44);
                        if ( s>=0 ) return s;
                        break;
                    case 44 : 
                        int LA160_45 = input.LA(1);

                         
                        int index160_45 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_45);
                        if ( s>=0 ) return s;
                        break;
                    case 45 : 
                        int LA160_46 = input.LA(1);

                         
                        int index160_46 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_46);
                        if ( s>=0 ) return s;
                        break;
                    case 46 : 
                        int LA160_47 = input.LA(1);

                         
                        int index160_47 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_47);
                        if ( s>=0 ) return s;
                        break;
                    case 47 : 
                        int LA160_48 = input.LA(1);

                         
                        int index160_48 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_48);
                        if ( s>=0 ) return s;
                        break;
                    case 48 : 
                        int LA160_49 = input.LA(1);

                         
                        int index160_49 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_49);
                        if ( s>=0 ) return s;
                        break;
                    case 49 : 
                        int LA160_50 = input.LA(1);

                         
                        int index160_50 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_50);
                        if ( s>=0 ) return s;
                        break;
                    case 50 : 
                        int LA160_51 = input.LA(1);

                         
                        int index160_51 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_51);
                        if ( s>=0 ) return s;
                        break;
                    case 51 : 
                        int LA160_52 = input.LA(1);

                         
                        int index160_52 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_52);
                        if ( s>=0 ) return s;
                        break;
                    case 52 : 
                        int LA160_53 = input.LA(1);

                         
                        int index160_53 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_53);
                        if ( s>=0 ) return s;
                        break;
                    case 53 : 
                        int LA160_54 = input.LA(1);

                         
                        int index160_54 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_54);
                        if ( s>=0 ) return s;
                        break;
                    case 54 : 
                        int LA160_55 = input.LA(1);

                         
                        int index160_55 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_55);
                        if ( s>=0 ) return s;
                        break;
                    case 55 : 
                        int LA160_56 = input.LA(1);

                         
                        int index160_56 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_56);
                        if ( s>=0 ) return s;
                        break;
                    case 56 : 
                        int LA160_57 = input.LA(1);

                         
                        int index160_57 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_57);
                        if ( s>=0 ) return s;
                        break;
                    case 57 : 
                        int LA160_58 = input.LA(1);

                         
                        int index160_58 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_58);
                        if ( s>=0 ) return s;
                        break;
                    case 58 : 
                        int LA160_59 = input.LA(1);

                         
                        int index160_59 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_59);
                        if ( s>=0 ) return s;
                        break;
                    case 59 : 
                        int LA160_60 = input.LA(1);

                         
                        int index160_60 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_60);
                        if ( s>=0 ) return s;
                        break;
                    case 60 : 
                        int LA160_61 = input.LA(1);

                         
                        int index160_61 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_61);
                        if ( s>=0 ) return s;
                        break;
                    case 61 : 
                        int LA160_62 = input.LA(1);

                         
                        int index160_62 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_62);
                        if ( s>=0 ) return s;
                        break;
                    case 62 : 
                        int LA160_63 = input.LA(1);

                         
                        int index160_63 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_63);
                        if ( s>=0 ) return s;
                        break;
                    case 63 : 
                        int LA160_64 = input.LA(1);

                         
                        int index160_64 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred40_InternalXcore()) ) {s = 108;}

                        else if ( (true) ) {s = 65;}

                         
                        input.seek(index160_64);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 160, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_105s = "\1\4\1\uffff\1\5\6\0\1\uffff";
    static final String dfa_106s = "\1\167\1\uffff\1\105\6\0\1\uffff";
    static final String dfa_107s = "\1\uffff\1\2\7\uffff\1\1";
    static final String dfa_108s = "\3\uffff\1\0\1\4\1\1\1\5\1\2\1\3\1\uffff}>";
    static final String[] dfa_109s = {
            "\5\1\4\uffff\57\1\1\uffff\6\1\1\2\35\1\1\uffff\26\1",
            "",
            "\1\3\7\uffff\1\1\5\uffff\3\1\1\uffff\1\1\1\uffff\4\1\3\uffff\14\1\1\4\1\6\1\5\1\7\10\1\1\10\1\1\3\uffff\1\1\4\uffff\1\1\1\uffff\2\1",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            ""
    };
    static final char[] dfa_105 = DFA.unpackEncodedStringToUnsignedChars(dfa_105s);
    static final char[] dfa_106 = DFA.unpackEncodedStringToUnsignedChars(dfa_106s);
    static final short[] dfa_107 = DFA.unpackEncodedString(dfa_107s);
    static final short[] dfa_108 = DFA.unpackEncodedString(dfa_108s);
    static final short[][] dfa_109 = unpackEncodedStringArray(dfa_109s);

    class DFA164 extends DFA {

        public DFA164(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 164;
            this.eot = dfa_17;
            this.eof = dfa_23;
            this.min = dfa_105;
            this.max = dfa_106;
            this.accept = dfa_107;
            this.special = dfa_108;
            this.transition = dfa_109;
        }
        public String getDescription() {
            return "()* loopback of 8900:3: ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA164_3 = input.LA(1);

                         
                        int index164_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred45_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index164_3);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA164_5 = input.LA(1);

                         
                        int index164_5 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred45_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index164_5);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA164_7 = input.LA(1);

                         
                        int index164_7 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred45_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index164_7);
                        if ( s>=0 ) return s;
                        break;
                    case 3 : 
                        int LA164_8 = input.LA(1);

                         
                        int index164_8 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred45_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index164_8);
                        if ( s>=0 ) return s;
                        break;
                    case 4 : 
                        int LA164_4 = input.LA(1);

                         
                        int index164_4 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred45_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index164_4);
                        if ( s>=0 ) return s;
                        break;
                    case 5 : 
                        int LA164_6 = input.LA(1);

                         
                        int index164_6 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred45_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index164_6);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 164, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_110s = "\160\uffff";
    static final String dfa_111s = "\1\2\157\uffff";
    static final String dfa_112s = "\1\4\1\0\156\uffff";
    static final String dfa_113s = "\1\167\1\0\156\uffff";
    static final String dfa_114s = "\2\uffff\1\2\154\uffff\1\1";
    static final String dfa_115s = "\1\uffff\1\0\156\uffff}>";
    static final String[] dfa_116s = {
            "\5\2\4\uffff\5\2\1\uffff\4\2\1\1\44\2\1\uffff\44\2\1\uffff\26\2",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] dfa_110 = DFA.unpackEncodedString(dfa_110s);
    static final short[] dfa_111 = DFA.unpackEncodedString(dfa_111s);
    static final char[] dfa_112 = DFA.unpackEncodedStringToUnsignedChars(dfa_112s);
    static final char[] dfa_113 = DFA.unpackEncodedStringToUnsignedChars(dfa_113s);
    static final short[] dfa_114 = DFA.unpackEncodedString(dfa_114s);
    static final short[] dfa_115 = DFA.unpackEncodedString(dfa_115s);
    static final short[][] dfa_116 = unpackEncodedStringArray(dfa_116s);

    class DFA178 extends DFA {

        public DFA178(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 178;
            this.eot = dfa_110;
            this.eof = dfa_111;
            this.min = dfa_112;
            this.max = dfa_113;
            this.accept = dfa_114;
            this.special = dfa_115;
            this.transition = dfa_116;
        }
        public String getDescription() {
            return "9223:3: ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>' ( ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )? )* )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA178_1 = input.LA(1);

                         
                        int index178_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred47_InternalXcore()) ) {s = 111;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index178_1);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 178, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_117s = "\3\uffff\1\5\1\3\1\0\1\4\1\1\1\2\1\uffff}>";
    static final String[] dfa_118s = {
            "\5\1\4\uffff\5\1\1\uffff\51\1\1\uffff\6\1\1\2\35\1\1\uffff\26\1",
            "",
            "\1\3\7\uffff\1\1\5\uffff\3\1\1\uffff\1\1\1\uffff\4\1\3\uffff\14\1\1\4\1\6\1\5\1\7\10\1\1\10\1\1\10\uffff\1\1\1\uffff\2\1",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            "\1\uffff",
            ""
    };
    static final short[] dfa_117 = DFA.unpackEncodedString(dfa_117s);
    static final short[][] dfa_118 = unpackEncodedStringArray(dfa_118s);

    class DFA177 extends DFA {

        public DFA177(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 177;
            this.eot = dfa_17;
            this.eof = dfa_23;
            this.min = dfa_105;
            this.max = dfa_106;
            this.accept = dfa_107;
            this.special = dfa_117;
            this.transition = dfa_118;
        }
        public String getDescription() {
            return "()* loopback of 9279:4: ( ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )? )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA177_5 = input.LA(1);

                         
                        int index177_5 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred48_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index177_5);
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA177_7 = input.LA(1);

                         
                        int index177_7 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred48_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index177_7);
                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA177_8 = input.LA(1);

                         
                        int index177_8 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred48_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index177_8);
                        if ( s>=0 ) return s;
                        break;
                    case 3 : 
                        int LA177_4 = input.LA(1);

                         
                        int index177_4 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred48_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index177_4);
                        if ( s>=0 ) return s;
                        break;
                    case 4 : 
                        int LA177_6 = input.LA(1);

                         
                        int index177_6 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred48_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index177_6);
                        if ( s>=0 ) return s;
                        break;
                    case 5 : 
                        int LA177_3 = input.LA(1);

                         
                        int index177_3 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred48_InternalXcore()) ) {s = 9;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index177_3);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 177, _s, input);
            error(nvae);
            throw nvae;
        }
    }

    class DFA176 extends DFA {

        public DFA176(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 176;
            this.eot = dfa_110;
            this.eof = dfa_111;
            this.min = dfa_112;
            this.max = dfa_113;
            this.accept = dfa_114;
            this.special = dfa_115;
            this.transition = dfa_116;
        }
        public String getDescription() {
            return "9317:5: ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )?";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA176_1 = input.LA(1);

                         
                        int index176_1 = input.index();
                        input.rewind();
                        s = -1;
                        if ( (synpred49_InternalXcore()) ) {s = 111;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index176_1);
                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}
            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 176, _s, input);
            error(nvae);
            throw nvae;
        }
    }
    static final String dfa_119s = "\21\uffff";
    static final String dfa_120s = "\2\uffff\6\11\2\uffff\6\11\1\uffff";
    static final String dfa_121s = "\1\5\1\uffff\6\101\1\5\1\uffff\6\101\1\uffff";
    static final String dfa_122s = "\1\105\1\uffff\6\103\1\75\1\uffff\6\103\1\uffff";
    static final String dfa_123s = "\1\uffff\1\1\7\uffff\1\2\6\uffff\1\3";
    static final String dfa_124s = "\21\uffff}>";
    static final String[] dfa_125s = {
            "\1\2\46\uffff\1\3\1\5\1\4\1\6\10\uffff\1\7\14\uffff\1\1",
            "",
            "\1\11\1\uffff\1\10",
            "\1\11\1\uffff\1\10",
            "\1\11\1\uffff\1\10",
            "\1\11\1\uffff\1\10",
            "\1\11\1\uffff\1\10",
            "\1\11\1\uffff\1\10",
            "\1\12\46\uffff\1\13\1\15\1\14\1\16\10\uffff\1\17\4\uffff\1\20",
            "",
            "\1\11\1\uffff\1\10",
            "\1\11\1\uffff\1\10",
            "\1\11\1\uffff\1\10",
            "\1\11\1\uffff\1\10",
            "\1\11\1\uffff\1\10",
            "\1\11\1\uffff\1\10",
            ""
    };

    static final short[] dfa_119 = DFA.unpackEncodedString(dfa_119s);
    static final short[] dfa_120 = DFA.unpackEncodedString(dfa_120s);
    static final char[] dfa_121 = DFA.unpackEncodedStringToUnsignedChars(dfa_121s);
    static final char[] dfa_122 = DFA.unpackEncodedStringToUnsignedChars(dfa_122s);
    static final short[] dfa_123 = DFA.unpackEncodedString(dfa_123s);
    static final short[] dfa_124 = DFA.unpackEncodedString(dfa_124s);
    static final short[][] dfa_125 = unpackEncodedStringArray(dfa_125s);

    class DFA185 extends DFA {

        public DFA185(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 185;
            this.eot = dfa_119;
            this.eof = dfa_120;
            this.min = dfa_121;
            this.max = dfa_122;
            this.accept = dfa_123;
            this.special = dfa_124;
            this.transition = dfa_125;
        }
        public String getDescription() {
            return "9755:3: ( ( ( (lv_static_1_0= 'static' ) ) ( (lv_extension_2_0= 'extension' ) )? ( ( ruleQualifiedNameInStaticImport ) ) ( ( (lv_wildcard_4_0= '*' ) ) | ( (lv_memberName_5_0= ruleValidID ) ) ) ) | ( ( ruleQualifiedName ) ) | ( (lv_importedNamespace_7_0= ruleQualifiedNameWithWildcard ) ) )";
        }
    }
 

    public static final BitSet FOLLOW_1 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_2 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x0000000000006000L});
    public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x0100F00000000020L});
    public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000710586002L});
    public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x0000000710506002L});
    public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000000710406002L});
    public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000F00000000020L});
    public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000000008002L});
    public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x0000000000030000L});
    public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000000406000L});
    public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000000002800000L});
    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000000000006020L});
    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000000001010000L});
    public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x0100F00000008020L,0x0000000000200000L});
    public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x000000000C000002L});
    public static final BitSet FOLLOW_22 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_23 = new BitSet(new long[]{0x0000000010006000L});
    public static final BitSet FOLLOW_24 = new BitSet(new long[]{0x0000000040006020L});
    public static final BitSet FOLLOW_25 = new BitSet(new long[]{0x0000000040016020L});
    public static final BitSet FOLLOW_26 = new BitSet(new long[]{0x0000000000240002L});
    public static final BitSet FOLLOW_27 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_28 = new BitSet(new long[]{0x0000000080000040L});
    public static final BitSet FOLLOW_29 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_30 = new BitSet(new long[]{0x0000000700006000L});
    public static final BitSet FOLLOW_31 = new BitSet(new long[]{0x0000000200000000L});
    public static final BitSet FOLLOW_32 = new BitSet(new long[]{0x0000000822800000L});
    public static final BitSet FOLLOW_33 = new BitSet(new long[]{0x0000000822000000L});
    public static final BitSet FOLLOW_34 = new BitSet(new long[]{0x0000000022010000L});
    public static final BitSet FOLLOW_35 = new BitSet(new long[]{0x009FFFF040006020L});
    public static final BitSet FOLLOW_36 = new BitSet(new long[]{0x0000FFF000006020L});
    public static final BitSet FOLLOW_37 = new BitSet(new long[]{0x0000FFF000000020L});
    public static final BitSet FOLLOW_38 = new BitSet(new long[]{0x0800000000000020L});
    public static final BitSet FOLLOW_39 = new BitSet(new long[]{0x0000F00000040002L});
    public static final BitSet FOLLOW_40 = new BitSet(new long[]{0x0000F00000000002L});
    public static final BitSet FOLLOW_41 = new BitSet(new long[]{0x001F000000006000L});
    public static final BitSet FOLLOW_42 = new BitSet(new long[]{0x0002F7F000000020L});
    public static final BitSet FOLLOW_43 = new BitSet(new long[]{0x0000F7F000000020L});
    public static final BitSet FOLLOW_44 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_45 = new BitSet(new long[]{0x0004000000000000L});
    public static final BitSet FOLLOW_46 = new BitSet(new long[]{0x0010F7F000000020L});
    public static final BitSet FOLLOW_47 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_48 = new BitSet(new long[]{0x0060F00000000002L});
    public static final BitSet FOLLOW_49 = new BitSet(new long[]{0x0040F00000000002L});
    public static final BitSet FOLLOW_50 = new BitSet(new long[]{0x0000F00000010002L});
    public static final BitSet FOLLOW_51 = new BitSet(new long[]{0x0080000000006000L});
    public static final BitSet FOLLOW_52 = new BitSet(new long[]{0x0100F03000800020L});
    public static final BitSet FOLLOW_53 = new BitSet(new long[]{0x0100F02000800020L});
    public static final BitSet FOLLOW_54 = new BitSet(new long[]{0x0100F00000800020L});
    public static final BitSet FOLLOW_55 = new BitSet(new long[]{0x0100F01000800020L});
    public static final BitSet FOLLOW_56 = new BitSet(new long[]{0x0000000000008000L});
    public static final BitSet FOLLOW_57 = new BitSet(new long[]{0x0000F03000026020L});
    public static final BitSet FOLLOW_58 = new BitSet(new long[]{0x0000F03000006020L});
    public static final BitSet FOLLOW_59 = new BitSet(new long[]{0x0200000020000002L});
    public static final BitSet FOLLOW_60 = new BitSet(new long[]{0x0000000020010002L});
    public static final BitSet FOLLOW_61 = new BitSet(new long[]{0x0000F02000000020L});
    public static final BitSet FOLLOW_62 = new BitSet(new long[]{0x0000F01000000020L});
    public static final BitSet FOLLOW_63 = new BitSet(new long[]{0x0000000800000002L});
    public static final BitSet FOLLOW_64 = new BitSet(new long[]{0x0400000000000002L});
    public static final BitSet FOLLOW_65 = new BitSet(new long[]{0x7000000000000040L,0x0000000000000001L});
    public static final BitSet FOLLOW_66 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000001L});
    public static final BitSet FOLLOW_67 = new BitSet(new long[]{0x8000000000000000L,0x0000000000000001L});
    public static final BitSet FOLLOW_68 = new BitSet(new long[]{0x3000000000000040L});
    public static final BitSet FOLLOW_69 = new BitSet(new long[]{0x4BFFFFFFFEB8A1F0L,0x005FFF1508000034L});
    public static final BitSet FOLLOW_70 = new BitSet(new long[]{0x4BFFFFFFFEB8A1F0L,0x005FFF1508000036L});
    public static final BitSet FOLLOW_71 = new BitSet(new long[]{0x0000000000800002L});
    public static final BitSet FOLLOW_72 = new BitSet(new long[]{0x1000F00000000020L});
    public static final BitSet FOLLOW_73 = new BitSet(new long[]{0x0000000800000002L,0x0000000000000004L});
    public static final BitSet FOLLOW_74 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
    public static final BitSet FOLLOW_75 = new BitSet(new long[]{0x4BFFFFFFBEB8A1F0L,0x005FFF1508000034L});
    public static final BitSet FOLLOW_76 = new BitSet(new long[]{0x0000000001800002L,0x00000000000007C0L});
    public static final BitSet FOLLOW_77 = new BitSet(new long[]{0x0000000000800000L});
    public static final BitSet FOLLOW_78 = new BitSet(new long[]{0x0000000001000000L,0x0000000000000800L});
    public static final BitSet FOLLOW_79 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000800L});
    public static final BitSet FOLLOW_80 = new BitSet(new long[]{0x0000000000000002L,0x0000000000001000L});
    public static final BitSet FOLLOW_81 = new BitSet(new long[]{0x0000000000000002L,0x0000000000002000L});
    public static final BitSet FOLLOW_82 = new BitSet(new long[]{0x0000000000000002L,0x000000000003C000L});
    public static final BitSet FOLLOW_83 = new BitSet(new long[]{0x0000000001800002L,0x0000000000040800L});
    public static final BitSet FOLLOW_84 = new BitSet(new long[]{0x8000000001800002L,0x0000000000F80000L});
    public static final BitSet FOLLOW_85 = new BitSet(new long[]{0x8000000000000000L});
    public static final BitSet FOLLOW_86 = new BitSet(new long[]{0x0000000001000000L});
    public static final BitSet FOLLOW_87 = new BitSet(new long[]{0x0000000000800000L,0x0000000000200000L});
    public static final BitSet FOLLOW_88 = new BitSet(new long[]{0x4000000080000002L});
    public static final BitSet FOLLOW_89 = new BitSet(new long[]{0x2000000000000002L,0x0000000007000000L});
    public static final BitSet FOLLOW_90 = new BitSet(new long[]{0x0000000000200002L});
    public static final BitSet FOLLOW_91 = new BitSet(new long[]{0x0000000000000002L,0x0000000030000000L});
    public static final BitSet FOLLOW_92 = new BitSet(new long[]{0x0000000000000002L,0x00000000C0000008L});
    public static final BitSet FOLLOW_93 = new BitSet(new long[]{0x03FFFFFF1E382020L,0x0000000000000030L});
    public static final BitSet FOLLOW_94 = new BitSet(new long[]{0x03FFFFFF1EB82020L,0x0000000000000034L});
    public static final BitSet FOLLOW_95 = new BitSet(new long[]{0x1100F00000008020L,0x0000000000200000L});
    public static final BitSet FOLLOW_96 = new BitSet(new long[]{0x0800000000008002L,0x00000000C0000008L});
    public static final BitSet FOLLOW_97 = new BitSet(new long[]{0x4BFFFFFFBEBAA1F0L,0x005FFF1708200034L});
    public static final BitSet FOLLOW_98 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_99 = new BitSet(new long[]{0x0800000000000002L,0x00000000C0000008L});
    public static final BitSet FOLLOW_100 = new BitSet(new long[]{0x0000000040010000L});
    public static final BitSet FOLLOW_101 = new BitSet(new long[]{0x0800000000000000L});
    public static final BitSet FOLLOW_102 = new BitSet(new long[]{0x4BFFFFFFBEB8A1F0L,0x005FFF1508000035L});
    public static final BitSet FOLLOW_103 = new BitSet(new long[]{0x0000000000010000L,0x0000000000000001L});
    public static final BitSet FOLLOW_104 = new BitSet(new long[]{0x4BFFFFFFBEB8A1F0L,0x005FFF1708200035L});
    public static final BitSet FOLLOW_105 = new BitSet(new long[]{0x0000000000010000L,0x0000000200000000L});
    public static final BitSet FOLLOW_106 = new BitSet(new long[]{0x4BFFFFFFBEB8A1F2L,0x005FFF1508000036L});
    public static final BitSet FOLLOW_107 = new BitSet(new long[]{0x4BFFFFFFBEB8A1F2L,0x005FFF1508000034L});
    public static final BitSet FOLLOW_108 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
    public static final BitSet FOLLOW_109 = new BitSet(new long[]{0x4BFFFFFFBEB8A1F0L,0x005FFF1508200034L});
    public static final BitSet FOLLOW_110 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
    public static final BitSet FOLLOW_111 = new BitSet(new long[]{0x0100F00040018020L,0x000000E000200000L});
    public static final BitSet FOLLOW_112 = new BitSet(new long[]{0x0000000040000000L});
    public static final BitSet FOLLOW_113 = new BitSet(new long[]{0x0000000000010000L,0x000000A000000000L});
    public static final BitSet FOLLOW_114 = new BitSet(new long[]{0x0000000000010000L,0x0000002000000000L});
    public static final BitSet FOLLOW_115 = new BitSet(new long[]{0x4BFFFFFFBEB8A1F0L,0x005FFF1508000036L});
    public static final BitSet FOLLOW_116 = new BitSet(new long[]{0x0000000000010000L,0x0000000000000002L});
    public static final BitSet FOLLOW_117 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
    public static final BitSet FOLLOW_118 = new BitSet(new long[]{0x4BFFFFFFBEBAA1F0L,0x005FFF1508000034L});
    public static final BitSet FOLLOW_119 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
    public static final BitSet FOLLOW_120 = new BitSet(new long[]{0x0800000000008002L});
    public static final BitSet FOLLOW_121 = new BitSet(new long[]{0x0800000000000002L});
    public static final BitSet FOLLOW_122 = new BitSet(new long[]{0x0800000000808002L});
    public static final BitSet FOLLOW_123 = new BitSet(new long[]{0x0800000000020000L});
    public static final BitSet FOLLOW_124 = new BitSet(new long[]{0x0000000000000000L,0x00A0000000000000L});
    public static final BitSet FOLLOW_125 = new BitSet(new long[]{0x0000000000000002L,0x00A0000000000000L});
    public static final BitSet FOLLOW_126 = new BitSet(new long[]{0x0000000000000140L});
    public static final BitSet FOLLOW_127 = new BitSet(new long[]{0x0100F00000028020L,0x0000000000200000L});
    public static final BitSet FOLLOW_128 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
    public static final BitSet FOLLOW_129 = new BitSet(new long[]{0x0000000000800002L,0x0000000000000008L});
    public static final BitSet FOLLOW_130 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_131 = new BitSet(new long[]{0x2000000000000000L});
    public static final BitSet FOLLOW_132 = new BitSet(new long[]{0x0100F00000000020L,0x0000000000000020L});
    public static final BitSet FOLLOW_133 = new BitSet(new long[]{0x0100F00000000020L,0x0000000000000010L});
    public static final BitSet FOLLOW_134 = new BitSet(new long[]{0x2100F00000000020L});
    public static final BitSet FOLLOW_135 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
    public static final BitSet FOLLOW_136 = new BitSet(new long[]{0x0100F00000000022L});

}
