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:67: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:68:2: (iv_ruleXPackage= ruleXPackage EOF )
            // InternalXcore.g:69:2: iv_ruleXPackage= ruleXPackage EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXPackageRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXPackage=ruleXPackage();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXPackage; 
            }
            match(input,EOF,FollowSets000.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:76: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:79:28: ( ( () ( (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:80:1: ( () ( (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:80:1: ( () ( (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:80: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:80:2: ()
            // InternalXcore.g:81:5: 
            {
            if ( state.backtracking==0 ) {

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

            }

            // InternalXcore.g:86:2: ( (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:1: (lv_annotations_1_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:87:1: (lv_annotations_1_0= ruleXAnnotation )
            	    // InternalXcore.g:88:3: lv_annotations_1_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXPackageAccess().getAnnotationsXAnnotationParserRuleCall_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getXPackageAccess().getPackageKeyword_2());
                  
            }
            // InternalXcore.g:108:1: ( (lv_name_3_0= ruleQualifiedName ) )
            // InternalXcore.g:109:1: (lv_name_3_0= ruleQualifiedName )
            {
            // InternalXcore.g:109:1: (lv_name_3_0= ruleQualifiedName )
            // InternalXcore.g:110:3: lv_name_3_0= ruleQualifiedName
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXPackageAccess().getNameQualifiedNameParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FollowSets000.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:126:2: ( (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:127:1: (lv_importDirectives_4_0= ruleXImportDirective )
            	    {
            	    // InternalXcore.g:127:1: (lv_importDirectives_4_0= ruleXImportDirective )
            	    // InternalXcore.g:128:3: lv_importDirectives_4_0= ruleXImportDirective
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXPackageAccess().getImportDirectivesXImportDirectiveParserRuleCall_4_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:144: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:144:4: ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (lv_annotationDirectives_5_0= ruleXAnnotationDirective )
            	    {
            	    // InternalXcore.g:151:1: (lv_annotationDirectives_5_0= ruleXAnnotationDirective )
            	    // InternalXcore.g:152:3: lv_annotationDirectives_5_0= ruleXAnnotationDirective
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXPackageAccess().getAnnotationDirectivesXAnnotationDirectiveParserRuleCall_5_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:168: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:169:1: (lv_classifiers_6_0= ruleXClassifier )
            	    {
            	    // InternalXcore.g:169:1: (lv_classifiers_6_0= ruleXClassifier )
            	    // InternalXcore.g:170:3: lv_classifiers_6_0= ruleXClassifier
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXPackageAccess().getClassifiersXClassifierParserRuleCall_6_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:194: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:195:2: (iv_ruleXAnnotation= ruleXAnnotation EOF )
            // InternalXcore.g:196:2: iv_ruleXAnnotation= ruleXAnnotation EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXAnnotationRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXAnnotation=ruleXAnnotation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXAnnotation; 
            }
            match(input,EOF,FollowSets000.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:203: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:206:28: ( (otherlv_0= '@' ( ( ruleXQualifiedName ) ) (otherlv_2= '(' ( (lv_details_3_0= ruleXStringToStringMapEntry ) ) (otherlv_4= ',' ( (lv_details_5_0= ruleXStringToStringMapEntry ) ) )* otherlv_6= ')' )? ) )
            // InternalXcore.g:207:1: (otherlv_0= '@' ( ( ruleXQualifiedName ) ) (otherlv_2= '(' ( (lv_details_3_0= ruleXStringToStringMapEntry ) ) (otherlv_4= ',' ( (lv_details_5_0= ruleXStringToStringMapEntry ) ) )* otherlv_6= ')' )? )
            {
            // InternalXcore.g:207:1: (otherlv_0= '@' ( ( ruleXQualifiedName ) ) (otherlv_2= '(' ( (lv_details_3_0= ruleXStringToStringMapEntry ) ) (otherlv_4= ',' ( (lv_details_5_0= ruleXStringToStringMapEntry ) ) )* otherlv_6= ')' )? )
            // InternalXcore.g:207: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,FollowSets000.FOLLOW_8); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getXAnnotationAccess().getCommercialAtKeyword_0());
                  
            }
            // InternalXcore.g:211:1: ( ( ruleXQualifiedName ) )
            // InternalXcore.g:212:1: ( ruleXQualifiedName )
            {
            // InternalXcore.g:212:1: ( ruleXQualifiedName )
            // InternalXcore.g:213:3: ruleXQualifiedName
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getXAnnotationRule());
              	        }
                      
            }
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXAnnotationAccess().getSourceXAnnotationDirectiveCrossReference_1_0()); 
              	    
            }
            pushFollow(FollowSets000.FOLLOW_9);
            ruleXQualifiedName();

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

            }


            }

            // InternalXcore.g:226:2: (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:226:4: otherlv_2= '(' ( (lv_details_3_0= ruleXStringToStringMapEntry ) ) (otherlv_4= ',' ( (lv_details_5_0= ruleXStringToStringMapEntry ) ) )* otherlv_6= ')'
                    {
                    otherlv_2=(Token)match(input,15,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_2, grammarAccess.getXAnnotationAccess().getLeftParenthesisKeyword_2_0());
                          
                    }
                    // InternalXcore.g:230:1: ( (lv_details_3_0= ruleXStringToStringMapEntry ) )
                    // InternalXcore.g:231:1: (lv_details_3_0= ruleXStringToStringMapEntry )
                    {
                    // InternalXcore.g:231:1: (lv_details_3_0= ruleXStringToStringMapEntry )
                    // InternalXcore.g:232:3: lv_details_3_0= ruleXStringToStringMapEntry
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXAnnotationAccess().getDetailsXStringToStringMapEntryParserRuleCall_2_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:248:2: (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:248:4: otherlv_4= ',' ( (lv_details_5_0= ruleXStringToStringMapEntry ) )
                    	    {
                    	    otherlv_4=(Token)match(input,16,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_4, grammarAccess.getXAnnotationAccess().getCommaKeyword_2_2_0());
                    	          
                    	    }
                    	    // InternalXcore.g:252:1: ( (lv_details_5_0= ruleXStringToStringMapEntry ) )
                    	    // InternalXcore.g:253:1: (lv_details_5_0= ruleXStringToStringMapEntry )
                    	    {
                    	    // InternalXcore.g:253:1: (lv_details_5_0= ruleXStringToStringMapEntry )
                    	    // InternalXcore.g:254:3: lv_details_5_0= ruleXStringToStringMapEntry
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXAnnotationAccess().getDetailsXStringToStringMapEntryParserRuleCall_2_2_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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,FollowSets000.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:282: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:283:2: (iv_ruleXStringToStringMapEntry= ruleXStringToStringMapEntry EOF )
            // InternalXcore.g:284:2: iv_ruleXStringToStringMapEntry= ruleXStringToStringMapEntry EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXStringToStringMapEntryRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXStringToStringMapEntry=ruleXStringToStringMapEntry();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXStringToStringMapEntry; 
            }
            match(input,EOF,FollowSets000.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:291: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:294:28: ( ( ( (lv_key_0_0= ruleQualifiedName ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_STRING ) ) ) )
            // InternalXcore.g:295:1: ( ( (lv_key_0_0= ruleQualifiedName ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_STRING ) ) )
            {
            // InternalXcore.g:295:1: ( ( (lv_key_0_0= ruleQualifiedName ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_STRING ) ) )
            // InternalXcore.g:295:2: ( (lv_key_0_0= ruleQualifiedName ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_STRING ) )
            {
            // InternalXcore.g:295:2: ( (lv_key_0_0= ruleQualifiedName ) )
            // InternalXcore.g:296:1: (lv_key_0_0= ruleQualifiedName )
            {
            // InternalXcore.g:296:1: (lv_key_0_0= ruleQualifiedName )
            // InternalXcore.g:297:3: lv_key_0_0= ruleQualifiedName
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXStringToStringMapEntryAccess().getKeyQualifiedNameParserRuleCall_0_0()); 
              	    
            }
            pushFollow(FollowSets000.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,FollowSets000.FOLLOW_12); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXStringToStringMapEntryAccess().getEqualsSignKeyword_1());
                  
            }
            // InternalXcore.g:317:1: ( (lv_value_2_0= RULE_STRING ) )
            // InternalXcore.g:318:1: (lv_value_2_0= RULE_STRING )
            {
            // InternalXcore.g:318:1: (lv_value_2_0= RULE_STRING )
            // InternalXcore.g:319:3: lv_value_2_0= RULE_STRING
            {
            lv_value_2_0=(Token)match(input,RULE_STRING,FollowSets000.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:343: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:344:2: (iv_ruleXImportDirective= ruleXImportDirective EOF )
            // InternalXcore.g:345:2: iv_ruleXImportDirective= ruleXImportDirective EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXImportDirectiveRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXImportDirective=ruleXImportDirective();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXImportDirective; 
            }
            match(input,EOF,FollowSets000.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:352: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:355:28: ( ( () otherlv_1= 'import' ( ( (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard ) ) | ( ( ruleQualifiedName ) ) ) ) )
            // InternalXcore.g:356:1: ( () otherlv_1= 'import' ( ( (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard ) ) | ( ( ruleQualifiedName ) ) ) )
            {
            // InternalXcore.g:356:1: ( () otherlv_1= 'import' ( ( (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard ) ) | ( ( ruleQualifiedName ) ) ) )
            // InternalXcore.g:356:2: () otherlv_1= 'import' ( ( (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard ) ) | ( ( ruleQualifiedName ) ) )
            {
            // InternalXcore.g:356:2: ()
            // InternalXcore.g:357:5: 
            {
            if ( state.backtracking==0 ) {

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

            }

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

                  	newLeafNode(otherlv_1, grammarAccess.getXImportDirectiveAccess().getImportKeyword_1());
                  
            }
            // InternalXcore.g:366:1: ( ( (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard ) ) | ( ( ruleQualifiedName ) ) )
            int alt7=2;
            alt7 = dfa7.predict(input);
            switch (alt7) {
                case 1 :
                    // InternalXcore.g:366:2: ( (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard ) )
                    {
                    // InternalXcore.g:366:2: ( (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard ) )
                    // InternalXcore.g:367:1: (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard )
                    {
                    // InternalXcore.g:367:1: (lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard )
                    // InternalXcore.g:368:3: lv_importedNamespace_2_0= ruleQualifiedNameWithWildcard
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXImportDirectiveAccess().getImportedNamespaceQualifiedNameWithWildcardParserRuleCall_2_0_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:385:6: ( ( ruleQualifiedName ) )
                    {
                    // InternalXcore.g:385:6: ( ( ruleQualifiedName ) )
                    // InternalXcore.g:386:1: ( ruleQualifiedName )
                    {
                    // InternalXcore.g:386:1: ( ruleQualifiedName )
                    // InternalXcore.g:387:3: ruleQualifiedName
                    {
                    if ( state.backtracking==0 ) {

                      			if (current==null) {
                      	            current = createModelElement(grammarAccess.getXImportDirectiveRule());
                      	        }
                              
                    }
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXImportDirectiveAccess().getImportedObjectEObjectCrossReference_2_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:408: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:409:2: (iv_ruleXAnnotationDirective= ruleXAnnotationDirective EOF )
            // InternalXcore.g:410:2: iv_ruleXAnnotationDirective= ruleXAnnotationDirective EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXAnnotationDirectiveRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXAnnotationDirective=ruleXAnnotationDirective();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXAnnotationDirective; 
            }
            match(input,EOF,FollowSets000.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:417: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:420:28: ( ( ( ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (otherlv_0= 'annotation' ( (lv_sourceURI_1_0= RULE_STRING ) ) ) ) otherlv_2= 'as' ( (lv_name_3_0= ruleValidID ) ) ) )
            // InternalXcore.g:421:1: ( ( ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (otherlv_0= 'annotation' ( (lv_sourceURI_1_0= RULE_STRING ) ) ) ) otherlv_2= 'as' ( (lv_name_3_0= ruleValidID ) ) )
            {
            // InternalXcore.g:421:1: ( ( ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (otherlv_0= 'annotation' ( (lv_sourceURI_1_0= RULE_STRING ) ) ) ) otherlv_2= 'as' ( (lv_name_3_0= ruleValidID ) ) )
            // InternalXcore.g:421:2: ( ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (otherlv_0= 'annotation' ( (lv_sourceURI_1_0= RULE_STRING ) ) ) ) otherlv_2= 'as' ( (lv_name_3_0= ruleValidID ) )
            {
            // InternalXcore.g:421:2: ( ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (otherlv_0= 'annotation' ( (lv_sourceURI_1_0= RULE_STRING ) ) ) )
            // InternalXcore.g:421:3: ( ( 'annotation' ( ( RULE_STRING ) ) ) )=> (otherlv_0= 'annotation' ( (lv_sourceURI_1_0= RULE_STRING ) ) )
            {
            // InternalXcore.g:427:6: (otherlv_0= 'annotation' ( (lv_sourceURI_1_0= RULE_STRING ) ) )
            // InternalXcore.g:427:8: otherlv_0= 'annotation' ( (lv_sourceURI_1_0= RULE_STRING ) )
            {
            otherlv_0=(Token)match(input,20,FollowSets000.FOLLOW_12); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getXAnnotationDirectiveAccess().getAnnotationKeyword_0_0_0());
                  
            }
            // InternalXcore.g:431:1: ( (lv_sourceURI_1_0= RULE_STRING ) )
            // InternalXcore.g:432:1: (lv_sourceURI_1_0= RULE_STRING )
            {
            // InternalXcore.g:432:1: (lv_sourceURI_1_0= RULE_STRING )
            // InternalXcore.g:433:3: lv_sourceURI_1_0= RULE_STRING
            {
            lv_sourceURI_1_0=(Token)match(input,RULE_STRING,FollowSets000.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,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getXAnnotationDirectiveAccess().getAsKeyword_1());
                  
            }
            // InternalXcore.g:453:1: ( (lv_name_3_0= ruleValidID ) )
            // InternalXcore.g:454:1: (lv_name_3_0= ruleValidID )
            {
            // InternalXcore.g:454:1: (lv_name_3_0= ruleValidID )
            // InternalXcore.g:455:3: lv_name_3_0= ruleValidID
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXAnnotationDirectiveAccess().getNameValidIDParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FollowSets000.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:479: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:480:2: (iv_ruleXClassifier= ruleXClassifier EOF )
            // InternalXcore.g:481:2: iv_ruleXClassifier= ruleXClassifier EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXClassifierRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXClassifier=ruleXClassifier();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXClassifier; 
            }
            match(input,EOF,FollowSets000.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:488: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:491:28: ( (this_XClass_0= ruleXClass | this_XDataType_1= ruleXDataType | this_XEnum_2= ruleXEnum ) )
            // InternalXcore.g:492:1: (this_XClass_0= ruleXClass | this_XDataType_1= ruleXDataType | this_XEnum_2= ruleXEnum )
            {
            // InternalXcore.g:492:1: (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:493:5: this_XClass_0= ruleXClass
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXClassifierAccess().getXClassParserRuleCall_0()); 
                          
                    }
                    pushFollow(FollowSets000.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:503:5: this_XDataType_1= ruleXDataType
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXClassifierAccess().getXDataTypeParserRuleCall_1()); 
                          
                    }
                    pushFollow(FollowSets000.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:513:5: this_XEnum_2= ruleXEnum
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXClassifierAccess().getXEnumParserRuleCall_2()); 
                          
                    }
                    pushFollow(FollowSets000.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:529: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:530:2: (iv_ruleXDataType= ruleXDataType EOF )
            // InternalXcore.g:531:2: iv_ruleXDataType= ruleXDataType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXDataTypeRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXDataType=ruleXDataType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXDataType; 
            }
            match(input,EOF,FollowSets000.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:538: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:541:28: ( ( ( (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:542:1: ( ( (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:542:1: ( ( (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:542: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:542:2: ( (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:543:1: (lv_annotations_0_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:543:1: (lv_annotations_0_0= ruleXAnnotation )
            	    // InternalXcore.g:544:3: lv_annotations_0_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXDataTypeAccess().getAnnotationsXAnnotationParserRuleCall_0_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_15); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXDataTypeAccess().getTypeKeyword_1());
                  
            }
            // InternalXcore.g:564:1: ( (lv_name_2_0= RULE_ID ) )
            // InternalXcore.g:565:1: (lv_name_2_0= RULE_ID )
            {
            // InternalXcore.g:565:1: (lv_name_2_0= RULE_ID )
            // InternalXcore.g:566:3: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FollowSets000.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:582:2: (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:582:4: otherlv_3= '<' ( (lv_typeParameters_4_0= ruleXTypeParameter ) ) (otherlv_5= ',' ( (lv_typeParameters_6_0= ruleXTypeParameter ) ) )* otherlv_7= '>'
                    {
                    otherlv_3=(Token)match(input,23,FollowSets000.FOLLOW_17); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_3, grammarAccess.getXDataTypeAccess().getLessThanSignKeyword_3_0());
                          
                    }
                    // InternalXcore.g:586:1: ( (lv_typeParameters_4_0= ruleXTypeParameter ) )
                    // InternalXcore.g:587:1: (lv_typeParameters_4_0= ruleXTypeParameter )
                    {
                    // InternalXcore.g:587:1: (lv_typeParameters_4_0= ruleXTypeParameter )
                    // InternalXcore.g:588:3: lv_typeParameters_4_0= ruleXTypeParameter
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXDataTypeAccess().getTypeParametersXTypeParameterParserRuleCall_3_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:604:2: (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:604:4: otherlv_5= ',' ( (lv_typeParameters_6_0= ruleXTypeParameter ) )
                    	    {
                    	    otherlv_5=(Token)match(input,16,FollowSets000.FOLLOW_17); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_5, grammarAccess.getXDataTypeAccess().getCommaKeyword_3_2_0());
                    	          
                    	    }
                    	    // InternalXcore.g:608:1: ( (lv_typeParameters_6_0= ruleXTypeParameter ) )
                    	    // InternalXcore.g:609:1: (lv_typeParameters_6_0= ruleXTypeParameter )
                    	    {
                    	    // InternalXcore.g:609:1: (lv_typeParameters_6_0= ruleXTypeParameter )
                    	    // InternalXcore.g:610:3: lv_typeParameters_6_0= ruleXTypeParameter
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXDataTypeAccess().getTypeParametersXTypeParameterParserRuleCall_3_2_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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,FollowSets000.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,FollowSets000.FOLLOW_20); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_8, grammarAccess.getXDataTypeAccess().getWrapsKeyword_4());
                  
            }
            // InternalXcore.g:634:1: ( (lv_instanceType_9_0= ruleJvmTypeReference ) )
            // InternalXcore.g:635:1: (lv_instanceType_9_0= ruleJvmTypeReference )
            {
            // InternalXcore.g:635:1: (lv_instanceType_9_0= ruleJvmTypeReference )
            // InternalXcore.g:636:3: lv_instanceType_9_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXDataTypeAccess().getInstanceTypeJvmTypeReferenceParserRuleCall_5_0()); 
              	    
            }
            pushFollow(FollowSets000.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:652:2: ( ( ( ( ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) ) )* ) ) )
            // InternalXcore.g:654:1: ( ( ( ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) ) )* ) )
            {
            // InternalXcore.g:654:1: ( ( ( ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) ) )* ) )
            // InternalXcore.g:655:2: ( ( ({...}? => ( ({...}? => ( ( (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:658:2: ( ( ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) ) )* )
            // InternalXcore.g:659:3: ( ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) ) )*
            {
            // InternalXcore.g:659:3: ( ({...}? => ( ({...}? => ( ( (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:661:4: ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:661:4: ({...}? => ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:662: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:662:106: ( ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:663:6: ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6(), 0);
            	    // InternalXcore.g:666:6: ({...}? => ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:666:7: {...}? => ( ( (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:666:16: ( ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:666:17: ( (lv_serializable_11_0= 'create' ) ) ( (lv_createBody_12_0= ruleXBlockExpression ) )
            	    {
            	    // InternalXcore.g:666:17: ( (lv_serializable_11_0= 'create' ) )
            	    // InternalXcore.g:667:1: (lv_serializable_11_0= 'create' )
            	    {
            	    // InternalXcore.g:667:1: (lv_serializable_11_0= 'create' )
            	    // InternalXcore.g:668:3: lv_serializable_11_0= 'create'
            	    {
            	    lv_serializable_11_0=(Token)match(input,26,FollowSets000.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", true, "create");
            	      	    
            	    }

            	    }


            	    }

            	    // InternalXcore.g:681:2: ( (lv_createBody_12_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:682:1: (lv_createBody_12_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:682:1: (lv_createBody_12_0= ruleXBlockExpression )
            	    // InternalXcore.g:683:3: lv_createBody_12_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXDataTypeAccess().getCreateBodyXBlockExpressionParserRuleCall_6_0_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:706:4: ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:706:4: ({...}? => ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:707: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:707:106: ( ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:708:6: ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXDataTypeAccess().getUnorderedGroup_6(), 1);
            	    // InternalXcore.g:711:6: ({...}? => (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:711:7: {...}? => (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:711:16: (otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:711:18: otherlv_13= 'convert' ( (lv_convertBody_14_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_13=(Token)match(input,27,FollowSets000.FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_13, grammarAccess.getXDataTypeAccess().getConvertKeyword_6_1_0());
            	          
            	    }
            	    // InternalXcore.g:715:1: ( (lv_convertBody_14_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:716:1: (lv_convertBody_14_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:716:1: (lv_convertBody_14_0= ruleXBlockExpression )
            	    // InternalXcore.g:717:3: lv_convertBody_14_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXDataTypeAccess().getConvertBodyXBlockExpressionParserRuleCall_6_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:755: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:756:2: (iv_ruleXEnum= ruleXEnum EOF )
            // InternalXcore.g:757:2: iv_ruleXEnum= ruleXEnum EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXEnumRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXEnum=ruleXEnum();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXEnum; 
            }
            match(input,EOF,FollowSets000.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:764: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:767:28: ( ( ( (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:768:1: ( ( (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:768:1: ( ( (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:768: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:768:2: ( (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:769:1: (lv_annotations_0_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:769:1: (lv_annotations_0_0= ruleXAnnotation )
            	    // InternalXcore.g:770:3: lv_annotations_0_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXEnumAccess().getAnnotationsXAnnotationParserRuleCall_0_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_15); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXEnumAccess().getEnumKeyword_1());
                  
            }
            // InternalXcore.g:790:1: ( (lv_name_2_0= RULE_ID ) )
            // InternalXcore.g:791:1: (lv_name_2_0= RULE_ID )
            {
            // InternalXcore.g:791:1: (lv_name_2_0= RULE_ID )
            // InternalXcore.g:792:3: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)match(input,RULE_ID,FollowSets000.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,FollowSets000.FOLLOW_24); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getXEnumAccess().getLeftCurlyBracketKeyword_3());
                  
            }
            // InternalXcore.g:812:1: ( ( (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:812:2: ( (lv_literals_4_0= ruleXEnumLiteral ) ) ( (otherlv_5= ',' )? ( (lv_literals_6_0= ruleXEnumLiteral ) ) )*
                    {
                    // InternalXcore.g:812:2: ( (lv_literals_4_0= ruleXEnumLiteral ) )
                    // InternalXcore.g:813:1: (lv_literals_4_0= ruleXEnumLiteral )
                    {
                    // InternalXcore.g:813:1: (lv_literals_4_0= ruleXEnumLiteral )
                    // InternalXcore.g:814:3: lv_literals_4_0= ruleXEnumLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXEnumAccess().getLiteralsXEnumLiteralParserRuleCall_4_0_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:830:2: ( (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:830:3: (otherlv_5= ',' )? ( (lv_literals_6_0= ruleXEnumLiteral ) )
                    	    {
                    	    // InternalXcore.g:830:3: (otherlv_5= ',' )?
                    	    int alt14=2;
                    	    int LA14_0 = input.LA(1);

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

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

                    	            }
                    	            break;

                    	    }

                    	    // InternalXcore.g:834:3: ( (lv_literals_6_0= ruleXEnumLiteral ) )
                    	    // InternalXcore.g:835:1: (lv_literals_6_0= ruleXEnumLiteral )
                    	    {
                    	    // InternalXcore.g:835:1: (lv_literals_6_0= ruleXEnumLiteral )
                    	    // InternalXcore.g:836:3: lv_literals_6_0= ruleXEnumLiteral
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXEnumAccess().getLiteralsXEnumLiteralParserRuleCall_4_1_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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,FollowSets000.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:864: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:865:2: (iv_ruleXEnumLiteral= ruleXEnumLiteral EOF )
            // InternalXcore.g:866:2: iv_ruleXEnumLiteral= ruleXEnumLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXEnumLiteralRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXEnumLiteral=ruleXEnumLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXEnumLiteral; 
            }
            match(input,EOF,FollowSets000.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:873: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:876:28: ( ( ( (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:877:1: ( ( (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:877:1: ( ( (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:877: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:877:2: ( (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:878:1: (lv_annotations_0_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:878:1: (lv_annotations_0_0= ruleXAnnotation )
            	    // InternalXcore.g:879:3: lv_annotations_0_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXEnumLiteralAccess().getAnnotationsXAnnotationParserRuleCall_0_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:895:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalXcore.g:896:1: (lv_name_1_0= RULE_ID )
            {
            // InternalXcore.g:896:1: (lv_name_1_0= RULE_ID )
            // InternalXcore.g:897:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FollowSets000.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:913:2: (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:913:4: otherlv_2= 'as' ( (lv_literal_3_0= RULE_STRING ) )
                    {
                    otherlv_2=(Token)match(input,21,FollowSets000.FOLLOW_12); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_2, grammarAccess.getXEnumLiteralAccess().getAsKeyword_2_0());
                          
                    }
                    // InternalXcore.g:917:1: ( (lv_literal_3_0= RULE_STRING ) )
                    // InternalXcore.g:918:1: (lv_literal_3_0= RULE_STRING )
                    {
                    // InternalXcore.g:918:1: (lv_literal_3_0= RULE_STRING )
                    // InternalXcore.g:919:3: lv_literal_3_0= RULE_STRING
                    {
                    lv_literal_3_0=(Token)match(input,RULE_STRING,FollowSets000.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:935:4: (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:935:6: otherlv_4= '=' ( (lv_value_5_0= ruleSignedInt ) )
                    {
                    otherlv_4=(Token)match(input,18,FollowSets000.FOLLOW_28); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_4, grammarAccess.getXEnumLiteralAccess().getEqualsSignKeyword_3_0());
                          
                    }
                    // InternalXcore.g:939:1: ( (lv_value_5_0= ruleSignedInt ) )
                    // InternalXcore.g:940:1: (lv_value_5_0= ruleSignedInt )
                    {
                    // InternalXcore.g:940:1: (lv_value_5_0= ruleSignedInt )
                    // InternalXcore.g:941:3: lv_value_5_0= ruleSignedInt
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXEnumLiteralAccess().getValueSignedIntParserRuleCall_3_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:965: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:966:2: (iv_ruleSignedInt= ruleSignedInt EOF )
            // InternalXcore.g:967:2: iv_ruleSignedInt= ruleSignedInt EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getSignedIntRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleSignedInt=ruleSignedInt();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleSignedInt.getText(); 
            }
            match(input,EOF,FollowSets000.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:974: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:977:28: ( ( (kw= '-' )? this_INT_1= RULE_INT ) )
            // InternalXcore.g:978:1: ( (kw= '-' )? this_INT_1= RULE_INT )
            {
            // InternalXcore.g:978:1: ( (kw= '-' )? this_INT_1= RULE_INT )
            // InternalXcore.g:978:2: (kw= '-' )? this_INT_1= RULE_INT
            {
            // InternalXcore.g:978:2: (kw= '-' )?
            int alt20=2;
            int LA20_0 = input.LA(1);

            if ( (LA20_0==31) ) {
                alt20=1;
            }
            switch (alt20) {
                case 1 :
                    // InternalXcore.g:979:2: kw= '-'
                    {
                    kw=(Token)match(input,31,FollowSets000.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,FollowSets000.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:999: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:1000:2: (iv_ruleXClass= ruleXClass EOF )
            // InternalXcore.g:1001:2: iv_ruleXClass= ruleXClass EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXClassRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXClass=ruleXClass();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXClass; 
            }
            match(input,EOF,FollowSets000.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:1008: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:1011:28: ( ( () ( (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:1012:1: ( () ( (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:1012:1: ( () ( (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:1012: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:1012:2: ()
            // InternalXcore.g:1013:5: 
            {
            if ( state.backtracking==0 ) {

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

            }

            // InternalXcore.g:1018:2: ( (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:1019:1: (lv_annotations_1_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:1019:1: (lv_annotations_1_0= ruleXAnnotation )
            	    // InternalXcore.g:1020:3: lv_annotations_1_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXClassAccess().getAnnotationsXAnnotationParserRuleCall_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:1036: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:1036:4: ( ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'class' )
                    {
                    // InternalXcore.g:1036:4: ( ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'class' )
                    // InternalXcore.g:1036:5: ( (lv_abstract_2_0= 'abstract' ) )? otherlv_3= 'class'
                    {
                    // InternalXcore.g:1036: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:1037:1: (lv_abstract_2_0= 'abstract' )
                            {
                            // InternalXcore.g:1037:1: (lv_abstract_2_0= 'abstract' )
                            // InternalXcore.g:1038:3: lv_abstract_2_0= 'abstract'
                            {
                            lv_abstract_2_0=(Token)match(input,32,FollowSets000.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", true, "abstract");
                              	    
                            }

                            }


                            }
                            break;

                    }

                    otherlv_3=(Token)match(input,33,FollowSets000.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:1056:6: ( (lv_interface_4_0= 'interface' ) )
                    {
                    // InternalXcore.g:1056:6: ( (lv_interface_4_0= 'interface' ) )
                    // InternalXcore.g:1057:1: (lv_interface_4_0= 'interface' )
                    {
                    // InternalXcore.g:1057:1: (lv_interface_4_0= 'interface' )
                    // InternalXcore.g:1058:3: lv_interface_4_0= 'interface'
                    {
                    lv_interface_4_0=(Token)match(input,34,FollowSets000.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", true, "interface");
                      	    
                    }

                    }


                    }


                    }
                    break;

            }

            // InternalXcore.g:1071:3: ( (lv_name_5_0= RULE_ID ) )
            // InternalXcore.g:1072:1: (lv_name_5_0= RULE_ID )
            {
            // InternalXcore.g:1072:1: (lv_name_5_0= RULE_ID )
            // InternalXcore.g:1073:3: lv_name_5_0= RULE_ID
            {
            lv_name_5_0=(Token)match(input,RULE_ID,FollowSets000.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:1089:2: (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:1089:4: otherlv_6= '<' ( (lv_typeParameters_7_0= ruleXTypeParameter ) ) (otherlv_8= ',' ( (lv_typeParameters_9_0= ruleXTypeParameter ) ) )* otherlv_10= '>'
                    {
                    otherlv_6=(Token)match(input,23,FollowSets000.FOLLOW_17); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_6, grammarAccess.getXClassAccess().getLessThanSignKeyword_4_0());
                          
                    }
                    // InternalXcore.g:1093:1: ( (lv_typeParameters_7_0= ruleXTypeParameter ) )
                    // InternalXcore.g:1094:1: (lv_typeParameters_7_0= ruleXTypeParameter )
                    {
                    // InternalXcore.g:1094:1: (lv_typeParameters_7_0= ruleXTypeParameter )
                    // InternalXcore.g:1095:3: lv_typeParameters_7_0= ruleXTypeParameter
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXClassAccess().getTypeParametersXTypeParameterParserRuleCall_4_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:1111:2: (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:1111:4: otherlv_8= ',' ( (lv_typeParameters_9_0= ruleXTypeParameter ) )
                    	    {
                    	    otherlv_8=(Token)match(input,16,FollowSets000.FOLLOW_17); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_8, grammarAccess.getXClassAccess().getCommaKeyword_4_2_0());
                    	          
                    	    }
                    	    // InternalXcore.g:1115:1: ( (lv_typeParameters_9_0= ruleXTypeParameter ) )
                    	    // InternalXcore.g:1116:1: (lv_typeParameters_9_0= ruleXTypeParameter )
                    	    {
                    	    // InternalXcore.g:1116:1: (lv_typeParameters_9_0= ruleXTypeParameter )
                    	    // InternalXcore.g:1117:3: lv_typeParameters_9_0= ruleXTypeParameter
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXClassAccess().getTypeParametersXTypeParameterParserRuleCall_4_2_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_33); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

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

                    }
                    break;

            }

            // InternalXcore.g:1137: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:1137:5: otherlv_11= 'extends' ( (lv_superTypes_12_0= ruleXGenericType ) ) (otherlv_13= ',' ( (lv_superTypes_14_0= ruleXGenericType ) ) )*
                    {
                    otherlv_11=(Token)match(input,35,FollowSets000.FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_11, grammarAccess.getXClassAccess().getExtendsKeyword_5_0());
                          
                    }
                    // InternalXcore.g:1141:1: ( (lv_superTypes_12_0= ruleXGenericType ) )
                    // InternalXcore.g:1142:1: (lv_superTypes_12_0= ruleXGenericType )
                    {
                    // InternalXcore.g:1142:1: (lv_superTypes_12_0= ruleXGenericType )
                    // InternalXcore.g:1143:3: lv_superTypes_12_0= ruleXGenericType
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXClassAccess().getSuperTypesXGenericTypeParserRuleCall_5_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:1159:2: (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:1159:4: otherlv_13= ',' ( (lv_superTypes_14_0= ruleXGenericType ) )
                    	    {
                    	    otherlv_13=(Token)match(input,16,FollowSets000.FOLLOW_8); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_13, grammarAccess.getXClassAccess().getCommaKeyword_5_2_0());
                    	          
                    	    }
                    	    // InternalXcore.g:1163:1: ( (lv_superTypes_14_0= ruleXGenericType ) )
                    	    // InternalXcore.g:1164:1: (lv_superTypes_14_0= ruleXGenericType )
                    	    {
                    	    // InternalXcore.g:1164:1: (lv_superTypes_14_0= ruleXGenericType )
                    	    // InternalXcore.g:1165:3: lv_superTypes_14_0= ruleXGenericType
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXClassAccess().getSuperTypesXGenericTypeParserRuleCall_5_2_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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:1181:6: (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:1181:8: otherlv_15= 'wraps' ( (lv_instanceType_16_0= ruleJvmTypeReference ) )
                    {
                    otherlv_15=(Token)match(input,25,FollowSets000.FOLLOW_20); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_15, grammarAccess.getXClassAccess().getWrapsKeyword_6_0());
                          
                    }
                    // InternalXcore.g:1185:1: ( (lv_instanceType_16_0= ruleJvmTypeReference ) )
                    // InternalXcore.g:1186:1: (lv_instanceType_16_0= ruleJvmTypeReference )
                    {
                    // InternalXcore.g:1186:1: (lv_instanceType_16_0= ruleJvmTypeReference )
                    // InternalXcore.g:1187:3: lv_instanceType_16_0= ruleJvmTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXClassAccess().getInstanceTypeJvmTypeReferenceParserRuleCall_6_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_35); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_17, grammarAccess.getXClassAccess().getLeftCurlyBracketKeyword_7());
                  
            }
            // InternalXcore.g:1207:1: ( (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:1208:1: (lv_members_18_0= ruleXMember )
            	    {
            	    // InternalXcore.g:1208:1: (lv_members_18_0= ruleXMember )
            	    // InternalXcore.g:1209:3: lv_members_18_0= ruleXMember
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXClassAccess().getMembersXMemberParserRuleCall_8_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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,FollowSets000.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:1237: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:1238:2: (iv_ruleXMember= ruleXMember EOF )
            // InternalXcore.g:1239:2: iv_ruleXMember= ruleXMember EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXMemberRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXMember=ruleXMember();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXMember; 
            }
            match(input,EOF,FollowSets000.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:1246: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:1249:28: ( (this_XOperation_0= ruleXOperation | this_XAttribute_1= ruleXAttribute | this_XReference_2= ruleXReference ) )
            // InternalXcore.g:1250:1: (this_XOperation_0= ruleXOperation | this_XAttribute_1= ruleXAttribute | this_XReference_2= ruleXReference )
            {
            // InternalXcore.g:1250:1: (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:1251:5: this_XOperation_0= ruleXOperation
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXMemberAccess().getXOperationParserRuleCall_0()); 
                          
                    }
                    pushFollow(FollowSets000.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:1261:5: this_XAttribute_1= ruleXAttribute
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXMemberAccess().getXAttributeParserRuleCall_1()); 
                          
                    }
                    pushFollow(FollowSets000.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:1271:5: this_XReference_2= ruleXReference
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXMemberAccess().getXReferenceParserRuleCall_2()); 
                          
                    }
                    pushFollow(FollowSets000.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:1287: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:1288:2: (iv_ruleXAttribute= ruleXAttribute EOF )
            // InternalXcore.g:1289:2: iv_ruleXAttribute= ruleXAttribute EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXAttributeRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXAttribute=ruleXAttribute();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXAttribute; 
            }
            match(input,EOF,FollowSets000.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:1296: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:1299:28: ( ( () ( (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:1300:1: ( () ( (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:1300:1: ( () ( (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:1300: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:1300:2: ()
            // InternalXcore.g:1301:5: 
            {
            if ( state.backtracking==0 ) {

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

            }

            // InternalXcore.g:1306:2: ( (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:1307:1: (lv_annotations_1_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:1307:1: (lv_annotations_1_0= ruleXAnnotation )
            	    // InternalXcore.g:1308:3: lv_annotations_1_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXAttributeAccess().getAnnotationsXAnnotationParserRuleCall_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:1324: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:1326:1: ( ( ( ({...}? => ( ({...}? => ( (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:1326:1: ( ( ( ({...}? => ( ({...}? => ( (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:1327:2: ( ( ({...}? => ( ({...}? => ( (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:1330:2: ( ( ({...}? => ( ({...}? => ( (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:1331: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:1331: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' ) ) ) ) ) )*
            loop32:
            do {
                int alt32=9;
                alt32 = dfa32.predict(input);
                switch (alt32) {
            	case 1 :
            	    // InternalXcore.g:1333:4: ({...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) ) )
            	    {
            	    // InternalXcore.g:1333:4: ({...}? => ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) ) )
            	    // InternalXcore.g:1334: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:1334:107: ( ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) ) )
            	    // InternalXcore.g:1335:6: ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 0);
            	    // InternalXcore.g:1338:6: ({...}? => ( (lv_unordered_3_0= 'unordered' ) ) )
            	    // InternalXcore.g:1338:7: {...}? => ( (lv_unordered_3_0= 'unordered' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1338:16: ( (lv_unordered_3_0= 'unordered' ) )
            	    // InternalXcore.g:1339:1: (lv_unordered_3_0= 'unordered' )
            	    {
            	    // InternalXcore.g:1339:1: (lv_unordered_3_0= 'unordered' )
            	    // InternalXcore.g:1340:3: lv_unordered_3_0= 'unordered'
            	    {
            	    lv_unordered_3_0=(Token)match(input,36,FollowSets000.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", true, "unordered");
            	      	    
            	    }

            	    }


            	    }


            	    }

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

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalXcore.g:1360:4: ({...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) ) )
            	    {
            	    // InternalXcore.g:1360:4: ({...}? => ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) ) )
            	    // InternalXcore.g:1361: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:1361:107: ( ({...}? => ( (lv_unique_4_0= 'unique' ) ) ) )
            	    // InternalXcore.g:1362:6: ({...}? => ( (lv_unique_4_0= 'unique' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 1);
            	    // InternalXcore.g:1365:6: ({...}? => ( (lv_unique_4_0= 'unique' ) ) )
            	    // InternalXcore.g:1365:7: {...}? => ( (lv_unique_4_0= 'unique' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1365:16: ( (lv_unique_4_0= 'unique' ) )
            	    // InternalXcore.g:1366:1: (lv_unique_4_0= 'unique' )
            	    {
            	    // InternalXcore.g:1366:1: (lv_unique_4_0= 'unique' )
            	    // InternalXcore.g:1367:3: lv_unique_4_0= 'unique'
            	    {
            	    lv_unique_4_0=(Token)match(input,37,FollowSets000.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", true, "unique");
            	      	    
            	    }

            	    }


            	    }


            	    }

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

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalXcore.g:1387:4: ({...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) ) )
            	    {
            	    // InternalXcore.g:1387:4: ({...}? => ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) ) )
            	    // InternalXcore.g:1388: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:1388:107: ( ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) ) )
            	    // InternalXcore.g:1389:6: ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 2);
            	    // InternalXcore.g:1392:6: ({...}? => ( (lv_readonly_5_0= 'readonly' ) ) )
            	    // InternalXcore.g:1392:7: {...}? => ( (lv_readonly_5_0= 'readonly' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1392:16: ( (lv_readonly_5_0= 'readonly' ) )
            	    // InternalXcore.g:1393:1: (lv_readonly_5_0= 'readonly' )
            	    {
            	    // InternalXcore.g:1393:1: (lv_readonly_5_0= 'readonly' )
            	    // InternalXcore.g:1394:3: lv_readonly_5_0= 'readonly'
            	    {
            	    lv_readonly_5_0=(Token)match(input,38,FollowSets000.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", true, "readonly");
            	      	    
            	    }

            	    }


            	    }


            	    }

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

            	    }


            	    }


            	    }
            	    break;
            	case 4 :
            	    // InternalXcore.g:1414:4: ({...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) ) )
            	    {
            	    // InternalXcore.g:1414:4: ({...}? => ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) ) )
            	    // InternalXcore.g:1415: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:1415:107: ( ({...}? => ( (lv_transient_6_0= 'transient' ) ) ) )
            	    // InternalXcore.g:1416:6: ({...}? => ( (lv_transient_6_0= 'transient' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 3);
            	    // InternalXcore.g:1419:6: ({...}? => ( (lv_transient_6_0= 'transient' ) ) )
            	    // InternalXcore.g:1419:7: {...}? => ( (lv_transient_6_0= 'transient' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1419:16: ( (lv_transient_6_0= 'transient' ) )
            	    // InternalXcore.g:1420:1: (lv_transient_6_0= 'transient' )
            	    {
            	    // InternalXcore.g:1420:1: (lv_transient_6_0= 'transient' )
            	    // InternalXcore.g:1421:3: lv_transient_6_0= 'transient'
            	    {
            	    lv_transient_6_0=(Token)match(input,39,FollowSets000.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", true, "transient");
            	      	    
            	    }

            	    }


            	    }


            	    }

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

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalXcore.g:1441:4: ({...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) ) )
            	    {
            	    // InternalXcore.g:1441:4: ({...}? => ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) ) )
            	    // InternalXcore.g:1442: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:1442:107: ( ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) ) )
            	    // InternalXcore.g:1443:6: ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 4);
            	    // InternalXcore.g:1446:6: ({...}? => ( (lv_volatile_7_0= 'volatile' ) ) )
            	    // InternalXcore.g:1446:7: {...}? => ( (lv_volatile_7_0= 'volatile' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1446:16: ( (lv_volatile_7_0= 'volatile' ) )
            	    // InternalXcore.g:1447:1: (lv_volatile_7_0= 'volatile' )
            	    {
            	    // InternalXcore.g:1447:1: (lv_volatile_7_0= 'volatile' )
            	    // InternalXcore.g:1448:3: lv_volatile_7_0= 'volatile'
            	    {
            	    lv_volatile_7_0=(Token)match(input,40,FollowSets000.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", true, "volatile");
            	      	    
            	    }

            	    }


            	    }


            	    }

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

            	    }


            	    }


            	    }
            	    break;
            	case 6 :
            	    // InternalXcore.g:1468:4: ({...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) ) )
            	    {
            	    // InternalXcore.g:1468:4: ({...}? => ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) ) )
            	    // InternalXcore.g:1469: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:1469:107: ( ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) ) )
            	    // InternalXcore.g:1470:6: ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 5);
            	    // InternalXcore.g:1473:6: ({...}? => ( (lv_unsettable_8_0= 'unsettable' ) ) )
            	    // InternalXcore.g:1473:7: {...}? => ( (lv_unsettable_8_0= 'unsettable' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1473:16: ( (lv_unsettable_8_0= 'unsettable' ) )
            	    // InternalXcore.g:1474:1: (lv_unsettable_8_0= 'unsettable' )
            	    {
            	    // InternalXcore.g:1474:1: (lv_unsettable_8_0= 'unsettable' )
            	    // InternalXcore.g:1475:3: lv_unsettable_8_0= 'unsettable'
            	    {
            	    lv_unsettable_8_0=(Token)match(input,41,FollowSets000.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", true, "unsettable");
            	      	    
            	    }

            	    }


            	    }


            	    }

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

            	    }


            	    }


            	    }
            	    break;
            	case 7 :
            	    // InternalXcore.g:1495:4: ({...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) ) )
            	    {
            	    // InternalXcore.g:1495:4: ({...}? => ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) ) )
            	    // InternalXcore.g:1496: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:1496:107: ( ({...}? => ( (lv_derived_9_0= 'derived' ) ) ) )
            	    // InternalXcore.g:1497:6: ({...}? => ( (lv_derived_9_0= 'derived' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 6);
            	    // InternalXcore.g:1500:6: ({...}? => ( (lv_derived_9_0= 'derived' ) ) )
            	    // InternalXcore.g:1500:7: {...}? => ( (lv_derived_9_0= 'derived' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1500:16: ( (lv_derived_9_0= 'derived' ) )
            	    // InternalXcore.g:1501:1: (lv_derived_9_0= 'derived' )
            	    {
            	    // InternalXcore.g:1501:1: (lv_derived_9_0= 'derived' )
            	    // InternalXcore.g:1502:3: lv_derived_9_0= 'derived'
            	    {
            	    lv_derived_9_0=(Token)match(input,42,FollowSets000.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", true, "derived");
            	      	    
            	    }

            	    }


            	    }


            	    }

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

            	    }


            	    }


            	    }
            	    break;
            	case 8 :
            	    // InternalXcore.g:1522:4: ({...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) ) )
            	    {
            	    // InternalXcore.g:1522:4: ({...}? => ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) ) )
            	    // InternalXcore.g:1523: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:1523:107: ( ({...}? => ( (lv_iD_10_0= 'id' ) ) ) )
            	    // InternalXcore.g:1524:6: ({...}? => ( (lv_iD_10_0= 'id' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_2(), 7);
            	    // InternalXcore.g:1527:6: ({...}? => ( (lv_iD_10_0= 'id' ) ) )
            	    // InternalXcore.g:1527:7: {...}? => ( (lv_iD_10_0= 'id' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXAttribute", "true");
            	    }
            	    // InternalXcore.g:1527:16: ( (lv_iD_10_0= 'id' ) )
            	    // InternalXcore.g:1528:1: (lv_iD_10_0= 'id' )
            	    {
            	    // InternalXcore.g:1528:1: (lv_iD_10_0= 'id' )
            	    // InternalXcore.g:1529:3: lv_iD_10_0= 'id'
            	    {
            	    lv_iD_10_0=(Token)match(input,43,FollowSets000.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", true, "id");
            	      	    
            	    }

            	    }


            	    }


            	    }

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

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

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

            }

            // InternalXcore.g:1556:2: ( (lv_type_11_0= ruleXGenericType ) )
            // InternalXcore.g:1557:1: (lv_type_11_0= ruleXGenericType )
            {
            // InternalXcore.g:1557:1: (lv_type_11_0= ruleXGenericType )
            // InternalXcore.g:1558:3: lv_type_11_0= ruleXGenericType
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXAttributeAccess().getTypeXGenericTypeParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FollowSets000.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:1574:2: ( (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:1575:1: (lv_multiplicity_12_0= ruleXMultiplicity )
                    {
                    // InternalXcore.g:1575:1: (lv_multiplicity_12_0= ruleXMultiplicity )
                    // InternalXcore.g:1576:3: lv_multiplicity_12_0= ruleXMultiplicity
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXAttributeAccess().getMultiplicityXMultiplicityParserRuleCall_4_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:1592:3: ( (lv_name_13_0= RULE_ID ) )
            // InternalXcore.g:1593:1: (lv_name_13_0= RULE_ID )
            {
            // InternalXcore.g:1593:1: (lv_name_13_0= RULE_ID )
            // InternalXcore.g:1594:3: lv_name_13_0= RULE_ID
            {
            lv_name_13_0=(Token)match(input,RULE_ID,FollowSets000.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:1610:2: (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:1610:4: otherlv_14= '=' ( (lv_defaultValueLiteral_15_0= RULE_STRING ) )
                    {
                    otherlv_14=(Token)match(input,18,FollowSets000.FOLLOW_12); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_14, grammarAccess.getXAttributeAccess().getEqualsSignKeyword_6_0());
                          
                    }
                    // InternalXcore.g:1614:1: ( (lv_defaultValueLiteral_15_0= RULE_STRING ) )
                    // InternalXcore.g:1615:1: (lv_defaultValueLiteral_15_0= RULE_STRING )
                    {
                    // InternalXcore.g:1615:1: (lv_defaultValueLiteral_15_0= RULE_STRING )
                    // InternalXcore.g:1616:3: lv_defaultValueLiteral_15_0= RULE_STRING
                    {
                    lv_defaultValueLiteral_15_0=(Token)match(input,RULE_STRING,FollowSets000.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:1632: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:1634:1: ( ( ( ({...}? => ( ({...}? => (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:1634:1: ( ( ( ({...}? => ( ({...}? => (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:1635:2: ( ( ({...}? => ( ({...}? => (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:1638:2: ( ( ({...}? => ( ({...}? => (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:1639: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:1639: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 ) ) ) ) ) ) )*
            loop35:
            do {
                int alt35=5;
                alt35 = dfa35.predict(input);
                switch (alt35) {
            	case 1 :
            	    // InternalXcore.g:1641:4: ({...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:1641:4: ({...}? => ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:1642: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:1642:107: ( ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:1643:6: ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 0);
            	    // InternalXcore.g:1646:6: ({...}? => (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:1646:7: {...}? => (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:1646:16: (otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:1646:18: otherlv_17= 'get' ( (lv_getBody_18_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_17=(Token)match(input,44,FollowSets000.FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_17, grammarAccess.getXAttributeAccess().getGetKeyword_7_0_0());
            	          
            	    }
            	    // InternalXcore.g:1650:1: ( (lv_getBody_18_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:1651:1: (lv_getBody_18_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:1651:1: (lv_getBody_18_0= ruleXBlockExpression )
            	    // InternalXcore.g:1652:3: lv_getBody_18_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXAttributeAccess().getGetBodyXBlockExpressionParserRuleCall_7_0_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:1675:4: ({...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:1675:4: ({...}? => ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:1676: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:1676:107: ( ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:1677:6: ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 1);
            	    // InternalXcore.g:1680:6: ({...}? => (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:1680:7: {...}? => (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:1680:16: (otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:1680:18: otherlv_19= 'set' ( (lv_setBody_20_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_19=(Token)match(input,45,FollowSets000.FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_19, grammarAccess.getXAttributeAccess().getSetKeyword_7_1_0());
            	          
            	    }
            	    // InternalXcore.g:1684:1: ( (lv_setBody_20_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:1685:1: (lv_setBody_20_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:1685:1: (lv_setBody_20_0= ruleXBlockExpression )
            	    // InternalXcore.g:1686:3: lv_setBody_20_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXAttributeAccess().getSetBodyXBlockExpressionParserRuleCall_7_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:1709:4: ({...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:1709:4: ({...}? => ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:1710: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:1710:107: ( ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:1711:6: ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 2);
            	    // InternalXcore.g:1714:6: ({...}? => (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:1714:7: {...}? => (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:1714:16: (otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:1714:18: otherlv_21= 'isSet' ( (lv_isSetBody_22_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_21=(Token)match(input,46,FollowSets000.FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_21, grammarAccess.getXAttributeAccess().getIsSetKeyword_7_2_0());
            	          
            	    }
            	    // InternalXcore.g:1718:1: ( (lv_isSetBody_22_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:1719:1: (lv_isSetBody_22_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:1719:1: (lv_isSetBody_22_0= ruleXBlockExpression )
            	    // InternalXcore.g:1720:3: lv_isSetBody_22_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXAttributeAccess().getIsSetBodyXBlockExpressionParserRuleCall_7_2_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:1743:4: ({...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:1743:4: ({...}? => ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:1744: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:1744:107: ( ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:1745:6: ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXAttributeAccess().getUnorderedGroup_7(), 3);
            	    // InternalXcore.g:1748:6: ({...}? => (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:1748:7: {...}? => (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:1748:16: (otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:1748:18: otherlv_23= 'unset' ( (lv_unsetBody_24_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_23=(Token)match(input,47,FollowSets000.FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_23, grammarAccess.getXAttributeAccess().getUnsetKeyword_7_3_0());
            	          
            	    }
            	    // InternalXcore.g:1752:1: ( (lv_unsetBody_24_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:1753:1: (lv_unsetBody_24_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:1753:1: (lv_unsetBody_24_0= ruleXBlockExpression )
            	    // InternalXcore.g:1754:3: lv_unsetBody_24_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXAttributeAccess().getUnsetBodyXBlockExpressionParserRuleCall_7_3_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:1792: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:1793:2: (iv_ruleXReference= ruleXReference EOF )
            // InternalXcore.g:1794:2: iv_ruleXReference= ruleXReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXReferenceRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXReference=ruleXReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXReference; 
            }
            match(input,EOF,FollowSets000.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:1801: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:1804:28: ( ( () ( (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:1805:1: ( () ( (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:1805:1: ( () ( (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:1805: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:1805:2: ()
            // InternalXcore.g:1806:5: 
            {
            if ( state.backtracking==0 ) {

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

            }

            // InternalXcore.g:1811:2: ( (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:1812:1: (lv_annotations_1_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:1812:1: (lv_annotations_1_0= ruleXAnnotation )
            	    // InternalXcore.g:1813:3: lv_annotations_1_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXReferenceAccess().getAnnotationsXAnnotationParserRuleCall_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:1829: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:1829:4: ( ( (lv_containment_2_0= 'contains' ) ) ( (lv_resolveProxies_3_0= 'resolving' ) )? )
                    {
                    // InternalXcore.g:1829:4: ( ( (lv_containment_2_0= 'contains' ) ) ( (lv_resolveProxies_3_0= 'resolving' ) )? )
                    // InternalXcore.g:1829:5: ( (lv_containment_2_0= 'contains' ) ) ( (lv_resolveProxies_3_0= 'resolving' ) )?
                    {
                    // InternalXcore.g:1829:5: ( (lv_containment_2_0= 'contains' ) )
                    // InternalXcore.g:1830:1: (lv_containment_2_0= 'contains' )
                    {
                    // InternalXcore.g:1830:1: (lv_containment_2_0= 'contains' )
                    // InternalXcore.g:1831:3: lv_containment_2_0= 'contains'
                    {
                    lv_containment_2_0=(Token)match(input,48,FollowSets000.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", true, "contains");
                      	    
                    }

                    }


                    }

                    // InternalXcore.g:1844:2: ( (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:1845:1: (lv_resolveProxies_3_0= 'resolving' )
                            {
                            // InternalXcore.g:1845:1: (lv_resolveProxies_3_0= 'resolving' )
                            // InternalXcore.g:1846:3: lv_resolveProxies_3_0= 'resolving'
                            {
                            lv_resolveProxies_3_0=(Token)match(input,49,FollowSets000.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", true, "resolving");
                              	    
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:1860:6: ( ( (lv_resolveProxies_4_0= 'resolving' ) ) ( (lv_containment_5_0= 'contains' ) ) )
                    {
                    // InternalXcore.g:1860:6: ( ( (lv_resolveProxies_4_0= 'resolving' ) ) ( (lv_containment_5_0= 'contains' ) ) )
                    // InternalXcore.g:1860:7: ( (lv_resolveProxies_4_0= 'resolving' ) ) ( (lv_containment_5_0= 'contains' ) )
                    {
                    // InternalXcore.g:1860:7: ( (lv_resolveProxies_4_0= 'resolving' ) )
                    // InternalXcore.g:1861:1: (lv_resolveProxies_4_0= 'resolving' )
                    {
                    // InternalXcore.g:1861:1: (lv_resolveProxies_4_0= 'resolving' )
                    // InternalXcore.g:1862:3: lv_resolveProxies_4_0= 'resolving'
                    {
                    lv_resolveProxies_4_0=(Token)match(input,49,FollowSets000.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", true, "resolving");
                      	    
                    }

                    }


                    }

                    // InternalXcore.g:1875:2: ( (lv_containment_5_0= 'contains' ) )
                    // InternalXcore.g:1876:1: (lv_containment_5_0= 'contains' )
                    {
                    // InternalXcore.g:1876:1: (lv_containment_5_0= 'contains' )
                    // InternalXcore.g:1877:3: lv_containment_5_0= 'contains'
                    {
                    lv_containment_5_0=(Token)match(input,48,FollowSets000.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", true, "contains");
                      	    
                    }

                    }


                    }


                    }


                    }
                    break;
                case 3 :
                    // InternalXcore.g:1891:6: ( ( (lv_container_6_0= 'container' ) ) ( (lv_resolveProxies_7_0= 'resolving' ) )? )
                    {
                    // InternalXcore.g:1891:6: ( ( (lv_container_6_0= 'container' ) ) ( (lv_resolveProxies_7_0= 'resolving' ) )? )
                    // InternalXcore.g:1891:7: ( (lv_container_6_0= 'container' ) ) ( (lv_resolveProxies_7_0= 'resolving' ) )?
                    {
                    // InternalXcore.g:1891:7: ( (lv_container_6_0= 'container' ) )
                    // InternalXcore.g:1892:1: (lv_container_6_0= 'container' )
                    {
                    // InternalXcore.g:1892:1: (lv_container_6_0= 'container' )
                    // InternalXcore.g:1893:3: lv_container_6_0= 'container'
                    {
                    lv_container_6_0=(Token)match(input,50,FollowSets000.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", true, "container");
                      	    
                    }

                    }


                    }

                    // InternalXcore.g:1906:2: ( (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:1907:1: (lv_resolveProxies_7_0= 'resolving' )
                            {
                            // InternalXcore.g:1907:1: (lv_resolveProxies_7_0= 'resolving' )
                            // InternalXcore.g:1908:3: lv_resolveProxies_7_0= 'resolving'
                            {
                            lv_resolveProxies_7_0=(Token)match(input,49,FollowSets000.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", true, "resolving");
                              	    
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 4 :
                    // InternalXcore.g:1922:6: ( ( (lv_resolveProxies_8_0= 'resolving' ) ) ( (lv_container_9_0= 'container' ) ) )
                    {
                    // InternalXcore.g:1922:6: ( ( (lv_resolveProxies_8_0= 'resolving' ) ) ( (lv_container_9_0= 'container' ) ) )
                    // InternalXcore.g:1922:7: ( (lv_resolveProxies_8_0= 'resolving' ) ) ( (lv_container_9_0= 'container' ) )
                    {
                    // InternalXcore.g:1922:7: ( (lv_resolveProxies_8_0= 'resolving' ) )
                    // InternalXcore.g:1923:1: (lv_resolveProxies_8_0= 'resolving' )
                    {
                    // InternalXcore.g:1923:1: (lv_resolveProxies_8_0= 'resolving' )
                    // InternalXcore.g:1924:3: lv_resolveProxies_8_0= 'resolving'
                    {
                    lv_resolveProxies_8_0=(Token)match(input,49,FollowSets000.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", true, "resolving");
                      	    
                    }

                    }


                    }

                    // InternalXcore.g:1937:2: ( (lv_container_9_0= 'container' ) )
                    // InternalXcore.g:1938:1: (lv_container_9_0= 'container' )
                    {
                    // InternalXcore.g:1938:1: (lv_container_9_0= 'container' )
                    // InternalXcore.g:1939:3: lv_container_9_0= 'container'
                    {
                    lv_container_9_0=(Token)match(input,50,FollowSets000.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", true, "container");
                      	    
                    }

                    }


                    }


                    }


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

                          	newLeafNode(otherlv_10, grammarAccess.getXReferenceAccess().getRefersKeyword_2_4_0());
                          
                    }
                    // InternalXcore.g:1957:1: ( (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:1958:1: (lv_local_11_0= 'local' )
                            {
                            // InternalXcore.g:1958:1: (lv_local_11_0= 'local' )
                            // InternalXcore.g:1959:3: lv_local_11_0= 'local'
                            {
                            lv_local_11_0=(Token)match(input,52,FollowSets000.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", true, "local");
                              	    
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 6 :
                    // InternalXcore.g:1973:6: ( ( (lv_local_12_0= 'local' ) ) otherlv_13= 'refers' )
                    {
                    // InternalXcore.g:1973:6: ( ( (lv_local_12_0= 'local' ) ) otherlv_13= 'refers' )
                    // InternalXcore.g:1973:7: ( (lv_local_12_0= 'local' ) ) otherlv_13= 'refers'
                    {
                    // InternalXcore.g:1973:7: ( (lv_local_12_0= 'local' ) )
                    // InternalXcore.g:1974:1: (lv_local_12_0= 'local' )
                    {
                    // InternalXcore.g:1974:1: (lv_local_12_0= 'local' )
                    // InternalXcore.g:1975:3: lv_local_12_0= 'local'
                    {
                    lv_local_12_0=(Token)match(input,52,FollowSets000.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", true, "local");
                      	    
                    }

                    }


                    }

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

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

                    }


                    }
                    break;

            }

            // InternalXcore.g:1992: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:1994:1: ( ( ( ({...}? => ( ({...}? => ( (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:1994:1: ( ( ( ({...}? => ( ({...}? => ( (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:1995:2: ( ( ({...}? => ( ({...}? => ( (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:1998:2: ( ( ({...}? => ( ({...}? => ( (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:1999: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:1999: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' ) ) ) ) ) )*
            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:2001:4: ({...}? => ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) ) )
            	    {
            	    // InternalXcore.g:2001:4: ({...}? => ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) ) )
            	    // InternalXcore.g:2002: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:2002:107: ( ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) ) )
            	    // InternalXcore.g:2003:6: ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 0);
            	    // InternalXcore.g:2006:6: ({...}? => ( (lv_unordered_15_0= 'unordered' ) ) )
            	    // InternalXcore.g:2006:7: {...}? => ( (lv_unordered_15_0= 'unordered' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "true");
            	    }
            	    // InternalXcore.g:2006:16: ( (lv_unordered_15_0= 'unordered' ) )
            	    // InternalXcore.g:2007:1: (lv_unordered_15_0= 'unordered' )
            	    {
            	    // InternalXcore.g:2007:1: (lv_unordered_15_0= 'unordered' )
            	    // InternalXcore.g:2008:3: lv_unordered_15_0= 'unordered'
            	    {
            	    lv_unordered_15_0=(Token)match(input,36,FollowSets000.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", true, "unordered");
            	      	    
            	    }

            	    }


            	    }


            	    }

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

            	    }


            	    }


            	    }
            	    break;
            	case 2 :
            	    // InternalXcore.g:2028:4: ({...}? => ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) ) )
            	    {
            	    // InternalXcore.g:2028:4: ({...}? => ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) ) )
            	    // InternalXcore.g:2029: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:2029:107: ( ({...}? => ( (lv_unique_16_0= 'unique' ) ) ) )
            	    // InternalXcore.g:2030:6: ({...}? => ( (lv_unique_16_0= 'unique' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 1);
            	    // InternalXcore.g:2033:6: ({...}? => ( (lv_unique_16_0= 'unique' ) ) )
            	    // InternalXcore.g:2033:7: {...}? => ( (lv_unique_16_0= 'unique' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "true");
            	    }
            	    // InternalXcore.g:2033:16: ( (lv_unique_16_0= 'unique' ) )
            	    // InternalXcore.g:2034:1: (lv_unique_16_0= 'unique' )
            	    {
            	    // InternalXcore.g:2034:1: (lv_unique_16_0= 'unique' )
            	    // InternalXcore.g:2035:3: lv_unique_16_0= 'unique'
            	    {
            	    lv_unique_16_0=(Token)match(input,37,FollowSets000.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", true, "unique");
            	      	    
            	    }

            	    }


            	    }


            	    }

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

            	    }


            	    }


            	    }
            	    break;
            	case 3 :
            	    // InternalXcore.g:2055:4: ({...}? => ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) ) )
            	    {
            	    // InternalXcore.g:2055:4: ({...}? => ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) ) )
            	    // InternalXcore.g:2056: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:2056:107: ( ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) ) )
            	    // InternalXcore.g:2057:6: ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 2);
            	    // InternalXcore.g:2060:6: ({...}? => ( (lv_readonly_17_0= 'readonly' ) ) )
            	    // InternalXcore.g:2060:7: {...}? => ( (lv_readonly_17_0= 'readonly' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "true");
            	    }
            	    // InternalXcore.g:2060:16: ( (lv_readonly_17_0= 'readonly' ) )
            	    // InternalXcore.g:2061:1: (lv_readonly_17_0= 'readonly' )
            	    {
            	    // InternalXcore.g:2061:1: (lv_readonly_17_0= 'readonly' )
            	    // InternalXcore.g:2062:3: lv_readonly_17_0= 'readonly'
            	    {
            	    lv_readonly_17_0=(Token)match(input,38,FollowSets000.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", true, "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:6: ({...}? => ( (lv_transient_18_0= 'transient' ) ) )
            	    // InternalXcore.g:2087:7: {...}? => ( (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:16: ( (lv_transient_18_0= 'transient' ) )
            	    // InternalXcore.g:2088:1: (lv_transient_18_0= 'transient' )
            	    {
            	    // InternalXcore.g:2088:1: (lv_transient_18_0= 'transient' )
            	    // InternalXcore.g:2089:3: lv_transient_18_0= 'transient'
            	    {
            	    lv_transient_18_0=(Token)match(input,39,FollowSets000.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", true, "transient");
            	      	    
            	    }

            	    }


            	    }


            	    }

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

            	    }


            	    }


            	    }
            	    break;
            	case 5 :
            	    // InternalXcore.g:2109:4: ({...}? => ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) ) )
            	    {
            	    // InternalXcore.g:2109:4: ({...}? => ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) ) )
            	    // InternalXcore.g:2110: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:2110:107: ( ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) ) )
            	    // InternalXcore.g:2111:6: ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 4);
            	    // InternalXcore.g:2114:6: ({...}? => ( (lv_volatile_19_0= 'volatile' ) ) )
            	    // InternalXcore.g:2114:7: {...}? => ( (lv_volatile_19_0= 'volatile' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "true");
            	    }
            	    // InternalXcore.g:2114:16: ( (lv_volatile_19_0= 'volatile' ) )
            	    // InternalXcore.g:2115:1: (lv_volatile_19_0= 'volatile' )
            	    {
            	    // InternalXcore.g:2115:1: (lv_volatile_19_0= 'volatile' )
            	    // InternalXcore.g:2116:3: lv_volatile_19_0= 'volatile'
            	    {
            	    lv_volatile_19_0=(Token)match(input,40,FollowSets000.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", true, "volatile");
            	      	    
            	    }

            	    }


            	    }


            	    }

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

            	    }


            	    }


            	    }
            	    break;
            	case 6 :
            	    // InternalXcore.g:2136:4: ({...}? => ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) ) )
            	    {
            	    // InternalXcore.g:2136:4: ({...}? => ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) ) )
            	    // InternalXcore.g:2137: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:2137:107: ( ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) ) )
            	    // InternalXcore.g:2138:6: ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 5);
            	    // InternalXcore.g:2141:6: ({...}? => ( (lv_unsettable_20_0= 'unsettable' ) ) )
            	    // InternalXcore.g:2141:7: {...}? => ( (lv_unsettable_20_0= 'unsettable' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "true");
            	    }
            	    // InternalXcore.g:2141:16: ( (lv_unsettable_20_0= 'unsettable' ) )
            	    // InternalXcore.g:2142:1: (lv_unsettable_20_0= 'unsettable' )
            	    {
            	    // InternalXcore.g:2142:1: (lv_unsettable_20_0= 'unsettable' )
            	    // InternalXcore.g:2143:3: lv_unsettable_20_0= 'unsettable'
            	    {
            	    lv_unsettable_20_0=(Token)match(input,41,FollowSets000.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", true, "unsettable");
            	      	    
            	    }

            	    }


            	    }


            	    }

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

            	    }


            	    }


            	    }
            	    break;
            	case 7 :
            	    // InternalXcore.g:2163:4: ({...}? => ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) ) )
            	    {
            	    // InternalXcore.g:2163:4: ({...}? => ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) ) )
            	    // InternalXcore.g:2164: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:2164:107: ( ({...}? => ( (lv_derived_21_0= 'derived' ) ) ) )
            	    // InternalXcore.g:2165:6: ({...}? => ( (lv_derived_21_0= 'derived' ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_3(), 6);
            	    // InternalXcore.g:2168:6: ({...}? => ( (lv_derived_21_0= 'derived' ) ) )
            	    // InternalXcore.g:2168:7: {...}? => ( (lv_derived_21_0= 'derived' ) )
            	    {
            	    if ( !((true)) ) {
            	        if (state.backtracking>0) {state.failed=true; return current;}
            	        throw new FailedPredicateException(input, "ruleXReference", "true");
            	    }
            	    // InternalXcore.g:2168:16: ( (lv_derived_21_0= 'derived' ) )
            	    // InternalXcore.g:2169:1: (lv_derived_21_0= 'derived' )
            	    {
            	    // InternalXcore.g:2169:1: (lv_derived_21_0= 'derived' )
            	    // InternalXcore.g:2170:3: lv_derived_21_0= 'derived'
            	    {
            	    lv_derived_21_0=(Token)match(input,42,FollowSets000.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", true, "derived");
            	      	    
            	    }

            	    }


            	    }


            	    }

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

            	    }


            	    }


            	    }
            	    break;

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


            }


            }

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

            }

            // InternalXcore.g:2197:2: ( (lv_type_22_0= ruleXGenericType ) )
            // InternalXcore.g:2198:1: (lv_type_22_0= ruleXGenericType )
            {
            // InternalXcore.g:2198:1: (lv_type_22_0= ruleXGenericType )
            // InternalXcore.g:2199:3: lv_type_22_0= ruleXGenericType
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXReferenceAccess().getTypeXGenericTypeParserRuleCall_4_0()); 
              	    
            }
            pushFollow(FollowSets000.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:2215:2: ( (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:2216:1: (lv_multiplicity_23_0= ruleXMultiplicity )
                    {
                    // InternalXcore.g:2216:1: (lv_multiplicity_23_0= ruleXMultiplicity )
                    // InternalXcore.g:2217:3: lv_multiplicity_23_0= ruleXMultiplicity
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXReferenceAccess().getMultiplicityXMultiplicityParserRuleCall_5_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:2233:3: ( (lv_name_24_0= RULE_ID ) )
            // InternalXcore.g:2234:1: (lv_name_24_0= RULE_ID )
            {
            // InternalXcore.g:2234:1: (lv_name_24_0= RULE_ID )
            // InternalXcore.g:2235:3: lv_name_24_0= RULE_ID
            {
            lv_name_24_0=(Token)match(input,RULE_ID,FollowSets000.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:2251:2: (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:2251:4: otherlv_25= 'opposite' ( ( ruleValidID ) )
                    {
                    otherlv_25=(Token)match(input,53,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_25, grammarAccess.getXReferenceAccess().getOppositeKeyword_7_0());
                          
                    }
                    // InternalXcore.g:2255:1: ( ( ruleValidID ) )
                    // InternalXcore.g:2256:1: ( ruleValidID )
                    {
                    // InternalXcore.g:2256:1: ( ruleValidID )
                    // InternalXcore.g:2257:3: ruleValidID
                    {
                    if ( state.backtracking==0 ) {

                      			if (current==null) {
                      	            current = createModelElement(grammarAccess.getXReferenceRule());
                      	        }
                              
                    }
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXReferenceAccess().getOppositeGenFeatureCrossReference_7_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.FOLLOW_49);
                    ruleValidID();

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

                    }


                    }


                    }
                    break;

            }

            // InternalXcore.g:2270:4: (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:2270:6: otherlv_27= 'keys' ( ( ruleValidID ) ) (otherlv_29= ',' ( ( ruleValidID ) ) )*
                    {
                    otherlv_27=(Token)match(input,54,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_27, grammarAccess.getXReferenceAccess().getKeysKeyword_8_0());
                          
                    }
                    // InternalXcore.g:2274:1: ( ( ruleValidID ) )
                    // InternalXcore.g:2275:1: ( ruleValidID )
                    {
                    // InternalXcore.g:2275:1: ( ruleValidID )
                    // InternalXcore.g:2276:3: ruleValidID
                    {
                    if ( state.backtracking==0 ) {

                      			if (current==null) {
                      	            current = createModelElement(grammarAccess.getXReferenceRule());
                      	        }
                              
                    }
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXReferenceAccess().getKeysGenFeatureCrossReference_8_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.FOLLOW_50);
                    ruleValidID();

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

                    }


                    }

                    // InternalXcore.g:2289:2: (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:2289:4: otherlv_29= ',' ( ( ruleValidID ) )
                    	    {
                    	    otherlv_29=(Token)match(input,16,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_29, grammarAccess.getXReferenceAccess().getCommaKeyword_8_2_0());
                    	          
                    	    }
                    	    // InternalXcore.g:2293:1: ( ( ruleValidID ) )
                    	    // InternalXcore.g:2294:1: ( ruleValidID )
                    	    {
                    	    // InternalXcore.g:2294:1: ( ruleValidID )
                    	    // InternalXcore.g:2295:3: 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(FollowSets000.FOLLOW_50);
                    	    ruleValidID();

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

                    	    }


                    	    }


                    	    }
                    	    break;

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


                    }
                    break;

            }

            // InternalXcore.g:2308: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:2310:1: ( ( ( ({...}? => ( ({...}? => (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:2310:1: ( ( ( ({...}? => ( ({...}? => (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:2311:2: ( ( ({...}? => ( ({...}? => (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:2314:2: ( ( ({...}? => ( ({...}? => (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:2315: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:2315: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 ) ) ) ) ) ) )*
            loop46:
            do {
                int alt46=5;
                alt46 = dfa46.predict(input);
                switch (alt46) {
            	case 1 :
            	    // InternalXcore.g:2317:4: ({...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:2317:4: ({...}? => ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:2318: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:2318:107: ( ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:2319:6: ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 0);
            	    // InternalXcore.g:2322:6: ({...}? => (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:2322:7: {...}? => (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:2322:16: (otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:2322:18: otherlv_32= 'get' ( (lv_getBody_33_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_32=(Token)match(input,44,FollowSets000.FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_32, grammarAccess.getXReferenceAccess().getGetKeyword_9_0_0());
            	          
            	    }
            	    // InternalXcore.g:2326:1: ( (lv_getBody_33_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:2327:1: (lv_getBody_33_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:2327:1: (lv_getBody_33_0= ruleXBlockExpression )
            	    // InternalXcore.g:2328:3: lv_getBody_33_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXReferenceAccess().getGetBodyXBlockExpressionParserRuleCall_9_0_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:2351:4: ({...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:2351:4: ({...}? => ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:2352: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:2352:107: ( ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:2353:6: ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 1);
            	    // InternalXcore.g:2356:6: ({...}? => (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:2356:7: {...}? => (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:2356:16: (otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:2356:18: otherlv_34= 'set' ( (lv_setBody_35_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_34=(Token)match(input,45,FollowSets000.FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_34, grammarAccess.getXReferenceAccess().getSetKeyword_9_1_0());
            	          
            	    }
            	    // InternalXcore.g:2360:1: ( (lv_setBody_35_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:2361:1: (lv_setBody_35_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:2361:1: (lv_setBody_35_0= ruleXBlockExpression )
            	    // InternalXcore.g:2362:3: lv_setBody_35_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXReferenceAccess().getSetBodyXBlockExpressionParserRuleCall_9_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:2385:4: ({...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:2385:4: ({...}? => ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:2386: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:2386:107: ( ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:2387:6: ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 2);
            	    // InternalXcore.g:2390:6: ({...}? => (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:2390:7: {...}? => (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:2390:16: (otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:2390:18: otherlv_36= 'isSet' ( (lv_isSetBody_37_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_36=(Token)match(input,46,FollowSets000.FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_36, grammarAccess.getXReferenceAccess().getIsSetKeyword_9_2_0());
            	          
            	    }
            	    // InternalXcore.g:2394:1: ( (lv_isSetBody_37_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:2395:1: (lv_isSetBody_37_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:2395:1: (lv_isSetBody_37_0= ruleXBlockExpression )
            	    // InternalXcore.g:2396:3: lv_isSetBody_37_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXReferenceAccess().getIsSetBodyXBlockExpressionParserRuleCall_9_2_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:2419:4: ({...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) ) )
            	    {
            	    // InternalXcore.g:2419:4: ({...}? => ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) ) )
            	    // InternalXcore.g:2420: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:2420:107: ( ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) ) )
            	    // InternalXcore.g:2421:6: ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) )
            	    {
            	    getUnorderedGroupHelper().select(grammarAccess.getXReferenceAccess().getUnorderedGroup_9(), 3);
            	    // InternalXcore.g:2424:6: ({...}? => (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) ) )
            	    // InternalXcore.g:2424:7: {...}? => (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:2424:16: (otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) ) )
            	    // InternalXcore.g:2424:18: otherlv_38= 'unset' ( (lv_unsetBody_39_0= ruleXBlockExpression ) )
            	    {
            	    otherlv_38=(Token)match(input,47,FollowSets000.FOLLOW_22); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_38, grammarAccess.getXReferenceAccess().getUnsetKeyword_9_3_0());
            	          
            	    }
            	    // InternalXcore.g:2428:1: ( (lv_unsetBody_39_0= ruleXBlockExpression ) )
            	    // InternalXcore.g:2429:1: (lv_unsetBody_39_0= ruleXBlockExpression )
            	    {
            	    // InternalXcore.g:2429:1: (lv_unsetBody_39_0= ruleXBlockExpression )
            	    // InternalXcore.g:2430:3: lv_unsetBody_39_0= ruleXBlockExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXReferenceAccess().getUnsetBodyXBlockExpressionParserRuleCall_9_3_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:2468: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:2469:2: (iv_ruleXOperation= ruleXOperation EOF )
            // InternalXcore.g:2470:2: iv_ruleXOperation= ruleXOperation EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXOperationRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXOperation=ruleXOperation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXOperation; 
            }
            match(input,EOF,FollowSets000.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:2477: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:2480:28: ( ( () ( (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:2481:1: ( () ( (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:2481:1: ( () ( (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:2481: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:2481:2: ()
            // InternalXcore.g:2482:5: 
            {
            if ( state.backtracking==0 ) {

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

            }

            // InternalXcore.g:2487:2: ( (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:2488:1: (lv_annotations_1_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:2488:1: (lv_annotations_1_0= ruleXAnnotation )
            	    // InternalXcore.g:2489:3: lv_annotations_1_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXOperationAccess().getAnnotationsXAnnotationParserRuleCall_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_52); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getXOperationAccess().getOpKeyword_2());
                  
            }
            // InternalXcore.g:2509:1: ( ( ( (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:2509:2: ( ( (lv_unordered_3_0= 'unordered' ) ) ( (lv_unique_4_0= 'unique' ) )? )
                    {
                    // InternalXcore.g:2509:2: ( ( (lv_unordered_3_0= 'unordered' ) ) ( (lv_unique_4_0= 'unique' ) )? )
                    // InternalXcore.g:2509:3: ( (lv_unordered_3_0= 'unordered' ) ) ( (lv_unique_4_0= 'unique' ) )?
                    {
                    // InternalXcore.g:2509:3: ( (lv_unordered_3_0= 'unordered' ) )
                    // InternalXcore.g:2510:1: (lv_unordered_3_0= 'unordered' )
                    {
                    // InternalXcore.g:2510:1: (lv_unordered_3_0= 'unordered' )
                    // InternalXcore.g:2511:3: lv_unordered_3_0= 'unordered'
                    {
                    lv_unordered_3_0=(Token)match(input,36,FollowSets000.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", true, "unordered");
                      	    
                    }

                    }


                    }

                    // InternalXcore.g:2524:2: ( (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:2525:1: (lv_unique_4_0= 'unique' )
                            {
                            // InternalXcore.g:2525:1: (lv_unique_4_0= 'unique' )
                            // InternalXcore.g:2526:3: lv_unique_4_0= 'unique'
                            {
                            lv_unique_4_0=(Token)match(input,37,FollowSets000.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", true, "unique");
                              	    
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:2540:6: ( ( (lv_unique_5_0= 'unique' ) ) ( (lv_unordered_6_0= 'unordered' ) )? )
                    {
                    // InternalXcore.g:2540:6: ( ( (lv_unique_5_0= 'unique' ) ) ( (lv_unordered_6_0= 'unordered' ) )? )
                    // InternalXcore.g:2540:7: ( (lv_unique_5_0= 'unique' ) ) ( (lv_unordered_6_0= 'unordered' ) )?
                    {
                    // InternalXcore.g:2540:7: ( (lv_unique_5_0= 'unique' ) )
                    // InternalXcore.g:2541:1: (lv_unique_5_0= 'unique' )
                    {
                    // InternalXcore.g:2541:1: (lv_unique_5_0= 'unique' )
                    // InternalXcore.g:2542:3: lv_unique_5_0= 'unique'
                    {
                    lv_unique_5_0=(Token)match(input,37,FollowSets000.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", true, "unique");
                      	    
                    }

                    }


                    }

                    // InternalXcore.g:2555:2: ( (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:2556:1: (lv_unordered_6_0= 'unordered' )
                            {
                            // InternalXcore.g:2556:1: (lv_unordered_6_0= 'unordered' )
                            // InternalXcore.g:2557:3: lv_unordered_6_0= 'unordered'
                            {
                            lv_unordered_6_0=(Token)match(input,36,FollowSets000.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", true, "unordered");
                              	    
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;

            }

            // InternalXcore.g:2570:6: (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:2570:8: otherlv_7= '<' ( (lv_typeParameters_8_0= ruleXTypeParameter ) ) (otherlv_9= ',' ( (lv_typeParameters_10_0= ruleXTypeParameter ) ) )* otherlv_11= '>'
                    {
                    otherlv_7=(Token)match(input,23,FollowSets000.FOLLOW_17); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_7, grammarAccess.getXOperationAccess().getLessThanSignKeyword_4_0());
                          
                    }
                    // InternalXcore.g:2574:1: ( (lv_typeParameters_8_0= ruleXTypeParameter ) )
                    // InternalXcore.g:2575:1: (lv_typeParameters_8_0= ruleXTypeParameter )
                    {
                    // InternalXcore.g:2575:1: (lv_typeParameters_8_0= ruleXTypeParameter )
                    // InternalXcore.g:2576:3: lv_typeParameters_8_0= ruleXTypeParameter
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXOperationAccess().getTypeParametersXTypeParameterParserRuleCall_4_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:2592:2: (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:2592:4: otherlv_9= ',' ( (lv_typeParameters_10_0= ruleXTypeParameter ) )
                    	    {
                    	    otherlv_9=(Token)match(input,16,FollowSets000.FOLLOW_17); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_9, grammarAccess.getXOperationAccess().getCommaKeyword_4_2_0());
                    	          
                    	    }
                    	    // InternalXcore.g:2596:1: ( (lv_typeParameters_10_0= ruleXTypeParameter ) )
                    	    // InternalXcore.g:2597:1: (lv_typeParameters_10_0= ruleXTypeParameter )
                    	    {
                    	    // InternalXcore.g:2597:1: (lv_typeParameters_10_0= ruleXTypeParameter )
                    	    // InternalXcore.g:2598:3: lv_typeParameters_10_0= ruleXTypeParameter
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXOperationAccess().getTypeParametersXTypeParameterParserRuleCall_4_2_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

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

                    }
                    break;

            }

            // InternalXcore.g:2618: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:2618:4: ( (lv_type_12_0= ruleXGenericType ) )
                    {
                    // InternalXcore.g:2618:4: ( (lv_type_12_0= ruleXGenericType ) )
                    // InternalXcore.g:2619:1: (lv_type_12_0= ruleXGenericType )
                    {
                    // InternalXcore.g:2619:1: (lv_type_12_0= ruleXGenericType )
                    // InternalXcore.g:2620:3: lv_type_12_0= ruleXGenericType
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXOperationAccess().getTypeXGenericTypeParserRuleCall_5_0_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:2637:7: otherlv_13= 'void'
                    {
                    otherlv_13=(Token)match(input,56,FollowSets000.FOLLOW_38); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

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

                    }
                    break;

            }

            // InternalXcore.g:2641:2: ( (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:2642:1: (lv_multiplicity_14_0= ruleXMultiplicity )
                    {
                    // InternalXcore.g:2642:1: (lv_multiplicity_14_0= ruleXMultiplicity )
                    // InternalXcore.g:2643:3: lv_multiplicity_14_0= ruleXMultiplicity
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXOperationAccess().getMultiplicityXMultiplicityParserRuleCall_6_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:2659:3: ( (lv_name_15_0= RULE_ID ) )
            // InternalXcore.g:2660:1: (lv_name_15_0= RULE_ID )
            {
            // InternalXcore.g:2660:1: (lv_name_15_0= RULE_ID )
            // InternalXcore.g:2661:3: lv_name_15_0= RULE_ID
            {
            lv_name_15_0=(Token)match(input,RULE_ID,FollowSets000.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,FollowSets000.FOLLOW_57); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_16, grammarAccess.getXOperationAccess().getLeftParenthesisKeyword_8());
                  
            }
            // InternalXcore.g:2681:1: ( ( (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:2681:2: ( (lv_parameters_17_0= ruleXParameter ) ) (otherlv_18= ',' ( (lv_parameters_19_0= ruleXParameter ) ) )*
                    {
                    // InternalXcore.g:2681:2: ( (lv_parameters_17_0= ruleXParameter ) )
                    // InternalXcore.g:2682:1: (lv_parameters_17_0= ruleXParameter )
                    {
                    // InternalXcore.g:2682:1: (lv_parameters_17_0= ruleXParameter )
                    // InternalXcore.g:2683:3: lv_parameters_17_0= ruleXParameter
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXOperationAccess().getParametersXParameterParserRuleCall_9_0_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:2699:2: (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:2699:4: otherlv_18= ',' ( (lv_parameters_19_0= ruleXParameter ) )
                    	    {
                    	    otherlv_18=(Token)match(input,16,FollowSets000.FOLLOW_58); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_18, grammarAccess.getXOperationAccess().getCommaKeyword_9_1_0());
                    	          
                    	    }
                    	    // InternalXcore.g:2703:1: ( (lv_parameters_19_0= ruleXParameter ) )
                    	    // InternalXcore.g:2704:1: (lv_parameters_19_0= ruleXParameter )
                    	    {
                    	    // InternalXcore.g:2704:1: (lv_parameters_19_0= ruleXParameter )
                    	    // InternalXcore.g:2705:3: lv_parameters_19_0= ruleXParameter
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXOperationAccess().getParametersXParameterParserRuleCall_9_1_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_59); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_20, grammarAccess.getXOperationAccess().getRightParenthesisKeyword_10());
                  
            }
            // InternalXcore.g:2725:1: (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:2725:3: otherlv_21= 'throws' ( (lv_exceptions_22_0= ruleXGenericType ) ) (otherlv_23= ',' ( (lv_exceptions_24_0= ruleXGenericType ) ) )*
                    {
                    otherlv_21=(Token)match(input,57,FollowSets000.FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_21, grammarAccess.getXOperationAccess().getThrowsKeyword_11_0());
                          
                    }
                    // InternalXcore.g:2729:1: ( (lv_exceptions_22_0= ruleXGenericType ) )
                    // InternalXcore.g:2730:1: (lv_exceptions_22_0= ruleXGenericType )
                    {
                    // InternalXcore.g:2730:1: (lv_exceptions_22_0= ruleXGenericType )
                    // InternalXcore.g:2731:3: lv_exceptions_22_0= ruleXGenericType
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXOperationAccess().getExceptionsXGenericTypeParserRuleCall_11_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:2747:2: (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:2747:4: otherlv_23= ',' ( (lv_exceptions_24_0= ruleXGenericType ) )
                    	    {
                    	    otherlv_23=(Token)match(input,16,FollowSets000.FOLLOW_8); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_23, grammarAccess.getXOperationAccess().getCommaKeyword_11_2_0());
                    	          
                    	    }
                    	    // InternalXcore.g:2751:1: ( (lv_exceptions_24_0= ruleXGenericType ) )
                    	    // InternalXcore.g:2752:1: (lv_exceptions_24_0= ruleXGenericType )
                    	    {
                    	    // InternalXcore.g:2752:1: (lv_exceptions_24_0= ruleXGenericType )
                    	    // InternalXcore.g:2753:3: lv_exceptions_24_0= ruleXGenericType
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXOperationAccess().getExceptionsXGenericTypeParserRuleCall_11_2_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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:2769:6: ( (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:2770:1: (lv_body_25_0= ruleXBlockExpression )
                    {
                    // InternalXcore.g:2770:1: (lv_body_25_0= ruleXBlockExpression )
                    // InternalXcore.g:2771:3: lv_body_25_0= ruleXBlockExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXOperationAccess().getBodyXBlockExpressionParserRuleCall_12_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:2795: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:2796:2: (iv_ruleXParameter= ruleXParameter EOF )
            // InternalXcore.g:2797:2: iv_ruleXParameter= ruleXParameter EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXParameterRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXParameter=ruleXParameter();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXParameter; 
            }
            match(input,EOF,FollowSets000.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:2804: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:2807:28: ( ( ( (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:2808:1: ( ( (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:2808:1: ( ( (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:2808: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:2808:2: ( (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:2809:1: (lv_annotations_0_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:2809:1: (lv_annotations_0_0= ruleXAnnotation )
            	    // InternalXcore.g:2810:3: lv_annotations_0_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXParameterAccess().getAnnotationsXAnnotationParserRuleCall_0_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:2826: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:2826:4: ( ( (lv_unordered_1_0= 'unordered' ) ) ( (lv_unique_2_0= 'unique' ) )? )
                    {
                    // InternalXcore.g:2826:4: ( ( (lv_unordered_1_0= 'unordered' ) ) ( (lv_unique_2_0= 'unique' ) )? )
                    // InternalXcore.g:2826:5: ( (lv_unordered_1_0= 'unordered' ) ) ( (lv_unique_2_0= 'unique' ) )?
                    {
                    // InternalXcore.g:2826:5: ( (lv_unordered_1_0= 'unordered' ) )
                    // InternalXcore.g:2827:1: (lv_unordered_1_0= 'unordered' )
                    {
                    // InternalXcore.g:2827:1: (lv_unordered_1_0= 'unordered' )
                    // InternalXcore.g:2828:3: lv_unordered_1_0= 'unordered'
                    {
                    lv_unordered_1_0=(Token)match(input,36,FollowSets000.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", true, "unordered");
                      	    
                    }

                    }


                    }

                    // InternalXcore.g:2841:2: ( (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:2842:1: (lv_unique_2_0= 'unique' )
                            {
                            // InternalXcore.g:2842:1: (lv_unique_2_0= 'unique' )
                            // InternalXcore.g:2843:3: lv_unique_2_0= 'unique'
                            {
                            lv_unique_2_0=(Token)match(input,37,FollowSets000.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", true, "unique");
                              	    
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:2857:6: ( ( (lv_unique_3_0= 'unique' ) ) ( (lv_unordered_4_0= 'unordered' ) )? )
                    {
                    // InternalXcore.g:2857:6: ( ( (lv_unique_3_0= 'unique' ) ) ( (lv_unordered_4_0= 'unordered' ) )? )
                    // InternalXcore.g:2857:7: ( (lv_unique_3_0= 'unique' ) ) ( (lv_unordered_4_0= 'unordered' ) )?
                    {
                    // InternalXcore.g:2857:7: ( (lv_unique_3_0= 'unique' ) )
                    // InternalXcore.g:2858:1: (lv_unique_3_0= 'unique' )
                    {
                    // InternalXcore.g:2858:1: (lv_unique_3_0= 'unique' )
                    // InternalXcore.g:2859:3: lv_unique_3_0= 'unique'
                    {
                    lv_unique_3_0=(Token)match(input,37,FollowSets000.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", true, "unique");
                      	    
                    }

                    }


                    }

                    // InternalXcore.g:2872:2: ( (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:2873:1: (lv_unordered_4_0= 'unordered' )
                            {
                            // InternalXcore.g:2873:1: (lv_unordered_4_0= 'unordered' )
                            // InternalXcore.g:2874:3: lv_unordered_4_0= 'unordered'
                            {
                            lv_unordered_4_0=(Token)match(input,36,FollowSets000.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", true, "unordered");
                              	    
                            }

                            }


                            }
                            break;

                    }


                    }


                    }
                    break;

            }

            // InternalXcore.g:2887:6: ( (lv_type_5_0= ruleXGenericType ) )
            // InternalXcore.g:2888:1: (lv_type_5_0= ruleXGenericType )
            {
            // InternalXcore.g:2888:1: (lv_type_5_0= ruleXGenericType )
            // InternalXcore.g:2889:3: lv_type_5_0= ruleXGenericType
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXParameterAccess().getTypeXGenericTypeParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FollowSets000.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:2905:2: ( (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:2906:1: (lv_multiplicity_6_0= ruleXMultiplicity )
                    {
                    // InternalXcore.g:2906:1: (lv_multiplicity_6_0= ruleXMultiplicity )
                    // InternalXcore.g:2907:3: lv_multiplicity_6_0= ruleXMultiplicity
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXParameterAccess().getMultiplicityXMultiplicityParserRuleCall_3_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:2923:3: ( (lv_name_7_0= RULE_ID ) )
            // InternalXcore.g:2924:1: (lv_name_7_0= RULE_ID )
            {
            // InternalXcore.g:2924:1: (lv_name_7_0= RULE_ID )
            // InternalXcore.g:2925:3: lv_name_7_0= RULE_ID
            {
            lv_name_7_0=(Token)match(input,RULE_ID,FollowSets000.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:2949: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:2950:2: (iv_ruleXTypeParameter= ruleXTypeParameter EOF )
            // InternalXcore.g:2951:2: iv_ruleXTypeParameter= ruleXTypeParameter EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXTypeParameterRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXTypeParameter=ruleXTypeParameter();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXTypeParameter; 
            }
            match(input,EOF,FollowSets000.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:2958: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:2961:28: ( ( ( (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:2962:1: ( ( (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:2962:1: ( ( (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:2962: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:2962:2: ( (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:2963:1: (lv_annotations_0_0= ruleXAnnotation )
            	    {
            	    // InternalXcore.g:2963:1: (lv_annotations_0_0= ruleXAnnotation )
            	    // InternalXcore.g:2964:3: lv_annotations_0_0= ruleXAnnotation
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXTypeParameterAccess().getAnnotationsXAnnotationParserRuleCall_0_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:2980:3: ( (lv_name_1_0= RULE_ID ) )
            // InternalXcore.g:2981:1: (lv_name_1_0= RULE_ID )
            {
            // InternalXcore.g:2981:1: (lv_name_1_0= RULE_ID )
            // InternalXcore.g:2982:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)match(input,RULE_ID,FollowSets000.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:2998:2: (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:2998:4: otherlv_2= 'extends' ( (lv_bounds_3_0= ruleXGenericType ) ) (otherlv_4= '&' ( (lv_bounds_5_0= ruleXGenericType ) ) )*
                    {
                    otherlv_2=(Token)match(input,35,FollowSets000.FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_2, grammarAccess.getXTypeParameterAccess().getExtendsKeyword_2_0());
                          
                    }
                    // InternalXcore.g:3002:1: ( (lv_bounds_3_0= ruleXGenericType ) )
                    // InternalXcore.g:3003:1: (lv_bounds_3_0= ruleXGenericType )
                    {
                    // InternalXcore.g:3003:1: (lv_bounds_3_0= ruleXGenericType )
                    // InternalXcore.g:3004:3: lv_bounds_3_0= ruleXGenericType
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXTypeParameterAccess().getBoundsXGenericTypeParserRuleCall_2_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:3020:2: (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:3020:4: otherlv_4= '&' ( (lv_bounds_5_0= ruleXGenericType ) )
                    	    {
                    	    otherlv_4=(Token)match(input,58,FollowSets000.FOLLOW_8); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_4, grammarAccess.getXTypeParameterAccess().getAmpersandKeyword_2_2_0());
                    	          
                    	    }
                    	    // InternalXcore.g:3024:1: ( (lv_bounds_5_0= ruleXGenericType ) )
                    	    // InternalXcore.g:3025:1: (lv_bounds_5_0= ruleXGenericType )
                    	    {
                    	    // InternalXcore.g:3025:1: (lv_bounds_5_0= ruleXGenericType )
                    	    // InternalXcore.g:3026:3: lv_bounds_5_0= ruleXGenericType
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXTypeParameterAccess().getBoundsXGenericTypeParserRuleCall_2_2_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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:3050: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:3051:2: (iv_ruleXMultiplicity= ruleXMultiplicity EOF )
            // InternalXcore.g:3052:2: iv_ruleXMultiplicity= ruleXMultiplicity EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXMultiplicityRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXMultiplicity=ruleXMultiplicity();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXMultiplicity.getText(); 
            }
            match(input,EOF,FollowSets000.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:3059: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:3062:28: ( (kw= '[' (kw= '?' | kw= '*' | kw= '+' | (this_INT_4= RULE_INT (kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' ) )? ) )? kw= ']' ) )
            // InternalXcore.g:3063:1: (kw= '[' (kw= '?' | kw= '*' | kw= '+' | (this_INT_4= RULE_INT (kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' ) )? ) )? kw= ']' )
            {
            // InternalXcore.g:3063:1: (kw= '[' (kw= '?' | kw= '*' | kw= '+' | (this_INT_4= RULE_INT (kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' ) )? ) )? kw= ']' )
            // InternalXcore.g:3064:2: kw= '[' (kw= '?' | kw= '*' | kw= '+' | (this_INT_4= RULE_INT (kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' ) )? ) )? kw= ']'
            {
            kw=(Token)match(input,59,FollowSets000.FOLLOW_65); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      current.merge(kw);
                      newLeafNode(kw, grammarAccess.getXMultiplicityAccess().getLeftSquareBracketKeyword_0()); 
                  
            }
            // InternalXcore.g:3069:1: (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:3070:2: kw= '?'
                    {
                    kw=(Token)match(input,60,FollowSets000.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:3077:2: kw= '*'
                    {
                    kw=(Token)match(input,61,FollowSets000.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:3084:2: kw= '+'
                    {
                    kw=(Token)match(input,62,FollowSets000.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:3090:6: (this_INT_4= RULE_INT (kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' ) )? )
                    {
                    // InternalXcore.g:3090:6: (this_INT_4= RULE_INT (kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' ) )? )
                    // InternalXcore.g:3090:11: this_INT_4= RULE_INT (kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' ) )?
                    {
                    this_INT_4=(Token)match(input,RULE_INT,FollowSets000.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:3097:1: (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:3098:2: kw= '..' (this_INT_6= RULE_INT | kw= '?' | kw= '*' )
                            {
                            kw=(Token)match(input,63,FollowSets000.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:3103:1: (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:3103:6: this_INT_6= RULE_INT
                                    {
                                    this_INT_6=(Token)match(input,RULE_INT,FollowSets000.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:3112:2: kw= '?'
                                    {
                                    kw=(Token)match(input,60,FollowSets000.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:3119:2: kw= '*'
                                    {
                                    kw=(Token)match(input,61,FollowSets000.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,FollowSets000.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:3138: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:3139:2: (iv_ruleXBlockExpression= ruleXBlockExpression EOF )
            // InternalXcore.g:3140:2: iv_ruleXBlockExpression= ruleXBlockExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXBlockExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXBlockExpression=ruleXBlockExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXBlockExpression; 
            }
            match(input,EOF,FollowSets000.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:3147: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:3150:28: ( ( () otherlv_1= '{' ( ( (lv_expressions_2_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_3= ';' )? )* otherlv_4= '}' ) )
            // InternalXcore.g:3151:1: ( () otherlv_1= '{' ( ( (lv_expressions_2_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_3= ';' )? )* otherlv_4= '}' )
            {
            // InternalXcore.g:3151:1: ( () otherlv_1= '{' ( ( (lv_expressions_2_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_3= ';' )? )* otherlv_4= '}' )
            // InternalXcore.g:3151:2: () otherlv_1= '{' ( ( (lv_expressions_2_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_3= ';' )? )* otherlv_4= '}'
            {
            // InternalXcore.g:3151:2: ()
            // InternalXcore.g:3152:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXBlockExpressionAccess().getXBlockExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,29,FollowSets000.FOLLOW_69); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXBlockExpressionAccess().getLeftCurlyBracketKeyword_1());
                  
            }
            // InternalXcore.g:3161:1: ( ( (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:3161:2: ( (lv_expressions_2_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_3= ';' )?
            	    {
            	    // InternalXcore.g:3161:2: ( (lv_expressions_2_0= ruleXExpressionOrVarDeclaration ) )
            	    // InternalXcore.g:3162:1: (lv_expressions_2_0= ruleXExpressionOrVarDeclaration )
            	    {
            	    // InternalXcore.g:3162:1: (lv_expressions_2_0= ruleXExpressionOrVarDeclaration )
            	    // InternalXcore.g:3163:3: lv_expressions_2_0= ruleXExpressionOrVarDeclaration
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXBlockExpressionAccess().getExpressionsXExpressionOrVarDeclarationParserRuleCall_2_0_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:3179:2: (otherlv_3= ';' )?
            	    int alt71=2;
            	    int LA71_0 = input.LA(1);

            	    if ( (LA71_0==65) ) {
            	        alt71=1;
            	    }
            	    switch (alt71) {
            	        case 1 :
            	            // InternalXcore.g:3179:4: otherlv_3= ';'
            	            {
            	            otherlv_3=(Token)match(input,65,FollowSets000.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,FollowSets000.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:3195: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:3196:2: (iv_ruleXGenericType= ruleXGenericType EOF )
            // InternalXcore.g:3197:2: iv_ruleXGenericType= ruleXGenericType EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXGenericTypeRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXGenericType=ruleXGenericType();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXGenericType; 
            }
            match(input,EOF,FollowSets000.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:3204: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:3207:28: ( ( ( ( ruleXQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_typeArguments_2_0= ruleXGenericTypeArgument ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleXGenericTypeArgument ) ) )* otherlv_5= '>' )? ) )
            // InternalXcore.g:3208:1: ( ( ( ruleXQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_typeArguments_2_0= ruleXGenericTypeArgument ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleXGenericTypeArgument ) ) )* otherlv_5= '>' )? )
            {
            // InternalXcore.g:3208:1: ( ( ( ruleXQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_typeArguments_2_0= ruleXGenericTypeArgument ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleXGenericTypeArgument ) ) )* otherlv_5= '>' )? )
            // InternalXcore.g:3208:2: ( ( ruleXQualifiedName ) ) ( ( ( '<' )=>otherlv_1= '<' ) ( (lv_typeArguments_2_0= ruleXGenericTypeArgument ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleXGenericTypeArgument ) ) )* otherlv_5= '>' )?
            {
            // InternalXcore.g:3208:2: ( ( ruleXQualifiedName ) )
            // InternalXcore.g:3209:1: ( ruleXQualifiedName )
            {
            // InternalXcore.g:3209:1: ( ruleXQualifiedName )
            // InternalXcore.g:3210:3: ruleXQualifiedName
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getXGenericTypeRule());
              	        }
                      
            }
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXGenericTypeAccess().getTypeGenBaseCrossReference_0_0()); 
              	    
            }
            pushFollow(FollowSets000.FOLLOW_71);
            ruleXQualifiedName();

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

            }


            }

            // InternalXcore.g:3223:2: ( ( ( '<' )=>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:3223:3: ( ( '<' )=>otherlv_1= '<' ) ( (lv_typeArguments_2_0= ruleXGenericTypeArgument ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleXGenericTypeArgument ) ) )* otherlv_5= '>'
                    {
                    // InternalXcore.g:3223:3: ( ( '<' )=>otherlv_1= '<' )
                    // InternalXcore.g:3223:4: ( '<' )=>otherlv_1= '<'
                    {
                    otherlv_1=(Token)match(input,23,FollowSets000.FOLLOW_72); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_1, grammarAccess.getXGenericTypeAccess().getLessThanSignKeyword_1_0());
                          
                    }

                    }

                    // InternalXcore.g:3228:2: ( (lv_typeArguments_2_0= ruleXGenericTypeArgument ) )
                    // InternalXcore.g:3229:1: (lv_typeArguments_2_0= ruleXGenericTypeArgument )
                    {
                    // InternalXcore.g:3229:1: (lv_typeArguments_2_0= ruleXGenericTypeArgument )
                    // InternalXcore.g:3230:3: lv_typeArguments_2_0= ruleXGenericTypeArgument
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXGenericTypeAccess().getTypeArgumentsXGenericTypeArgumentParserRuleCall_1_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:3246:2: (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:3246:4: otherlv_3= ',' ( (lv_typeArguments_4_0= ruleXGenericTypeArgument ) )
                    	    {
                    	    otherlv_3=(Token)match(input,16,FollowSets000.FOLLOW_72); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_3, grammarAccess.getXGenericTypeAccess().getCommaKeyword_1_2_0());
                    	          
                    	    }
                    	    // InternalXcore.g:3250:1: ( (lv_typeArguments_4_0= ruleXGenericTypeArgument ) )
                    	    // InternalXcore.g:3251:1: (lv_typeArguments_4_0= ruleXGenericTypeArgument )
                    	    {
                    	    // InternalXcore.g:3251:1: (lv_typeArguments_4_0= ruleXGenericTypeArgument )
                    	    // InternalXcore.g:3252:3: lv_typeArguments_4_0= ruleXGenericTypeArgument
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXGenericTypeAccess().getTypeArgumentsXGenericTypeArgumentParserRuleCall_1_2_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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,FollowSets000.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:3280: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:3281:2: (iv_ruleXGenericTypeArgument= ruleXGenericTypeArgument EOF )
            // InternalXcore.g:3282:2: iv_ruleXGenericTypeArgument= ruleXGenericTypeArgument EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXGenericTypeArgumentRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXGenericTypeArgument=ruleXGenericTypeArgument();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXGenericTypeArgument; 
            }
            match(input,EOF,FollowSets000.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:3289: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:3292:28: ( (this_XGenericType_0= ruleXGenericType | this_XGenericWildcardTypeArgument_1= ruleXGenericWildcardTypeArgument ) )
            // InternalXcore.g:3293:1: (this_XGenericType_0= ruleXGenericType | this_XGenericWildcardTypeArgument_1= ruleXGenericWildcardTypeArgument )
            {
            // InternalXcore.g:3293:1: (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:3294:5: this_XGenericType_0= ruleXGenericType
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXGenericTypeArgumentAccess().getXGenericTypeParserRuleCall_0()); 
                          
                    }
                    pushFollow(FollowSets000.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:3304:5: this_XGenericWildcardTypeArgument_1= ruleXGenericWildcardTypeArgument
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXGenericTypeArgumentAccess().getXGenericWildcardTypeArgumentParserRuleCall_1()); 
                          
                    }
                    pushFollow(FollowSets000.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:3320: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:3321:2: (iv_ruleXGenericWildcardTypeArgument= ruleXGenericWildcardTypeArgument EOF )
            // InternalXcore.g:3322:2: iv_ruleXGenericWildcardTypeArgument= ruleXGenericWildcardTypeArgument EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXGenericWildcardTypeArgumentRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXGenericWildcardTypeArgument=ruleXGenericWildcardTypeArgument();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXGenericWildcardTypeArgument; 
            }
            match(input,EOF,FollowSets000.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:3329: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:3332:28: ( ( () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_upperBound_3_0= ruleXGenericType ) ) ) | (otherlv_4= 'super' ( (lv_lowerBound_5_0= ruleXGenericType ) ) ) )? ) )
            // InternalXcore.g:3333:1: ( () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_upperBound_3_0= ruleXGenericType ) ) ) | (otherlv_4= 'super' ( (lv_lowerBound_5_0= ruleXGenericType ) ) ) )? )
            {
            // InternalXcore.g:3333:1: ( () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_upperBound_3_0= ruleXGenericType ) ) ) | (otherlv_4= 'super' ( (lv_lowerBound_5_0= ruleXGenericType ) ) ) )? )
            // InternalXcore.g:3333:2: () otherlv_1= '?' ( (otherlv_2= 'extends' ( (lv_upperBound_3_0= ruleXGenericType ) ) ) | (otherlv_4= 'super' ( (lv_lowerBound_5_0= ruleXGenericType ) ) ) )?
            {
            // InternalXcore.g:3333:2: ()
            // InternalXcore.g:3334:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXGenericWildcardTypeArgumentAccess().getXGenericTypeAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,60,FollowSets000.FOLLOW_73); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXGenericWildcardTypeArgumentAccess().getQuestionMarkKeyword_1());
                  
            }
            // InternalXcore.g:3343:1: ( (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:3343:2: (otherlv_2= 'extends' ( (lv_upperBound_3_0= ruleXGenericType ) ) )
                    {
                    // InternalXcore.g:3343:2: (otherlv_2= 'extends' ( (lv_upperBound_3_0= ruleXGenericType ) ) )
                    // InternalXcore.g:3343:4: otherlv_2= 'extends' ( (lv_upperBound_3_0= ruleXGenericType ) )
                    {
                    otherlv_2=(Token)match(input,35,FollowSets000.FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_2, grammarAccess.getXGenericWildcardTypeArgumentAccess().getExtendsKeyword_2_0_0());
                          
                    }
                    // InternalXcore.g:3347:1: ( (lv_upperBound_3_0= ruleXGenericType ) )
                    // InternalXcore.g:3348:1: (lv_upperBound_3_0= ruleXGenericType )
                    {
                    // InternalXcore.g:3348:1: (lv_upperBound_3_0= ruleXGenericType )
                    // InternalXcore.g:3349:3: lv_upperBound_3_0= ruleXGenericType
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXGenericWildcardTypeArgumentAccess().getUpperBoundXGenericTypeParserRuleCall_2_0_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:3366:6: (otherlv_4= 'super' ( (lv_lowerBound_5_0= ruleXGenericType ) ) )
                    {
                    // InternalXcore.g:3366:6: (otherlv_4= 'super' ( (lv_lowerBound_5_0= ruleXGenericType ) ) )
                    // InternalXcore.g:3366:8: otherlv_4= 'super' ( (lv_lowerBound_5_0= ruleXGenericType ) )
                    {
                    otherlv_4=(Token)match(input,66,FollowSets000.FOLLOW_8); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_4, grammarAccess.getXGenericWildcardTypeArgumentAccess().getSuperKeyword_2_1_0());
                          
                    }
                    // InternalXcore.g:3370:1: ( (lv_lowerBound_5_0= ruleXGenericType ) )
                    // InternalXcore.g:3371:1: (lv_lowerBound_5_0= ruleXGenericType )
                    {
                    // InternalXcore.g:3371:1: (lv_lowerBound_5_0= ruleXGenericType )
                    // InternalXcore.g:3372:3: lv_lowerBound_5_0= ruleXGenericType
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXGenericWildcardTypeArgumentAccess().getLowerBoundXGenericTypeParserRuleCall_2_1_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:3396: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:3397:2: (iv_ruleXQualifiedName= ruleXQualifiedName EOF )
            // InternalXcore.g:3398:2: iv_ruleXQualifiedName= ruleXQualifiedName EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXQualifiedNameRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXQualifiedName=ruleXQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXQualifiedName.getText(); 
            }
            match(input,EOF,FollowSets000.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:3405: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:3408:28: ( (this_XID_0= ruleXID (kw= '.' this_XID_2= ruleXID )* ) )
            // InternalXcore.g:3409:1: (this_XID_0= ruleXID (kw= '.' this_XID_2= ruleXID )* )
            {
            // InternalXcore.g:3409:1: (this_XID_0= ruleXID (kw= '.' this_XID_2= ruleXID )* )
            // InternalXcore.g:3410:5: this_XID_0= ruleXID (kw= '.' this_XID_2= ruleXID )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXQualifiedNameAccess().getXIDParserRuleCall_0()); 
                  
            }
            pushFollow(FollowSets000.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:3420:1: (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:3421:2: kw= '.' this_XID_2= ruleXID
            	    {
            	    kw=(Token)match(input,67,FollowSets000.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(FollowSets000.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:3445: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:3446:2: (iv_ruleXID= ruleXID EOF )
            // InternalXcore.g:3447:2: iv_ruleXID= ruleXID EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXIDRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXID=ruleXID();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXID.getText(); 
            }
            match(input,EOF,FollowSets000.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:3454: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:3457:28: ( (this_ID_0= RULE_ID | kw= 'get' | kw= 'isSet' | kw= 'set' | kw= 'unset' ) )
            // InternalXcore.g:3458:1: (this_ID_0= RULE_ID | kw= 'get' | kw= 'isSet' | kw= 'set' | kw= 'unset' )
            {
            // InternalXcore.g:3458:1: (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:3458:6: this_ID_0= RULE_ID
                    {
                    this_ID_0=(Token)match(input,RULE_ID,FollowSets000.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:3467:2: kw= 'get'
                    {
                    kw=(Token)match(input,44,FollowSets000.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:3474:2: kw= 'isSet'
                    {
                    kw=(Token)match(input,46,FollowSets000.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:3481:2: kw= 'set'
                    {
                    kw=(Token)match(input,45,FollowSets000.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:3488:2: kw= 'unset'
                    {
                    kw=(Token)match(input,47,FollowSets000.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:3501: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:3502:2: (iv_ruleValidID= ruleValidID EOF )
            // InternalXcore.g:3503:2: iv_ruleValidID= ruleValidID EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getValidIDRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleValidID=ruleValidID();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleValidID.getText(); 
            }
            match(input,EOF,FollowSets000.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:3510: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:3513:28: ( (this_XID_0= ruleXID | kw= 'void' ) )
            // InternalXcore.g:3514:1: (this_XID_0= ruleXID | kw= 'void' )
            {
            // InternalXcore.g:3514:1: (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:3515:5: this_XID_0= ruleXID
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getValidIDAccess().getXIDParserRuleCall_0()); 
                          
                    }
                    pushFollow(FollowSets000.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:3527:2: kw= 'void'
                    {
                    kw=(Token)match(input,56,FollowSets000.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:3540: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:3541:2: (iv_ruleFeatureCallID= ruleFeatureCallID EOF )
            // InternalXcore.g:3542:2: iv_ruleFeatureCallID= ruleFeatureCallID EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getFeatureCallIDRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleFeatureCallID=ruleFeatureCallID();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleFeatureCallID.getText(); 
            }
            match(input,EOF,FollowSets000.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:3549: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:3552:28: ( (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:3553:1: (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:3553:1: (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:3554:5: this_ValidID_0= ruleValidID
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getFeatureCallIDAccess().getValidIDParserRuleCall_0()); 
                          
                    }
                    pushFollow(FollowSets000.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:3566:2: kw= 'abstract'
                    {
                    kw=(Token)match(input,32,FollowSets000.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:3573:2: kw= 'annotation'
                    {
                    kw=(Token)match(input,20,FollowSets000.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:3580:2: kw= 'as'
                    {
                    kw=(Token)match(input,21,FollowSets000.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:3587:2: kw= 'class'
                    {
                    kw=(Token)match(input,33,FollowSets000.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:3594:2: kw= 'container'
                    {
                    kw=(Token)match(input,50,FollowSets000.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:3601:2: kw= 'contains'
                    {
                    kw=(Token)match(input,48,FollowSets000.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:3608:2: kw= 'convert'
                    {
                    kw=(Token)match(input,27,FollowSets000.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:3615:2: kw= 'create'
                    {
                    kw=(Token)match(input,26,FollowSets000.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:3622:2: kw= 'derived'
                    {
                    kw=(Token)match(input,42,FollowSets000.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:3629:2: kw= 'enum'
                    {
                    kw=(Token)match(input,28,FollowSets000.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:3636:2: kw= 'extends'
                    {
                    kw=(Token)match(input,35,FollowSets000.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:3643:2: kw= 'extension'
                    {
                    kw=(Token)match(input,68,FollowSets000.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:3650:2: kw= 'id'
                    {
                    kw=(Token)match(input,43,FollowSets000.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:3657:2: kw= 'import'
                    {
                    kw=(Token)match(input,19,FollowSets000.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:3664:2: kw= 'keys'
                    {
                    kw=(Token)match(input,54,FollowSets000.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:3671:2: kw= 'interface'
                    {
                    kw=(Token)match(input,34,FollowSets000.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:3678:2: kw= 'local'
                    {
                    kw=(Token)match(input,52,FollowSets000.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:3685:2: kw= 'op'
                    {
                    kw=(Token)match(input,55,FollowSets000.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:3692:2: kw= 'opposite'
                    {
                    kw=(Token)match(input,53,FollowSets000.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:3699:2: kw= 'package'
                    {
                    kw=(Token)match(input,13,FollowSets000.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:3706:2: kw= 'readonly'
                    {
                    kw=(Token)match(input,38,FollowSets000.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:2: kw= 'refers'
                    {
                    kw=(Token)match(input,51,FollowSets000.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:3720:2: kw= 'resolving'
                    {
                    kw=(Token)match(input,49,FollowSets000.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:3727:2: kw= 'static'
                    {
                    kw=(Token)match(input,69,FollowSets000.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:3734:2: kw= 'throws'
                    {
                    kw=(Token)match(input,57,FollowSets000.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:3741:2: kw= 'transient'
                    {
                    kw=(Token)match(input,39,FollowSets000.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:3748:2: kw= 'unique'
                    {
                    kw=(Token)match(input,37,FollowSets000.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:3755:2: kw= 'unordered'
                    {
                    kw=(Token)match(input,36,FollowSets000.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:3762:2: kw= 'unsettable'
                    {
                    kw=(Token)match(input,41,FollowSets000.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:3769:2: kw= 'volatile'
                    {
                    kw=(Token)match(input,40,FollowSets000.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:3776:2: kw= 'wraps'
                    {
                    kw=(Token)match(input,25,FollowSets000.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:3789: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:3790:2: (iv_ruleXExpression= ruleXExpression EOF )
            // InternalXcore.g:3791:2: iv_ruleXExpression= ruleXExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXExpression=ruleXExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXExpression; 
            }
            match(input,EOF,FollowSets000.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:3798: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:3801:28: (this_XAssignment_0= ruleXAssignment )
            // InternalXcore.g:3803:5: this_XAssignment_0= ruleXAssignment
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXExpressionAccess().getXAssignmentParserRuleCall()); 
                  
            }
            pushFollow(FollowSets000.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:3819: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:3820:2: (iv_ruleXAssignment= ruleXAssignment EOF )
            // InternalXcore.g:3821:2: iv_ruleXAssignment= ruleXAssignment EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXAssignmentRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXAssignment=ruleXAssignment();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXAssignment; 
            }
            match(input,EOF,FollowSets000.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:3828: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:3831:28: ( ( ( () ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) ) ) | (this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )? ) ) )
            // InternalXcore.g:3832:1: ( ( () ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) ) ) | (this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )? ) )
            {
            // InternalXcore.g:3832:1: ( ( () ( ( 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:3832:2: ( () ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) ) )
                    {
                    // InternalXcore.g:3832:2: ( () ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) ) )
                    // InternalXcore.g:3832:3: () ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ( (lv_value_3_0= ruleXAssignment ) )
                    {
                    // InternalXcore.g:3832:3: ()
                    // InternalXcore.g:3833:5: 
                    {
                    if ( state.backtracking==0 ) {

                              current = forceCreateModelElement(
                                  grammarAccess.getXAssignmentAccess().getXAssignmentAction_0_0(),
                                  current);
                          
                    }

                    }

                    // InternalXcore.g:3838:2: ( ( ruleFeatureCallID ) )
                    // InternalXcore.g:3839:1: ( ruleFeatureCallID )
                    {
                    // InternalXcore.g:3839:1: ( ruleFeatureCallID )
                    // InternalXcore.g:3840:3: ruleFeatureCallID
                    {
                    if ( state.backtracking==0 ) {

                      			if (current==null) {
                      	            current = createModelElement(grammarAccess.getXAssignmentRule());
                      	        }
                              
                    }
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXAssignmentAccess().getFeatureJvmIdentifiableElementCrossReference_0_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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(FollowSets000.FOLLOW_75);
                    ruleOpSingleAssign();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              afterParserOrEnumRuleCall();
                          
                    }
                    // InternalXcore.g:3861:1: ( (lv_value_3_0= ruleXAssignment ) )
                    // InternalXcore.g:3862:1: (lv_value_3_0= ruleXAssignment )
                    {
                    // InternalXcore.g:3862:1: (lv_value_3_0= ruleXAssignment )
                    // InternalXcore.g:3863:3: lv_value_3_0= ruleXAssignment
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXAssignmentAccess().getValueXAssignmentParserRuleCall_0_3_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:3880:6: (this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )? )
                    {
                    // InternalXcore.g:3880:6: (this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )? )
                    // InternalXcore.g:3881:5: this_XOrExpression_4= ruleXOrExpression ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )?
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXAssignmentAccess().getXOrExpressionParserRuleCall_1_0()); 
                          
                    }
                    pushFollow(FollowSets000.FOLLOW_76);
                    this_XOrExpression_4=ruleXOrExpression();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_XOrExpression_4; 
                              afterParserOrEnumRuleCall();
                          
                    }
                    // InternalXcore.g:3889:1: ( ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) ) )?
                    int alt81=2;
                    alt81 = dfa81.predict(input);
                    switch (alt81) {
                        case 1 :
                            // InternalXcore.g:3889:2: ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) ) ( (lv_rightOperand_7_0= ruleXAssignment ) )
                            {
                            // InternalXcore.g:3889:2: ( ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) ) )
                            // InternalXcore.g:3889:3: ( ( () ( ( ruleOpMultiAssign ) ) ) )=> ( () ( ( ruleOpMultiAssign ) ) )
                            {
                            // InternalXcore.g:3894:6: ( () ( ( ruleOpMultiAssign ) ) )
                            // InternalXcore.g:3894:7: () ( ( ruleOpMultiAssign ) )
                            {
                            // InternalXcore.g:3894:7: ()
                            // InternalXcore.g:3895:5: 
                            {
                            if ( state.backtracking==0 ) {

                                      current = forceCreateModelElementAndSet(
                                          grammarAccess.getXAssignmentAccess().getXBinaryOperationLeftOperandAction_1_1_0_0_0(),
                                          current);
                                  
                            }

                            }

                            // InternalXcore.g:3900:2: ( ( ruleOpMultiAssign ) )
                            // InternalXcore.g:3901:1: ( ruleOpMultiAssign )
                            {
                            // InternalXcore.g:3901:1: ( ruleOpMultiAssign )
                            // InternalXcore.g:3902:3: 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(FollowSets000.FOLLOW_75);
                            ruleOpMultiAssign();

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

                            }


                            }


                            }


                            }

                            // InternalXcore.g:3915:4: ( (lv_rightOperand_7_0= ruleXAssignment ) )
                            // InternalXcore.g:3916:1: (lv_rightOperand_7_0= ruleXAssignment )
                            {
                            // InternalXcore.g:3916:1: (lv_rightOperand_7_0= ruleXAssignment )
                            // InternalXcore.g:3917:3: lv_rightOperand_7_0= ruleXAssignment
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getXAssignmentAccess().getRightOperandXAssignmentParserRuleCall_1_1_1_0()); 
                              	    
                            }
                            pushFollow(FollowSets000.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:3941: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:3942:2: (iv_ruleOpSingleAssign= ruleOpSingleAssign EOF )
            // InternalXcore.g:3943:2: iv_ruleOpSingleAssign= ruleOpSingleAssign EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpSingleAssignRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpSingleAssign=ruleOpSingleAssign();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpSingleAssign.getText(); 
            }
            match(input,EOF,FollowSets000.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:3950: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:28: (kw= '=' )
            // InternalXcore.g:3955:2: kw= '='
            {
            kw=(Token)match(input,18,FollowSets000.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:3968: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:3969:2: (iv_ruleOpMultiAssign= ruleOpMultiAssign EOF )
            // InternalXcore.g:3970:2: iv_ruleOpMultiAssign= ruleOpMultiAssign EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpMultiAssignRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpMultiAssign=ruleOpMultiAssign();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpMultiAssign.getText(); 
            }
            match(input,EOF,FollowSets000.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:3977: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:3980:28: ( (kw= '+=' | kw= '-=' | kw= '*=' | kw= '/=' | kw= '%=' | (kw= '<' kw= '<' kw= '=' ) | (kw= '>' (kw= '>' )? kw= '>=' ) ) )
            // InternalXcore.g:3981:1: (kw= '+=' | kw= '-=' | kw= '*=' | kw= '/=' | kw= '%=' | (kw= '<' kw= '<' kw= '=' ) | (kw= '>' (kw= '>' )? kw= '>=' ) )
            {
            // InternalXcore.g:3981:1: (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:3982:2: kw= '+='
                    {
                    kw=(Token)match(input,70,FollowSets000.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:3989:2: kw= '-='
                    {
                    kw=(Token)match(input,71,FollowSets000.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:3996:2: kw= '*='
                    {
                    kw=(Token)match(input,72,FollowSets000.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:4003:2: kw= '/='
                    {
                    kw=(Token)match(input,73,FollowSets000.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:4010:2: kw= '%='
                    {
                    kw=(Token)match(input,74,FollowSets000.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:4016:6: (kw= '<' kw= '<' kw= '=' )
                    {
                    // InternalXcore.g:4016:6: (kw= '<' kw= '<' kw= '=' )
                    // InternalXcore.g:4017:2: kw= '<' kw= '<' kw= '='
                    {
                    kw=(Token)match(input,23,FollowSets000.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,FollowSets000.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,FollowSets000.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:4035:6: (kw= '>' (kw= '>' )? kw= '>=' )
                    {
                    // InternalXcore.g:4035:6: (kw= '>' (kw= '>' )? kw= '>=' )
                    // InternalXcore.g:4036:2: kw= '>' (kw= '>' )? kw= '>='
                    {
                    kw=(Token)match(input,24,FollowSets000.FOLLOW_78); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getGreaterThanSignKeyword_6_0()); 
                          
                    }
                    // InternalXcore.g:4041:1: (kw= '>' )?
                    int alt83=2;
                    int LA83_0 = input.LA(1);

                    if ( (LA83_0==24) ) {
                        alt83=1;
                    }
                    switch (alt83) {
                        case 1 :
                            // InternalXcore.g:4042:2: kw= '>'
                            {
                            kw=(Token)match(input,24,FollowSets000.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,FollowSets000.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:4061: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:4062:2: (iv_ruleXOrExpression= ruleXOrExpression EOF )
            // InternalXcore.g:4063:2: iv_ruleXOrExpression= ruleXOrExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXOrExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXOrExpression=ruleXOrExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXOrExpression; 
            }
            match(input,EOF,FollowSets000.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:4070: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:4073:28: ( (this_XAndExpression_0= ruleXAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) ) )* ) )
            // InternalXcore.g:4074:1: (this_XAndExpression_0= ruleXAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) ) )* )
            {
            // InternalXcore.g:4074:1: (this_XAndExpression_0= ruleXAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) ) )* )
            // InternalXcore.g:4075:5: this_XAndExpression_0= ruleXAndExpression ( ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) ) )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXOrExpressionAccess().getXAndExpressionParserRuleCall_0()); 
                  
            }
            pushFollow(FollowSets000.FOLLOW_80);
            this_XAndExpression_0=ruleXAndExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XAndExpression_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // InternalXcore.g:4083:1: ( ( ( ( () ( ( 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:4083:2: ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) ) ( (lv_rightOperand_3_0= ruleXAndExpression ) )
            	    {
            	    // InternalXcore.g:4083:2: ( ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) ) )
            	    // InternalXcore.g:4083:3: ( ( () ( ( ruleOpOr ) ) ) )=> ( () ( ( ruleOpOr ) ) )
            	    {
            	    // InternalXcore.g:4088:6: ( () ( ( ruleOpOr ) ) )
            	    // InternalXcore.g:4088:7: () ( ( ruleOpOr ) )
            	    {
            	    // InternalXcore.g:4088:7: ()
            	    // InternalXcore.g:4089:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXOrExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    // InternalXcore.g:4094:2: ( ( ruleOpOr ) )
            	    // InternalXcore.g:4095:1: ( ruleOpOr )
            	    {
            	    // InternalXcore.g:4095:1: ( ruleOpOr )
            	    // InternalXcore.g:4096:3: 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(FollowSets000.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:1: (lv_rightOperand_3_0= ruleXAndExpression )
            	    {
            	    // InternalXcore.g:4110:1: (lv_rightOperand_3_0= ruleXAndExpression )
            	    // InternalXcore.g:4111:3: lv_rightOperand_3_0= ruleXAndExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXOrExpressionAccess().getRightOperandXAndExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:4135: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:4136:2: (iv_ruleOpOr= ruleOpOr EOF )
            // InternalXcore.g:4137:2: iv_ruleOpOr= ruleOpOr EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpOrRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpOr=ruleOpOr();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpOr.getText(); 
            }
            match(input,EOF,FollowSets000.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:4144: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:4147:28: (kw= '||' )
            // InternalXcore.g:4149:2: kw= '||'
            {
            kw=(Token)match(input,76,FollowSets000.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:4162: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:4163:2: (iv_ruleXAndExpression= ruleXAndExpression EOF )
            // InternalXcore.g:4164:2: iv_ruleXAndExpression= ruleXAndExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXAndExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXAndExpression=ruleXAndExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXAndExpression; 
            }
            match(input,EOF,FollowSets000.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:4171: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:4174:28: ( (this_XEqualityExpression_0= ruleXEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) ) )* ) )
            // InternalXcore.g:4175:1: (this_XEqualityExpression_0= ruleXEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) ) )* )
            {
            // InternalXcore.g:4175:1: (this_XEqualityExpression_0= ruleXEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) ) )* )
            // InternalXcore.g:4176:5: this_XEqualityExpression_0= ruleXEqualityExpression ( ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) ) )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXAndExpressionAccess().getXEqualityExpressionParserRuleCall_0()); 
                  
            }
            pushFollow(FollowSets000.FOLLOW_81);
            this_XEqualityExpression_0=ruleXEqualityExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XEqualityExpression_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // InternalXcore.g:4184:1: ( ( ( ( () ( ( 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:4184:2: ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) ) ( (lv_rightOperand_3_0= ruleXEqualityExpression ) )
            	    {
            	    // InternalXcore.g:4184:2: ( ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) ) )
            	    // InternalXcore.g:4184:3: ( ( () ( ( ruleOpAnd ) ) ) )=> ( () ( ( ruleOpAnd ) ) )
            	    {
            	    // InternalXcore.g:4189:6: ( () ( ( ruleOpAnd ) ) )
            	    // InternalXcore.g:4189:7: () ( ( ruleOpAnd ) )
            	    {
            	    // InternalXcore.g:4189:7: ()
            	    // InternalXcore.g:4190:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXAndExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    // InternalXcore.g:4195:2: ( ( ruleOpAnd ) )
            	    // InternalXcore.g:4196:1: ( ruleOpAnd )
            	    {
            	    // InternalXcore.g:4196:1: ( ruleOpAnd )
            	    // InternalXcore.g:4197:3: 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(FollowSets000.FOLLOW_75);
            	    ruleOpAnd();

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

            	    }


            	    }


            	    }


            	    }

            	    // InternalXcore.g:4210:4: ( (lv_rightOperand_3_0= ruleXEqualityExpression ) )
            	    // InternalXcore.g:4211:1: (lv_rightOperand_3_0= ruleXEqualityExpression )
            	    {
            	    // InternalXcore.g:4211:1: (lv_rightOperand_3_0= ruleXEqualityExpression )
            	    // InternalXcore.g:4212:3: lv_rightOperand_3_0= ruleXEqualityExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXAndExpressionAccess().getRightOperandXEqualityExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:4236: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:4237:2: (iv_ruleOpAnd= ruleOpAnd EOF )
            // InternalXcore.g:4238:2: iv_ruleOpAnd= ruleOpAnd EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpAndRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpAnd=ruleOpAnd();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpAnd.getText(); 
            }
            match(input,EOF,FollowSets000.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:4245: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:4248:28: (kw= '&&' )
            // InternalXcore.g:4250:2: kw= '&&'
            {
            kw=(Token)match(input,77,FollowSets000.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:4263: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:4264:2: (iv_ruleXEqualityExpression= ruleXEqualityExpression EOF )
            // InternalXcore.g:4265:2: iv_ruleXEqualityExpression= ruleXEqualityExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXEqualityExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXEqualityExpression=ruleXEqualityExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXEqualityExpression; 
            }
            match(input,EOF,FollowSets000.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:4272: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:28: ( (this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )* ) )
            // InternalXcore.g:4276:1: (this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )* )
            {
            // InternalXcore.g:4276:1: (this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )* )
            // InternalXcore.g:4277:5: this_XRelationalExpression_0= ruleXRelationalExpression ( ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) ) )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXEqualityExpressionAccess().getXRelationalExpressionParserRuleCall_0()); 
                  
            }
            pushFollow(FollowSets000.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:1: ( ( ( ( () ( ( 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:4285:2: ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) ) ( (lv_rightOperand_3_0= ruleXRelationalExpression ) )
            	    {
            	    // InternalXcore.g:4285:2: ( ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) ) )
            	    // InternalXcore.g:4285:3: ( ( () ( ( ruleOpEquality ) ) ) )=> ( () ( ( ruleOpEquality ) ) )
            	    {
            	    // InternalXcore.g:4290:6: ( () ( ( ruleOpEquality ) ) )
            	    // InternalXcore.g:4290:7: () ( ( ruleOpEquality ) )
            	    {
            	    // InternalXcore.g:4290:7: ()
            	    // InternalXcore.g:4291:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXEqualityExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    // InternalXcore.g:4296:2: ( ( ruleOpEquality ) )
            	    // InternalXcore.g:4297:1: ( ruleOpEquality )
            	    {
            	    // InternalXcore.g:4297:1: ( ruleOpEquality )
            	    // InternalXcore.g:4298:3: 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(FollowSets000.FOLLOW_75);
            	    ruleOpEquality();

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

            	    }


            	    }


            	    }


            	    }

            	    // InternalXcore.g:4311:4: ( (lv_rightOperand_3_0= ruleXRelationalExpression ) )
            	    // InternalXcore.g:4312:1: (lv_rightOperand_3_0= ruleXRelationalExpression )
            	    {
            	    // InternalXcore.g:4312:1: (lv_rightOperand_3_0= ruleXRelationalExpression )
            	    // InternalXcore.g:4313:3: lv_rightOperand_3_0= ruleXRelationalExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXEqualityExpressionAccess().getRightOperandXRelationalExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:4337: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:4338:2: (iv_ruleOpEquality= ruleOpEquality EOF )
            // InternalXcore.g:4339:2: iv_ruleOpEquality= ruleOpEquality EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpEqualityRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpEquality=ruleOpEquality();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpEquality.getText(); 
            }
            match(input,EOF,FollowSets000.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:4346: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:4349:28: ( (kw= '==' | kw= '!=' | kw= '===' | kw= '!==' ) )
            // InternalXcore.g:4350:1: (kw= '==' | kw= '!=' | kw= '===' | kw= '!==' )
            {
            // InternalXcore.g:4350:1: (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:4351:2: kw= '=='
                    {
                    kw=(Token)match(input,78,FollowSets000.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:4358:2: kw= '!='
                    {
                    kw=(Token)match(input,79,FollowSets000.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:4365:2: kw= '==='
                    {
                    kw=(Token)match(input,80,FollowSets000.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:4372:2: kw= '!=='
                    {
                    kw=(Token)match(input,81,FollowSets000.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:4385: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:4386:2: (iv_ruleXRelationalExpression= ruleXRelationalExpression EOF )
            // InternalXcore.g:4387:2: iv_ruleXRelationalExpression= ruleXRelationalExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXRelationalExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXRelationalExpression=ruleXRelationalExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXRelationalExpression; 
            }
            match(input,EOF,FollowSets000.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:4394: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:4397:28: ( (this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )* ) )
            // InternalXcore.g:4398:1: (this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )* )
            {
            // InternalXcore.g:4398:1: (this_XOtherOperatorExpression_0= ruleXOtherOperatorExpression ( ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) ) | ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) ) )* )
            // InternalXcore.g:4399:5: 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(FollowSets000.FOLLOW_83);
            this_XOtherOperatorExpression_0=ruleXOtherOperatorExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XOtherOperatorExpression_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // InternalXcore.g:4407:1: ( ( ( ( ( () '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:4407:2: ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )
            	    {
            	    // InternalXcore.g:4407:2: ( ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )
            	    // InternalXcore.g:4407:3: ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) )
            	    {
            	    // InternalXcore.g:4407:3: ( ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' ) )
            	    // InternalXcore.g:4407:4: ( ( () 'instanceof' ) )=> ( () otherlv_2= 'instanceof' )
            	    {
            	    // InternalXcore.g:4409:5: ( () otherlv_2= 'instanceof' )
            	    // InternalXcore.g:4409:6: () otherlv_2= 'instanceof'
            	    {
            	    // InternalXcore.g:4409:6: ()
            	    // InternalXcore.g:4410:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXRelationalExpressionAccess().getXInstanceOfExpressionExpressionAction_1_0_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    otherlv_2=(Token)match(input,82,FollowSets000.FOLLOW_20); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_2, grammarAccess.getXRelationalExpressionAccess().getInstanceofKeyword_1_0_0_0_1());
            	          
            	    }

            	    }


            	    }

            	    // InternalXcore.g:4419:3: ( (lv_type_3_0= ruleJvmTypeReference ) )
            	    // InternalXcore.g:4420:1: (lv_type_3_0= ruleJvmTypeReference )
            	    {
            	    // InternalXcore.g:4420:1: (lv_type_3_0= ruleJvmTypeReference )
            	    // InternalXcore.g:4421:3: lv_type_3_0= ruleJvmTypeReference
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getTypeJvmTypeReferenceParserRuleCall_1_0_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:4438:6: ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) )
            	    {
            	    // InternalXcore.g:4438:6: ( ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) ) )
            	    // InternalXcore.g:4438:7: ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) ) ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) )
            	    {
            	    // InternalXcore.g:4438:7: ( ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) ) )
            	    // InternalXcore.g:4438:8: ( ( () ( ( ruleOpCompare ) ) ) )=> ( () ( ( ruleOpCompare ) ) )
            	    {
            	    // InternalXcore.g:4443:6: ( () ( ( ruleOpCompare ) ) )
            	    // InternalXcore.g:4443:7: () ( ( ruleOpCompare ) )
            	    {
            	    // InternalXcore.g:4443:7: ()
            	    // InternalXcore.g:4444:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXRelationalExpressionAccess().getXBinaryOperationLeftOperandAction_1_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    // InternalXcore.g:4449:2: ( ( ruleOpCompare ) )
            	    // InternalXcore.g:4450:1: ( ruleOpCompare )
            	    {
            	    // InternalXcore.g:4450:1: ( ruleOpCompare )
            	    // InternalXcore.g:4451:3: 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(FollowSets000.FOLLOW_75);
            	    ruleOpCompare();

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

            	    }


            	    }


            	    }


            	    }

            	    // InternalXcore.g:4464:4: ( (lv_rightOperand_6_0= ruleXOtherOperatorExpression ) )
            	    // InternalXcore.g:4465:1: (lv_rightOperand_6_0= ruleXOtherOperatorExpression )
            	    {
            	    // InternalXcore.g:4465:1: (lv_rightOperand_6_0= ruleXOtherOperatorExpression )
            	    // InternalXcore.g:4466:3: lv_rightOperand_6_0= ruleXOtherOperatorExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXRelationalExpressionAccess().getRightOperandXOtherOperatorExpressionParserRuleCall_1_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:4490: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:4491:2: (iv_ruleOpCompare= ruleOpCompare EOF )
            // InternalXcore.g:4492:2: iv_ruleOpCompare= ruleOpCompare EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpCompareRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpCompare=ruleOpCompare();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpCompare.getText(); 
            }
            match(input,EOF,FollowSets000.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:4499: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:4502:28: ( (kw= '>=' | (kw= '<' kw= '=' ) | kw= '>' | kw= '<' ) )
            // InternalXcore.g:4503:1: (kw= '>=' | (kw= '<' kw= '=' ) | kw= '>' | kw= '<' )
            {
            // InternalXcore.g:4503:1: (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:4504:2: kw= '>='
                    {
                    kw=(Token)match(input,75,FollowSets000.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:4510:6: (kw= '<' kw= '=' )
                    {
                    // InternalXcore.g:4510:6: (kw= '<' kw= '=' )
                    // InternalXcore.g:4511:2: kw= '<' kw= '='
                    {
                    kw=(Token)match(input,23,FollowSets000.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,FollowSets000.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:4524:2: kw= '>'
                    {
                    kw=(Token)match(input,24,FollowSets000.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:4531:2: kw= '<'
                    {
                    kw=(Token)match(input,23,FollowSets000.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:4544: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:4545:2: (iv_ruleXOtherOperatorExpression= ruleXOtherOperatorExpression EOF )
            // InternalXcore.g:4546:2: iv_ruleXOtherOperatorExpression= ruleXOtherOperatorExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXOtherOperatorExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXOtherOperatorExpression=ruleXOtherOperatorExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXOtherOperatorExpression; 
            }
            match(input,EOF,FollowSets000.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:4553: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:4556:28: ( (this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )* ) )
            // InternalXcore.g:4557:1: (this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )* )
            {
            // InternalXcore.g:4557:1: (this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )* )
            // InternalXcore.g:4558:5: this_XAdditiveExpression_0= ruleXAdditiveExpression ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXOtherOperatorExpressionAccess().getXAdditiveExpressionParserRuleCall_0()); 
                  
            }
            pushFollow(FollowSets000.FOLLOW_84);
            this_XAdditiveExpression_0=ruleXAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XAdditiveExpression_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // InternalXcore.g:4566:1: ( ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) ) )*
            loop91:
            do {
                int alt91=2;
                alt91 = dfa91.predict(input);
                switch (alt91) {
            	case 1 :
            	    // InternalXcore.g:4566:2: ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) ) ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) )
            	    {
            	    // InternalXcore.g:4566:2: ( ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) ) )
            	    // InternalXcore.g:4566:3: ( ( () ( ( ruleOpOther ) ) ) )=> ( () ( ( ruleOpOther ) ) )
            	    {
            	    // InternalXcore.g:4571:6: ( () ( ( ruleOpOther ) ) )
            	    // InternalXcore.g:4571:7: () ( ( ruleOpOther ) )
            	    {
            	    // InternalXcore.g:4571:7: ()
            	    // InternalXcore.g:4572:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXOtherOperatorExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    // InternalXcore.g:4577:2: ( ( ruleOpOther ) )
            	    // InternalXcore.g:4578:1: ( ruleOpOther )
            	    {
            	    // InternalXcore.g:4578:1: ( ruleOpOther )
            	    // InternalXcore.g:4579:3: 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(FollowSets000.FOLLOW_75);
            	    ruleOpOther();

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

            	    }


            	    }


            	    }


            	    }

            	    // InternalXcore.g:4592:4: ( (lv_rightOperand_3_0= ruleXAdditiveExpression ) )
            	    // InternalXcore.g:4593:1: (lv_rightOperand_3_0= ruleXAdditiveExpression )
            	    {
            	    // InternalXcore.g:4593:1: (lv_rightOperand_3_0= ruleXAdditiveExpression )
            	    // InternalXcore.g:4594:3: lv_rightOperand_3_0= ruleXAdditiveExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXOtherOperatorExpressionAccess().getRightOperandXAdditiveExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:4618: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:4619:2: (iv_ruleOpOther= ruleOpOther EOF )
            // InternalXcore.g:4620:2: iv_ruleOpOther= ruleOpOther EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpOtherRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpOther=ruleOpOther();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpOther.getText(); 
            }
            match(input,EOF,FollowSets000.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:4627: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:4630:28: ( (kw= '->' | kw= '..<' | (kw= '>' kw= '..' ) | kw= '..' | kw= '=>' | (kw= '>' ( ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) ) | kw= '>' ) ) | (kw= '<' ( ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) ) | kw= '<' | kw= '=>' ) ) | kw= '<>' | kw= '?:' ) )
            // InternalXcore.g:4631:1: (kw= '->' | kw= '..<' | (kw= '>' kw= '..' ) | kw= '..' | kw= '=>' | (kw= '>' ( ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) ) | kw= '>' ) ) | (kw= '<' ( ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) ) | kw= '<' | kw= '=>' ) ) | kw= '<>' | kw= '?:' )
            {
            // InternalXcore.g:4631:1: (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:4632:2: kw= '->'
                    {
                    kw=(Token)match(input,83,FollowSets000.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:4639:2: kw= '..<'
                    {
                    kw=(Token)match(input,84,FollowSets000.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:4645:6: (kw= '>' kw= '..' )
                    {
                    // InternalXcore.g:4645:6: (kw= '>' kw= '..' )
                    // InternalXcore.g:4646:2: kw= '>' kw= '..'
                    {
                    kw=(Token)match(input,24,FollowSets000.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,FollowSets000.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:4659:2: kw= '..'
                    {
                    kw=(Token)match(input,63,FollowSets000.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:4666:2: kw= '=>'
                    {
                    kw=(Token)match(input,85,FollowSets000.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:4672:6: (kw= '>' ( ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) ) | kw= '>' ) )
                    {
                    // InternalXcore.g:4672:6: (kw= '>' ( ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) ) | kw= '>' ) )
                    // InternalXcore.g:4673:2: kw= '>' ( ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) ) | kw= '>' )
                    {
                    kw=(Token)match(input,24,FollowSets000.FOLLOW_86); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpOtherAccess().getGreaterThanSignKeyword_5_0()); 
                          
                    }
                    // InternalXcore.g:4678:1: ( ( ( ( '>' '>' ) )=> (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:4678:2: ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) )
                            {
                            // InternalXcore.g:4678:2: ( ( ( '>' '>' ) )=> (kw= '>' kw= '>' ) )
                            // InternalXcore.g:4678:3: ( ( '>' '>' ) )=> (kw= '>' kw= '>' )
                            {
                            // InternalXcore.g:4682:5: (kw= '>' kw= '>' )
                            // InternalXcore.g:4683:2: kw= '>' kw= '>'
                            {
                            kw=(Token)match(input,24,FollowSets000.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,FollowSets000.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:4696:2: kw= '>'
                            {
                            kw=(Token)match(input,24,FollowSets000.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:4702:6: (kw= '<' ( ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) ) | kw= '<' | kw= '=>' ) )
                    {
                    // InternalXcore.g:4702:6: (kw= '<' ( ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) ) | kw= '<' | kw= '=>' ) )
                    // InternalXcore.g:4703:2: kw= '<' ( ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) ) | kw= '<' | kw= '=>' )
                    {
                    kw=(Token)match(input,23,FollowSets000.FOLLOW_87); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getOpOtherAccess().getLessThanSignKeyword_6_0()); 
                          
                    }
                    // InternalXcore.g:4708:1: ( ( ( ( '<' '<' ) )=> (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:4708:2: ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) )
                            {
                            // InternalXcore.g:4708:2: ( ( ( '<' '<' ) )=> (kw= '<' kw= '<' ) )
                            // InternalXcore.g:4708:3: ( ( '<' '<' ) )=> (kw= '<' kw= '<' )
                            {
                            // InternalXcore.g:4712:5: (kw= '<' kw= '<' )
                            // InternalXcore.g:4713:2: kw= '<' kw= '<'
                            {
                            kw=(Token)match(input,23,FollowSets000.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,FollowSets000.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:4726:2: kw= '<'
                            {
                            kw=(Token)match(input,23,FollowSets000.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:4733:2: kw= '=>'
                            {
                            kw=(Token)match(input,85,FollowSets000.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:4740:2: kw= '<>'
                    {
                    kw=(Token)match(input,86,FollowSets000.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:4747:2: kw= '?:'
                    {
                    kw=(Token)match(input,87,FollowSets000.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:4760: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:4761:2: (iv_ruleXAdditiveExpression= ruleXAdditiveExpression EOF )
            // InternalXcore.g:4762:2: iv_ruleXAdditiveExpression= ruleXAdditiveExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXAdditiveExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXAdditiveExpression=ruleXAdditiveExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXAdditiveExpression; 
            }
            match(input,EOF,FollowSets000.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:4769: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:4772:28: ( (this_XMultiplicativeExpression_0= ruleXMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) ) )* ) )
            // InternalXcore.g:4773:1: (this_XMultiplicativeExpression_0= ruleXMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) ) )* )
            {
            // InternalXcore.g:4773:1: (this_XMultiplicativeExpression_0= ruleXMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) ) )* )
            // InternalXcore.g:4774:5: this_XMultiplicativeExpression_0= ruleXMultiplicativeExpression ( ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) ) )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXAdditiveExpressionAccess().getXMultiplicativeExpressionParserRuleCall_0()); 
                  
            }
            pushFollow(FollowSets000.FOLLOW_88);
            this_XMultiplicativeExpression_0=ruleXMultiplicativeExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XMultiplicativeExpression_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // InternalXcore.g:4782:1: ( ( ( ( () ( ( 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:4782:2: ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) ) ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) )
            	    {
            	    // InternalXcore.g:4782:2: ( ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) ) )
            	    // InternalXcore.g:4782:3: ( ( () ( ( ruleOpAdd ) ) ) )=> ( () ( ( ruleOpAdd ) ) )
            	    {
            	    // InternalXcore.g:4787:6: ( () ( ( ruleOpAdd ) ) )
            	    // InternalXcore.g:4787:7: () ( ( ruleOpAdd ) )
            	    {
            	    // InternalXcore.g:4787:7: ()
            	    // InternalXcore.g:4788:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXAdditiveExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    // InternalXcore.g:4793:2: ( ( ruleOpAdd ) )
            	    // InternalXcore.g:4794:1: ( ruleOpAdd )
            	    {
            	    // InternalXcore.g:4794:1: ( ruleOpAdd )
            	    // InternalXcore.g:4795:3: 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(FollowSets000.FOLLOW_75);
            	    ruleOpAdd();

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

            	    }


            	    }


            	    }


            	    }

            	    // InternalXcore.g:4808:4: ( (lv_rightOperand_3_0= ruleXMultiplicativeExpression ) )
            	    // InternalXcore.g:4809:1: (lv_rightOperand_3_0= ruleXMultiplicativeExpression )
            	    {
            	    // InternalXcore.g:4809:1: (lv_rightOperand_3_0= ruleXMultiplicativeExpression )
            	    // InternalXcore.g:4810:3: lv_rightOperand_3_0= ruleXMultiplicativeExpression
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXAdditiveExpressionAccess().getRightOperandXMultiplicativeExpressionParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:4834: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:4835:2: (iv_ruleOpAdd= ruleOpAdd EOF )
            // InternalXcore.g:4836:2: iv_ruleOpAdd= ruleOpAdd EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpAddRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpAdd=ruleOpAdd();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpAdd.getText(); 
            }
            match(input,EOF,FollowSets000.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:4843: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:4846:28: ( (kw= '+' | kw= '-' ) )
            // InternalXcore.g:4847:1: (kw= '+' | kw= '-' )
            {
            // InternalXcore.g:4847:1: (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:4848:2: kw= '+'
                    {
                    kw=(Token)match(input,62,FollowSets000.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:4855:2: kw= '-'
                    {
                    kw=(Token)match(input,31,FollowSets000.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:4868: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:4869:2: (iv_ruleXMultiplicativeExpression= ruleXMultiplicativeExpression EOF )
            // InternalXcore.g:4870:2: iv_ruleXMultiplicativeExpression= ruleXMultiplicativeExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXMultiplicativeExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXMultiplicativeExpression=ruleXMultiplicativeExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXMultiplicativeExpression; 
            }
            match(input,EOF,FollowSets000.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:4877: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:4880:28: ( (this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )* ) )
            // InternalXcore.g:4881:1: (this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )* )
            {
            // InternalXcore.g:4881:1: (this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )* )
            // InternalXcore.g:4882:5: this_XUnaryOperation_0= ruleXUnaryOperation ( ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) ) )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXMultiplicativeExpressionAccess().getXUnaryOperationParserRuleCall_0()); 
                  
            }
            pushFollow(FollowSets000.FOLLOW_89);
            this_XUnaryOperation_0=ruleXUnaryOperation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XUnaryOperation_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // InternalXcore.g:4890:1: ( ( ( ( () ( ( 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:4890:2: ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) ) ( (lv_rightOperand_3_0= ruleXUnaryOperation ) )
            	    {
            	    // InternalXcore.g:4890:2: ( ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) ) )
            	    // InternalXcore.g:4890:3: ( ( () ( ( ruleOpMulti ) ) ) )=> ( () ( ( ruleOpMulti ) ) )
            	    {
            	    // InternalXcore.g:4895:6: ( () ( ( ruleOpMulti ) ) )
            	    // InternalXcore.g:4895:7: () ( ( ruleOpMulti ) )
            	    {
            	    // InternalXcore.g:4895:7: ()
            	    // InternalXcore.g:4896:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXMultiplicativeExpressionAccess().getXBinaryOperationLeftOperandAction_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    // InternalXcore.g:4901:2: ( ( ruleOpMulti ) )
            	    // InternalXcore.g:4902:1: ( ruleOpMulti )
            	    {
            	    // InternalXcore.g:4902:1: ( ruleOpMulti )
            	    // InternalXcore.g:4903:3: 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(FollowSets000.FOLLOW_75);
            	    ruleOpMulti();

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

            	    }


            	    }


            	    }


            	    }

            	    // InternalXcore.g:4916:4: ( (lv_rightOperand_3_0= ruleXUnaryOperation ) )
            	    // InternalXcore.g:4917:1: (lv_rightOperand_3_0= ruleXUnaryOperation )
            	    {
            	    // InternalXcore.g:4917:1: (lv_rightOperand_3_0= ruleXUnaryOperation )
            	    // InternalXcore.g:4918:3: lv_rightOperand_3_0= ruleXUnaryOperation
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXMultiplicativeExpressionAccess().getRightOperandXUnaryOperationParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:4942: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:4943:2: (iv_ruleOpMulti= ruleOpMulti EOF )
            // InternalXcore.g:4944:2: iv_ruleOpMulti= ruleOpMulti EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpMultiRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpMulti=ruleOpMulti();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpMulti.getText(); 
            }
            match(input,EOF,FollowSets000.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:4951: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:4954:28: ( (kw= '*' | kw= '**' | kw= '/' | kw= '%' ) )
            // InternalXcore.g:4955:1: (kw= '*' | kw= '**' | kw= '/' | kw= '%' )
            {
            // InternalXcore.g:4955:1: (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:4956:2: kw= '*'
                    {
                    kw=(Token)match(input,61,FollowSets000.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:4963:2: kw= '**'
                    {
                    kw=(Token)match(input,88,FollowSets000.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:4970:2: kw= '/'
                    {
                    kw=(Token)match(input,89,FollowSets000.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:4977:2: kw= '%'
                    {
                    kw=(Token)match(input,90,FollowSets000.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:4990: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:4991:2: (iv_ruleXUnaryOperation= ruleXUnaryOperation EOF )
            // InternalXcore.g:4992:2: iv_ruleXUnaryOperation= ruleXUnaryOperation EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXUnaryOperationRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXUnaryOperation=ruleXUnaryOperation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXUnaryOperation; 
            }
            match(input,EOF,FollowSets000.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:4999: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:5002:28: ( ( ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) ) ) | this_XCastedExpression_3= ruleXCastedExpression ) )
            // InternalXcore.g:5003:1: ( ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) ) ) | this_XCastedExpression_3= ruleXCastedExpression )
            {
            // InternalXcore.g:5003:1: ( ( () ( ( 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:5003:2: ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) ) )
                    {
                    // InternalXcore.g:5003:2: ( () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) ) )
                    // InternalXcore.g:5003:3: () ( ( ruleOpUnary ) ) ( (lv_operand_2_0= ruleXUnaryOperation ) )
                    {
                    // InternalXcore.g:5003:3: ()
                    // InternalXcore.g:5004:5: 
                    {
                    if ( state.backtracking==0 ) {

                              current = forceCreateModelElement(
                                  grammarAccess.getXUnaryOperationAccess().getXUnaryOperationAction_0_0(),
                                  current);
                          
                    }

                    }

                    // InternalXcore.g:5009:2: ( ( ruleOpUnary ) )
                    // InternalXcore.g:5010:1: ( ruleOpUnary )
                    {
                    // InternalXcore.g:5010:1: ( ruleOpUnary )
                    // InternalXcore.g:5011:3: ruleOpUnary
                    {
                    if ( state.backtracking==0 ) {

                      			if (current==null) {
                      	            current = createModelElement(grammarAccess.getXUnaryOperationRule());
                      	        }
                              
                    }
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXUnaryOperationAccess().getFeatureJvmIdentifiableElementCrossReference_0_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.FOLLOW_75);
                    ruleOpUnary();

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

                    }


                    }

                    // InternalXcore.g:5024:2: ( (lv_operand_2_0= ruleXUnaryOperation ) )
                    // InternalXcore.g:5025:1: (lv_operand_2_0= ruleXUnaryOperation )
                    {
                    // InternalXcore.g:5025:1: (lv_operand_2_0= ruleXUnaryOperation )
                    // InternalXcore.g:5026:3: lv_operand_2_0= ruleXUnaryOperation
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXUnaryOperationAccess().getOperandXUnaryOperationParserRuleCall_0_2_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:5044:5: this_XCastedExpression_3= ruleXCastedExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXUnaryOperationAccess().getXCastedExpressionParserRuleCall_1()); 
                          
                    }
                    pushFollow(FollowSets000.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:5060: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:5061:2: (iv_ruleOpUnary= ruleOpUnary EOF )
            // InternalXcore.g:5062:2: iv_ruleOpUnary= ruleOpUnary EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpUnaryRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpUnary=ruleOpUnary();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpUnary.getText(); 
            }
            match(input,EOF,FollowSets000.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:5069: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:5072:28: ( (kw= '!' | kw= '-' | kw= '+' ) )
            // InternalXcore.g:5073:1: (kw= '!' | kw= '-' | kw= '+' )
            {
            // InternalXcore.g:5073:1: (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:5074:2: kw= '!'
                    {
                    kw=(Token)match(input,91,FollowSets000.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:5081:2: kw= '-'
                    {
                    kw=(Token)match(input,31,FollowSets000.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:5088:2: kw= '+'
                    {
                    kw=(Token)match(input,62,FollowSets000.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:5101: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:5102:2: (iv_ruleXCastedExpression= ruleXCastedExpression EOF )
            // InternalXcore.g:5103:2: iv_ruleXCastedExpression= ruleXCastedExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXCastedExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXCastedExpression=ruleXCastedExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXCastedExpression; 
            }
            match(input,EOF,FollowSets000.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:5110: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:5113:28: ( (this_XPostfixOperation_0= ruleXPostfixOperation ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )* ) )
            // InternalXcore.g:5114:1: (this_XPostfixOperation_0= ruleXPostfixOperation ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )* )
            {
            // InternalXcore.g:5114:1: (this_XPostfixOperation_0= ruleXPostfixOperation ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )* )
            // InternalXcore.g:5115:5: this_XPostfixOperation_0= ruleXPostfixOperation ( ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) ) )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXCastedExpressionAccess().getXPostfixOperationParserRuleCall_0()); 
                  
            }
            pushFollow(FollowSets000.FOLLOW_90);
            this_XPostfixOperation_0=ruleXPostfixOperation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XPostfixOperation_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // InternalXcore.g:5123:1: ( ( ( ( () '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:5123:2: ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) ) ( (lv_type_3_0= ruleJvmTypeReference ) )
            	    {
            	    // InternalXcore.g:5123:2: ( ( ( () 'as' ) )=> ( () otherlv_2= 'as' ) )
            	    // InternalXcore.g:5123:3: ( ( () 'as' ) )=> ( () otherlv_2= 'as' )
            	    {
            	    // InternalXcore.g:5125:5: ( () otherlv_2= 'as' )
            	    // InternalXcore.g:5125:6: () otherlv_2= 'as'
            	    {
            	    // InternalXcore.g:5125:6: ()
            	    // InternalXcore.g:5126:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXCastedExpressionAccess().getXCastedExpressionTargetAction_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

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

            	          	newLeafNode(otherlv_2, grammarAccess.getXCastedExpressionAccess().getAsKeyword_1_0_0_1());
            	          
            	    }

            	    }


            	    }

            	    // InternalXcore.g:5135:3: ( (lv_type_3_0= ruleJvmTypeReference ) )
            	    // InternalXcore.g:5136:1: (lv_type_3_0= ruleJvmTypeReference )
            	    {
            	    // InternalXcore.g:5136:1: (lv_type_3_0= ruleJvmTypeReference )
            	    // InternalXcore.g:5137:3: lv_type_3_0= ruleJvmTypeReference
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXCastedExpressionAccess().getTypeJvmTypeReferenceParserRuleCall_1_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:5161: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:5162:2: (iv_ruleXPostfixOperation= ruleXPostfixOperation EOF )
            // InternalXcore.g:5163:2: iv_ruleXPostfixOperation= ruleXPostfixOperation EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXPostfixOperationRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXPostfixOperation=ruleXPostfixOperation();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXPostfixOperation; 
            }
            match(input,EOF,FollowSets000.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:5170: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:5173:28: ( (this_XMemberFeatureCall_0= ruleXMemberFeatureCall ( ( ( () ( ( ruleOpPostfix ) ) ) )=> ( () ( ( ruleOpPostfix ) ) ) )? ) )
            // InternalXcore.g:5174:1: (this_XMemberFeatureCall_0= ruleXMemberFeatureCall ( ( ( () ( ( ruleOpPostfix ) ) ) )=> ( () ( ( ruleOpPostfix ) ) ) )? )
            {
            // InternalXcore.g:5174:1: (this_XMemberFeatureCall_0= ruleXMemberFeatureCall ( ( ( () ( ( ruleOpPostfix ) ) ) )=> ( () ( ( ruleOpPostfix ) ) ) )? )
            // InternalXcore.g:5175:5: this_XMemberFeatureCall_0= ruleXMemberFeatureCall ( ( ( () ( ( ruleOpPostfix ) ) ) )=> ( () ( ( ruleOpPostfix ) ) ) )?
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getXPostfixOperationAccess().getXMemberFeatureCallParserRuleCall_0()); 
                  
            }
            pushFollow(FollowSets000.FOLLOW_91);
            this_XMemberFeatureCall_0=ruleXMemberFeatureCall();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XMemberFeatureCall_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // InternalXcore.g:5183:1: ( ( ( () ( ( 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:5183:2: ( ( () ( ( ruleOpPostfix ) ) ) )=> ( () ( ( ruleOpPostfix ) ) )
                    {
                    // InternalXcore.g:5188:6: ( () ( ( ruleOpPostfix ) ) )
                    // InternalXcore.g:5188:7: () ( ( ruleOpPostfix ) )
                    {
                    // InternalXcore.g:5188:7: ()
                    // InternalXcore.g:5189:5: 
                    {
                    if ( state.backtracking==0 ) {

                              current = forceCreateModelElementAndSet(
                                  grammarAccess.getXPostfixOperationAccess().getXPostfixOperationOperandAction_1_0_0(),
                                  current);
                          
                    }

                    }

                    // InternalXcore.g:5194:2: ( ( ruleOpPostfix ) )
                    // InternalXcore.g:5195:1: ( ruleOpPostfix )
                    {
                    // InternalXcore.g:5195:1: ( ruleOpPostfix )
                    // InternalXcore.g:5196:3: 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(FollowSets000.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:5217: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:5218:2: (iv_ruleOpPostfix= ruleOpPostfix EOF )
            // InternalXcore.g:5219:2: iv_ruleOpPostfix= ruleOpPostfix EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getOpPostfixRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleOpPostfix=ruleOpPostfix();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleOpPostfix.getText(); 
            }
            match(input,EOF,FollowSets000.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:5226: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:5229:28: ( (kw= '++' | kw= '--' ) )
            // InternalXcore.g:5230:1: (kw= '++' | kw= '--' )
            {
            // InternalXcore.g:5230:1: (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:5231:2: kw= '++'
                    {
                    kw=(Token)match(input,92,FollowSets000.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:5238:2: kw= '--'
                    {
                    kw=(Token)match(input,93,FollowSets000.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:5251: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:5252:2: (iv_ruleXMemberFeatureCall= ruleXMemberFeatureCall EOF )
            // InternalXcore.g:5253:2: iv_ruleXMemberFeatureCall= ruleXMemberFeatureCall EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXMemberFeatureCallRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXMemberFeatureCall=ruleXMemberFeatureCall();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXMemberFeatureCall; 
            }
            match(input,EOF,FollowSets000.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:5260: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:5263:28: ( (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:5264:1: (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:5264:1: (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:5265:5: 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(FollowSets000.FOLLOW_92);
            this_XPrimaryExpression_0=ruleXPrimaryExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               
                      current = this_XPrimaryExpression_0; 
                      afterParserOrEnumRuleCall();
                  
            }
            // InternalXcore.g:5273:1: ( ( ( ( ( () ( '.' | ( ( '::' ) ) ) ( ( 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:5273:2: ( ( ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )=> ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) ) ( (lv_value_6_0= ruleXAssignment ) ) )
            	    {
            	    // InternalXcore.g:5273:2: ( ( ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )=> ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) ) ( (lv_value_6_0= ruleXAssignment ) ) )
            	    // InternalXcore.g:5273:3: ( ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )=> ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) ) ( (lv_value_6_0= ruleXAssignment ) )
            	    {
            	    // InternalXcore.g:5273:3: ( ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )=> ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )
            	    // InternalXcore.g:5273:4: ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )=> ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign )
            	    {
            	    // InternalXcore.g:5286:25: ( () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign )
            	    // InternalXcore.g:5286:26: () (otherlv_2= '.' | ( (lv_explicitStatic_3_0= '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign
            	    {
            	    // InternalXcore.g:5286:26: ()
            	    // InternalXcore.g:5287:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXMemberFeatureCallAccess().getXAssignmentAssignableAction_1_0_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    // InternalXcore.g:5292:2: (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:5292:4: otherlv_2= '.'
            	            {
            	            otherlv_2=(Token)match(input,67,FollowSets000.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:5297:6: ( (lv_explicitStatic_3_0= '::' ) )
            	            {
            	            // InternalXcore.g:5297:6: ( (lv_explicitStatic_3_0= '::' ) )
            	            // InternalXcore.g:5298:1: (lv_explicitStatic_3_0= '::' )
            	            {
            	            // InternalXcore.g:5298:1: (lv_explicitStatic_3_0= '::' )
            	            // InternalXcore.g:5299:3: lv_explicitStatic_3_0= '::'
            	            {
            	            lv_explicitStatic_3_0=(Token)match(input,94,FollowSets000.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", true, "::");
            	              	    
            	            }

            	            }


            	            }


            	            }
            	            break;

            	    }

            	    // InternalXcore.g:5312:3: ( ( ruleFeatureCallID ) )
            	    // InternalXcore.g:5313:1: ( ruleFeatureCallID )
            	    {
            	    // InternalXcore.g:5313:1: ( ruleFeatureCallID )
            	    // InternalXcore.g:5314:3: 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(FollowSets000.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(FollowSets000.FOLLOW_75);
            	    ruleOpSingleAssign();

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

            	    }


            	    }

            	    // InternalXcore.g:5335:3: ( (lv_value_6_0= ruleXAssignment ) )
            	    // InternalXcore.g:5336:1: (lv_value_6_0= ruleXAssignment )
            	    {
            	    // InternalXcore.g:5336:1: (lv_value_6_0= ruleXAssignment )
            	    // InternalXcore.g:5337:3: lv_value_6_0= ruleXAssignment
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getValueXAssignmentParserRuleCall_1_0_1_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:5354:6: ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )=> ( () (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:5354:6: ( ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )=> ( () (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:5354:7: ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )=> ( () (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:5354:7: ( ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )=> ( () (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) ) ) )
            	    // InternalXcore.g:5354:8: ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )=> ( () (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) ) )
            	    {
            	    // InternalXcore.g:5370:7: ( () (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) ) )
            	    // InternalXcore.g:5370:8: () (otherlv_8= '.' | ( (lv_nullSafe_9_0= '?.' ) ) | ( (lv_explicitStatic_10_0= '::' ) ) )
            	    {
            	    // InternalXcore.g:5370:8: ()
            	    // InternalXcore.g:5371:5: 
            	    {
            	    if ( state.backtracking==0 ) {

            	              current = forceCreateModelElementAndSet(
            	                  grammarAccess.getXMemberFeatureCallAccess().getXMemberFeatureCallMemberCallTargetAction_1_1_0_0_0(),
            	                  current);
            	          
            	    }

            	    }

            	    // InternalXcore.g:5376:2: (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:5376:4: otherlv_8= '.'
            	            {
            	            otherlv_8=(Token)match(input,67,FollowSets000.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:5381:6: ( (lv_nullSafe_9_0= '?.' ) )
            	            {
            	            // InternalXcore.g:5381:6: ( (lv_nullSafe_9_0= '?.' ) )
            	            // InternalXcore.g:5382:1: (lv_nullSafe_9_0= '?.' )
            	            {
            	            // InternalXcore.g:5382:1: (lv_nullSafe_9_0= '?.' )
            	            // InternalXcore.g:5383:3: lv_nullSafe_9_0= '?.'
            	            {
            	            lv_nullSafe_9_0=(Token)match(input,95,FollowSets000.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", true, "?.");
            	              	    
            	            }

            	            }


            	            }


            	            }
            	            break;
            	        case 3 :
            	            // InternalXcore.g:5397:6: ( (lv_explicitStatic_10_0= '::' ) )
            	            {
            	            // InternalXcore.g:5397:6: ( (lv_explicitStatic_10_0= '::' ) )
            	            // InternalXcore.g:5398:1: (lv_explicitStatic_10_0= '::' )
            	            {
            	            // InternalXcore.g:5398:1: (lv_explicitStatic_10_0= '::' )
            	            // InternalXcore.g:5399:3: lv_explicitStatic_10_0= '::'
            	            {
            	            lv_explicitStatic_10_0=(Token)match(input,94,FollowSets000.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", true, "::");
            	              	    
            	            }

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }


            	    }

            	    // InternalXcore.g:5412: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:5412:7: otherlv_11= '<' ( (lv_typeArguments_12_0= ruleJvmArgumentTypeReference ) ) (otherlv_13= ',' ( (lv_typeArguments_14_0= ruleJvmArgumentTypeReference ) ) )* otherlv_15= '>'
            	            {
            	            otherlv_11=(Token)match(input,23,FollowSets000.FOLLOW_95); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                  	newLeafNode(otherlv_11, grammarAccess.getXMemberFeatureCallAccess().getLessThanSignKeyword_1_1_1_0());
            	                  
            	            }
            	            // InternalXcore.g:5416:1: ( (lv_typeArguments_12_0= ruleJvmArgumentTypeReference ) )
            	            // InternalXcore.g:5417:1: (lv_typeArguments_12_0= ruleJvmArgumentTypeReference )
            	            {
            	            // InternalXcore.g:5417:1: (lv_typeArguments_12_0= ruleJvmArgumentTypeReference )
            	            // InternalXcore.g:5418:3: lv_typeArguments_12_0= ruleJvmArgumentTypeReference
            	            {
            	            if ( state.backtracking==0 ) {
            	               
            	              	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_1_1_0()); 
            	              	    
            	            }
            	            pushFollow(FollowSets000.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:5434:2: (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:5434:4: otherlv_13= ',' ( (lv_typeArguments_14_0= ruleJvmArgumentTypeReference ) )
            	            	    {
            	            	    otherlv_13=(Token)match(input,16,FollowSets000.FOLLOW_95); if (state.failed) return current;
            	            	    if ( state.backtracking==0 ) {

            	            	          	newLeafNode(otherlv_13, grammarAccess.getXMemberFeatureCallAccess().getCommaKeyword_1_1_1_2_0());
            	            	          
            	            	    }
            	            	    // InternalXcore.g:5438:1: ( (lv_typeArguments_14_0= ruleJvmArgumentTypeReference ) )
            	            	    // InternalXcore.g:5439:1: (lv_typeArguments_14_0= ruleJvmArgumentTypeReference )
            	            	    {
            	            	    // InternalXcore.g:5439:1: (lv_typeArguments_14_0= ruleJvmArgumentTypeReference )
            	            	    // InternalXcore.g:5440:3: lv_typeArguments_14_0= ruleJvmArgumentTypeReference
            	            	    {
            	            	    if ( state.backtracking==0 ) {
            	            	       
            	            	      	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_1_2_1_0()); 
            	            	      	    
            	            	    }
            	            	    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_94); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                  	newLeafNode(otherlv_15, grammarAccess.getXMemberFeatureCallAccess().getGreaterThanSignKeyword_1_1_1_3());
            	                  
            	            }

            	            }
            	            break;

            	    }

            	    // InternalXcore.g:5460:3: ( ( ruleIdOrSuper ) )
            	    // InternalXcore.g:5461:1: ( ruleIdOrSuper )
            	    {
            	    // InternalXcore.g:5461:1: ( ruleIdOrSuper )
            	    // InternalXcore.g:5462:3: 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(FollowSets000.FOLLOW_96);
            	    ruleIdOrSuper();

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

            	    }


            	    }

            	    // InternalXcore.g:5475:2: ( ( ( ( '(' ) )=> (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:5475:3: ( ( ( '(' ) )=> (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:5475:3: ( ( ( '(' ) )=> (lv_explicitOperationCall_17_0= '(' ) )
            	            // InternalXcore.g:5475:4: ( ( '(' ) )=> (lv_explicitOperationCall_17_0= '(' )
            	            {
            	            // InternalXcore.g:5482:1: (lv_explicitOperationCall_17_0= '(' )
            	            // InternalXcore.g:5483:3: lv_explicitOperationCall_17_0= '('
            	            {
            	            lv_explicitOperationCall_17_0=(Token)match(input,15,FollowSets000.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", true, "(");
            	              	    
            	            }

            	            }


            	            }

            	            // InternalXcore.g:5496:2: ( ( ( ( () ( ( ( 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:5496:3: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) )
            	                    {
            	                    // InternalXcore.g:5496:3: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure ) )
            	                    // InternalXcore.g:5496:4: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_memberCallArguments_18_0= ruleXShortClosure )
            	                    {
            	                    // InternalXcore.g:5513:1: (lv_memberCallArguments_18_0= ruleXShortClosure )
            	                    // InternalXcore.g:5514:3: lv_memberCallArguments_18_0= ruleXShortClosure
            	                    {
            	                    if ( state.backtracking==0 ) {
            	                       
            	                      	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXShortClosureParserRuleCall_1_1_3_1_0_0()); 
            	                      	    
            	                    }
            	                    pushFollow(FollowSets000.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:5531:6: ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* )
            	                    {
            	                    // InternalXcore.g:5531:6: ( ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )* )
            	                    // InternalXcore.g:5531:7: ( (lv_memberCallArguments_19_0= ruleXExpression ) ) (otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) ) )*
            	                    {
            	                    // InternalXcore.g:5531:7: ( (lv_memberCallArguments_19_0= ruleXExpression ) )
            	                    // InternalXcore.g:5532:1: (lv_memberCallArguments_19_0= ruleXExpression )
            	                    {
            	                    // InternalXcore.g:5532:1: (lv_memberCallArguments_19_0= ruleXExpression )
            	                    // InternalXcore.g:5533:3: lv_memberCallArguments_19_0= ruleXExpression
            	                    {
            	                    if ( state.backtracking==0 ) {
            	                       
            	                      	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXExpressionParserRuleCall_1_1_3_1_1_0_0()); 
            	                      	    
            	                    }
            	                    pushFollow(FollowSets000.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:5549:2: (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:5549:4: otherlv_20= ',' ( (lv_memberCallArguments_21_0= ruleXExpression ) )
            	                    	    {
            	                    	    otherlv_20=(Token)match(input,16,FollowSets000.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:5553:1: ( (lv_memberCallArguments_21_0= ruleXExpression ) )
            	                    	    // InternalXcore.g:5554:1: (lv_memberCallArguments_21_0= ruleXExpression )
            	                    	    {
            	                    	    // InternalXcore.g:5554:1: (lv_memberCallArguments_21_0= ruleXExpression )
            	                    	    // InternalXcore.g:5555:3: lv_memberCallArguments_21_0= ruleXExpression
            	                    	    {
            	                    	    if ( state.backtracking==0 ) {
            	                    	       
            	                    	      	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXExpressionParserRuleCall_1_1_3_1_1_1_1_0()); 
            	                    	      	    
            	                    	    }
            	                    	    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_99); if (state.failed) return current;
            	            if ( state.backtracking==0 ) {

            	                  	newLeafNode(otherlv_22, grammarAccess.getXMemberFeatureCallAccess().getRightParenthesisKeyword_1_1_3_2());
            	                  
            	            }

            	            }
            	            break;

            	    }

            	    // InternalXcore.g:5575:3: ( ( ( () '[' ) )=> (lv_memberCallArguments_23_0= ruleXClosure ) )?
            	    int alt111=2;
            	    alt111 = dfa111.predict(input);
            	    switch (alt111) {
            	        case 1 :
            	            // InternalXcore.g:5575:4: ( ( () '[' ) )=> (lv_memberCallArguments_23_0= ruleXClosure )
            	            {
            	            // InternalXcore.g:5578:1: (lv_memberCallArguments_23_0= ruleXClosure )
            	            // InternalXcore.g:5579:3: lv_memberCallArguments_23_0= ruleXClosure
            	            {
            	            if ( state.backtracking==0 ) {
            	               
            	              	        newCompositeNode(grammarAccess.getXMemberFeatureCallAccess().getMemberCallArgumentsXClosureParserRuleCall_1_1_4_0()); 
            	              	    
            	            }
            	            pushFollow(FollowSets000.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:5603: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:5604:2: (iv_ruleXPrimaryExpression= ruleXPrimaryExpression EOF )
            // InternalXcore.g:5605:2: iv_ruleXPrimaryExpression= ruleXPrimaryExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXPrimaryExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXPrimaryExpression=ruleXPrimaryExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXPrimaryExpression; 
            }
            match(input,EOF,FollowSets000.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:5612: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:5615:28: ( (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:5616:1: (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:5616:1: (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:5617:5: this_XConstructorCall_0= ruleXConstructorCall
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXConstructorCallParserRuleCall_0()); 
                          
                    }
                    pushFollow(FollowSets000.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:5627:5: this_XBlockExpression_1= ruleXBlockExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXBlockExpressionParserRuleCall_1()); 
                          
                    }
                    pushFollow(FollowSets000.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:5637:5: this_XSwitchExpression_2= ruleXSwitchExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXSwitchExpressionParserRuleCall_2()); 
                          
                    }
                    pushFollow(FollowSets000.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:5646:6: ( ( ( () 'synchronized' '(' ) )=>this_XSynchronizedExpression_3= ruleXSynchronizedExpression )
                    {
                    // InternalXcore.g:5646:6: ( ( ( () 'synchronized' '(' ) )=>this_XSynchronizedExpression_3= ruleXSynchronizedExpression )
                    // InternalXcore.g:5646:7: ( ( () 'synchronized' '(' ) )=>this_XSynchronizedExpression_3= ruleXSynchronizedExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXSynchronizedExpressionParserRuleCall_3()); 
                          
                    }
                    pushFollow(FollowSets000.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:5660:5: this_XFeatureCall_4= ruleXFeatureCall
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXFeatureCallParserRuleCall_4()); 
                          
                    }
                    pushFollow(FollowSets000.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:5670:5: this_XLiteral_5= ruleXLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXLiteralParserRuleCall_5()); 
                          
                    }
                    pushFollow(FollowSets000.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:5680:5: this_XIfExpression_6= ruleXIfExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXIfExpressionParserRuleCall_6()); 
                          
                    }
                    pushFollow(FollowSets000.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:5689:6: ( ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=>this_XForLoopExpression_7= ruleXForLoopExpression )
                    {
                    // InternalXcore.g:5689:6: ( ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=>this_XForLoopExpression_7= ruleXForLoopExpression )
                    // InternalXcore.g:5689:7: ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=>this_XForLoopExpression_7= ruleXForLoopExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXForLoopExpressionParserRuleCall_7()); 
                          
                    }
                    pushFollow(FollowSets000.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:5708:5: this_XBasicForLoopExpression_8= ruleXBasicForLoopExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXBasicForLoopExpressionParserRuleCall_8()); 
                          
                    }
                    pushFollow(FollowSets000.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:5718:5: this_XWhileExpression_9= ruleXWhileExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXWhileExpressionParserRuleCall_9()); 
                          
                    }
                    pushFollow(FollowSets000.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:5728:5: this_XDoWhileExpression_10= ruleXDoWhileExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXDoWhileExpressionParserRuleCall_10()); 
                          
                    }
                    pushFollow(FollowSets000.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:5738:5: this_XThrowExpression_11= ruleXThrowExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXThrowExpressionParserRuleCall_11()); 
                          
                    }
                    pushFollow(FollowSets000.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:5748:5: this_XReturnExpression_12= ruleXReturnExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXReturnExpressionParserRuleCall_12()); 
                          
                    }
                    pushFollow(FollowSets000.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:5758:5: this_XTryCatchFinallyExpression_13= ruleXTryCatchFinallyExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXTryCatchFinallyExpressionParserRuleCall_13()); 
                          
                    }
                    pushFollow(FollowSets000.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:5768:5: this_XParenthesizedExpression_14= ruleXParenthesizedExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXPrimaryExpressionAccess().getXParenthesizedExpressionParserRuleCall_14()); 
                          
                    }
                    pushFollow(FollowSets000.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:5784: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:5785:2: (iv_ruleXLiteral= ruleXLiteral EOF )
            // InternalXcore.g:5786:2: iv_ruleXLiteral= ruleXLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXLiteralRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXLiteral=ruleXLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXLiteral; 
            }
            match(input,EOF,FollowSets000.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:5793: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:5796:28: ( (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:5797:1: (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:5797:1: (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:5798:5: this_XCollectionLiteral_0= ruleXCollectionLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXLiteralAccess().getXCollectionLiteralParserRuleCall_0()); 
                          
                    }
                    pushFollow(FollowSets000.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:5807:6: ( ( ( () '[' ) )=>this_XClosure_1= ruleXClosure )
                    {
                    // InternalXcore.g:5807:6: ( ( ( () '[' ) )=>this_XClosure_1= ruleXClosure )
                    // InternalXcore.g:5807:7: ( ( () '[' ) )=>this_XClosure_1= ruleXClosure
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXLiteralAccess().getXClosureParserRuleCall_1()); 
                          
                    }
                    pushFollow(FollowSets000.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:5820:5: this_XBooleanLiteral_2= ruleXBooleanLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXLiteralAccess().getXBooleanLiteralParserRuleCall_2()); 
                          
                    }
                    pushFollow(FollowSets000.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:5830:5: this_XNumberLiteral_3= ruleXNumberLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXLiteralAccess().getXNumberLiteralParserRuleCall_3()); 
                          
                    }
                    pushFollow(FollowSets000.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:5840:5: this_XNullLiteral_4= ruleXNullLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXLiteralAccess().getXNullLiteralParserRuleCall_4()); 
                          
                    }
                    pushFollow(FollowSets000.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:5850:5: this_XStringLiteral_5= ruleXStringLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXLiteralAccess().getXStringLiteralParserRuleCall_5()); 
                          
                    }
                    pushFollow(FollowSets000.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:5860:5: this_XTypeLiteral_6= ruleXTypeLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXLiteralAccess().getXTypeLiteralParserRuleCall_6()); 
                          
                    }
                    pushFollow(FollowSets000.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:5876: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:5877:2: (iv_ruleXCollectionLiteral= ruleXCollectionLiteral EOF )
            // InternalXcore.g:5878:2: iv_ruleXCollectionLiteral= ruleXCollectionLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXCollectionLiteralRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXCollectionLiteral=ruleXCollectionLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXCollectionLiteral; 
            }
            match(input,EOF,FollowSets000.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:5885: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:5888:28: ( (this_XSetLiteral_0= ruleXSetLiteral | this_XListLiteral_1= ruleXListLiteral ) )
            // InternalXcore.g:5889:1: (this_XSetLiteral_0= ruleXSetLiteral | this_XListLiteral_1= ruleXListLiteral )
            {
            // InternalXcore.g:5889:1: (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:5890:5: this_XSetLiteral_0= ruleXSetLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXCollectionLiteralAccess().getXSetLiteralParserRuleCall_0()); 
                          
                    }
                    pushFollow(FollowSets000.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:5900:5: this_XListLiteral_1= ruleXListLiteral
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXCollectionLiteralAccess().getXListLiteralParserRuleCall_1()); 
                          
                    }
                    pushFollow(FollowSets000.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:5916: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:5917:2: (iv_ruleXSetLiteral= ruleXSetLiteral EOF )
            // InternalXcore.g:5918:2: iv_ruleXSetLiteral= ruleXSetLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXSetLiteralRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXSetLiteral=ruleXSetLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXSetLiteral; 
            }
            match(input,EOF,FollowSets000.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:5925: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:5928:28: ( ( () otherlv_1= '#' otherlv_2= '{' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= '}' ) )
            // InternalXcore.g:5929:1: ( () otherlv_1= '#' otherlv_2= '{' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= '}' )
            {
            // InternalXcore.g:5929:1: ( () otherlv_1= '#' otherlv_2= '{' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= '}' )
            // InternalXcore.g:5929:2: () otherlv_1= '#' otherlv_2= '{' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= '}'
            {
            // InternalXcore.g:5929:2: ()
            // InternalXcore.g:5930:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXSetLiteralAccess().getXSetLiteralAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,96,FollowSets000.FOLLOW_22); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXSetLiteralAccess().getNumberSignKeyword_1());
                  
            }
            otherlv_2=(Token)match(input,29,FollowSets000.FOLLOW_69); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getXSetLiteralAccess().getLeftCurlyBracketKeyword_2());
                  
            }
            // InternalXcore.g:5943:1: ( ( (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:5943:2: ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )*
                    {
                    // InternalXcore.g:5943:2: ( (lv_elements_3_0= ruleXExpression ) )
                    // InternalXcore.g:5944:1: (lv_elements_3_0= ruleXExpression )
                    {
                    // InternalXcore.g:5944:1: (lv_elements_3_0= ruleXExpression )
                    // InternalXcore.g:5945:3: lv_elements_3_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXSetLiteralAccess().getElementsXExpressionParserRuleCall_3_0_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:5961:2: (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:5961:4: otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) )
                    	    {
                    	    otherlv_4=(Token)match(input,16,FollowSets000.FOLLOW_75); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_4, grammarAccess.getXSetLiteralAccess().getCommaKeyword_3_1_0());
                    	          
                    	    }
                    	    // InternalXcore.g:5965:1: ( (lv_elements_5_0= ruleXExpression ) )
                    	    // InternalXcore.g:5966:1: (lv_elements_5_0= ruleXExpression )
                    	    {
                    	    // InternalXcore.g:5966:1: (lv_elements_5_0= ruleXExpression )
                    	    // InternalXcore.g:5967:3: lv_elements_5_0= ruleXExpression
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXSetLiteralAccess().getElementsXExpressionParserRuleCall_3_1_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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,FollowSets000.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:5995: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:5996:2: (iv_ruleXListLiteral= ruleXListLiteral EOF )
            // InternalXcore.g:5997:2: iv_ruleXListLiteral= ruleXListLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXListLiteralRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXListLiteral=ruleXListLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXListLiteral; 
            }
            match(input,EOF,FollowSets000.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:6004: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:6007:28: ( ( () otherlv_1= '#' otherlv_2= '[' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= ']' ) )
            // InternalXcore.g:6008:1: ( () otherlv_1= '#' otherlv_2= '[' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= ']' )
            {
            // InternalXcore.g:6008:1: ( () otherlv_1= '#' otherlv_2= '[' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= ']' )
            // InternalXcore.g:6008:2: () otherlv_1= '#' otherlv_2= '[' ( ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )* )? otherlv_6= ']'
            {
            // InternalXcore.g:6008:2: ()
            // InternalXcore.g:6009:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXListLiteralAccess().getXListLiteralAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,96,FollowSets000.FOLLOW_101); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXListLiteralAccess().getNumberSignKeyword_1());
                  
            }
            otherlv_2=(Token)match(input,59,FollowSets000.FOLLOW_102); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getXListLiteralAccess().getLeftSquareBracketKeyword_2());
                  
            }
            // InternalXcore.g:6022:1: ( ( (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:6022:2: ( (lv_elements_3_0= ruleXExpression ) ) (otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) ) )*
                    {
                    // InternalXcore.g:6022:2: ( (lv_elements_3_0= ruleXExpression ) )
                    // InternalXcore.g:6023:1: (lv_elements_3_0= ruleXExpression )
                    {
                    // InternalXcore.g:6023:1: (lv_elements_3_0= ruleXExpression )
                    // InternalXcore.g:6024:3: lv_elements_3_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXListLiteralAccess().getElementsXExpressionParserRuleCall_3_0_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:6040:2: (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:6040:4: otherlv_4= ',' ( (lv_elements_5_0= ruleXExpression ) )
                    	    {
                    	    otherlv_4=(Token)match(input,16,FollowSets000.FOLLOW_75); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_4, grammarAccess.getXListLiteralAccess().getCommaKeyword_3_1_0());
                    	          
                    	    }
                    	    // InternalXcore.g:6044:1: ( (lv_elements_5_0= ruleXExpression ) )
                    	    // InternalXcore.g:6045:1: (lv_elements_5_0= ruleXExpression )
                    	    {
                    	    // InternalXcore.g:6045:1: (lv_elements_5_0= ruleXExpression )
                    	    // InternalXcore.g:6046:3: lv_elements_5_0= ruleXExpression
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXListLiteralAccess().getElementsXExpressionParserRuleCall_3_1_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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,FollowSets000.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:6074: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:6075:2: (iv_ruleXClosure= ruleXClosure EOF )
            // InternalXcore.g:6076:2: iv_ruleXClosure= ruleXClosure EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXClosureRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXClosure=ruleXClosure();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXClosure; 
            }
            match(input,EOF,FollowSets000.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:6083: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:6086:28: ( ( ( ( ( () '[' ) )=> ( () 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:6087:1: ( ( ( ( () '[' ) )=> ( () 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:6087:1: ( ( ( ( () '[' ) )=> ( () 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:6087: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:6087:2: ( ( ( () '[' ) )=> ( () otherlv_1= '[' ) )
            // InternalXcore.g:6087:3: ( ( () '[' ) )=> ( () otherlv_1= '[' )
            {
            // InternalXcore.g:6089:5: ( () otherlv_1= '[' )
            // InternalXcore.g:6089:6: () otherlv_1= '['
            {
            // InternalXcore.g:6089:6: ()
            // InternalXcore.g:6090:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXClosureAccess().getXClosureAction_0_0_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,59,FollowSets000.FOLLOW_104); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXClosureAccess().getLeftSquareBracketKeyword_0_0_1());
                  
            }

            }


            }

            // InternalXcore.g:6099: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:6099:4: ( ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) )
                    {
                    // InternalXcore.g:6114:6: ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) )
                    // InternalXcore.g:6114:7: ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) )
                    {
                    // InternalXcore.g:6114:7: ( ( (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:6114:8: ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )*
                            {
                            // InternalXcore.g:6114:8: ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) )
                            // InternalXcore.g:6115:1: (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter )
                            {
                            // InternalXcore.g:6115:1: (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter )
                            // InternalXcore.g:6116:3: lv_declaredFormalParameters_2_0= ruleJvmFormalParameter
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getXClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_1_0_0_0_0()); 
                              	    
                            }
                            pushFollow(FollowSets000.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:6132:2: (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:6132:4: otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) )
                            	    {
                            	    otherlv_3=(Token)match(input,16,FollowSets000.FOLLOW_20); if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	          	newLeafNode(otherlv_3, grammarAccess.getXClosureAccess().getCommaKeyword_1_0_0_1_0());
                            	          
                            	    }
                            	    // InternalXcore.g:6136:1: ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) )
                            	    // InternalXcore.g:6137:1: (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter )
                            	    {
                            	    // InternalXcore.g:6137:1: (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter )
                            	    // InternalXcore.g:6138:3: lv_declaredFormalParameters_4_0= ruleJvmFormalParameter
                            	    {
                            	    if ( state.backtracking==0 ) {
                            	       
                            	      	        newCompositeNode(grammarAccess.getXClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_1_0_0_1_1_0()); 
                            	      	    
                            	    }
                            	    pushFollow(FollowSets000.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:6154:6: ( (lv_explicitSyntax_5_0= '|' ) )
                    // InternalXcore.g:6155:1: (lv_explicitSyntax_5_0= '|' )
                    {
                    // InternalXcore.g:6155:1: (lv_explicitSyntax_5_0= '|' )
                    // InternalXcore.g:6156:3: lv_explicitSyntax_5_0= '|'
                    {
                    lv_explicitSyntax_5_0=(Token)match(input,97,FollowSets000.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", true, "|");
                      	    
                    }

                    }


                    }


                    }


                    }
                    break;

            }

            // InternalXcore.g:6169:5: ( (lv_expression_6_0= ruleXExpressionInClosure ) )
            // InternalXcore.g:6170:1: (lv_expression_6_0= ruleXExpressionInClosure )
            {
            // InternalXcore.g:6170:1: (lv_expression_6_0= ruleXExpressionInClosure )
            // InternalXcore.g:6171:3: lv_expression_6_0= ruleXExpressionInClosure
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXClosureAccess().getExpressionXExpressionInClosureParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FollowSets000.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,FollowSets000.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:6199: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:6200:2: (iv_ruleXExpressionInClosure= ruleXExpressionInClosure EOF )
            // InternalXcore.g:6201:2: iv_ruleXExpressionInClosure= ruleXExpressionInClosure EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXExpressionInClosureRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXExpressionInClosure=ruleXExpressionInClosure();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXExpressionInClosure; 
            }
            match(input,EOF,FollowSets000.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:6208: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:6211:28: ( ( () ( ( (lv_expressions_1_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_2= ';' )? )* ) )
            // InternalXcore.g:6212:1: ( () ( ( (lv_expressions_1_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_2= ';' )? )* )
            {
            // InternalXcore.g:6212:1: ( () ( ( (lv_expressions_1_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_2= ';' )? )* )
            // InternalXcore.g:6212:2: () ( ( (lv_expressions_1_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_2= ';' )? )*
            {
            // InternalXcore.g:6212:2: ()
            // InternalXcore.g:6213:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXExpressionInClosureAccess().getXBlockExpressionAction_0(),
                          current);
                  
            }

            }

            // InternalXcore.g:6218:2: ( ( (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:6218:3: ( (lv_expressions_1_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_2= ';' )?
            	    {
            	    // InternalXcore.g:6218:3: ( (lv_expressions_1_0= ruleXExpressionOrVarDeclaration ) )
            	    // InternalXcore.g:6219:1: (lv_expressions_1_0= ruleXExpressionOrVarDeclaration )
            	    {
            	    // InternalXcore.g:6219:1: (lv_expressions_1_0= ruleXExpressionOrVarDeclaration )
            	    // InternalXcore.g:6220:3: lv_expressions_1_0= ruleXExpressionOrVarDeclaration
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXExpressionInClosureAccess().getExpressionsXExpressionOrVarDeclarationParserRuleCall_1_0_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:6236:2: (otherlv_2= ';' )?
            	    int alt123=2;
            	    int LA123_0 = input.LA(1);

            	    if ( (LA123_0==65) ) {
            	        alt123=1;
            	    }
            	    switch (alt123) {
            	        case 1 :
            	            // InternalXcore.g:6236:4: otherlv_2= ';'
            	            {
            	            otherlv_2=(Token)match(input,65,FollowSets000.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:6248: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:6249:2: (iv_ruleXShortClosure= ruleXShortClosure EOF )
            // InternalXcore.g:6250:2: iv_ruleXShortClosure= ruleXShortClosure EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXShortClosureRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXShortClosure=ruleXShortClosure();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXShortClosure; 
            }
            match(input,EOF,FollowSets000.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:6257: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:6260:28: ( ( ( ( ( () ( ( ( 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:6261:1: ( ( ( ( () ( ( ( 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:6261:1: ( ( ( ( () ( ( ( 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:6261: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:6261:2: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( () ( ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_4_0= '|' ) ) ) )
            // InternalXcore.g:6261:3: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( () ( ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_4_0= '|' ) ) )
            {
            // InternalXcore.g:6277:6: ( () ( ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_4_0= '|' ) ) )
            // InternalXcore.g:6277:7: () ( ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_4_0= '|' ) )
            {
            // InternalXcore.g:6277:7: ()
            // InternalXcore.g:6278:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXShortClosureAccess().getXClosureAction_0_0_0(),
                          current);
                  
            }

            }

            // InternalXcore.g:6283:2: ( ( (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:6283:3: ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) ) (otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) ) )*
                    {
                    // InternalXcore.g:6283:3: ( (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter ) )
                    // InternalXcore.g:6284:1: (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter )
                    {
                    // InternalXcore.g:6284:1: (lv_declaredFormalParameters_1_0= ruleJvmFormalParameter )
                    // InternalXcore.g:6285:3: lv_declaredFormalParameters_1_0= ruleJvmFormalParameter
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXShortClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_0_0_1_0_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:6301:2: (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:6301:4: otherlv_2= ',' ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) )
                    	    {
                    	    otherlv_2=(Token)match(input,16,FollowSets000.FOLLOW_20); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_2, grammarAccess.getXShortClosureAccess().getCommaKeyword_0_0_1_1_0());
                    	          
                    	    }
                    	    // InternalXcore.g:6305:1: ( (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter ) )
                    	    // InternalXcore.g:6306:1: (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter )
                    	    {
                    	    // InternalXcore.g:6306:1: (lv_declaredFormalParameters_3_0= ruleJvmFormalParameter )
                    	    // InternalXcore.g:6307:3: lv_declaredFormalParameters_3_0= ruleJvmFormalParameter
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXShortClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_0_0_1_1_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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:6323:6: ( (lv_explicitSyntax_4_0= '|' ) )
            // InternalXcore.g:6324:1: (lv_explicitSyntax_4_0= '|' )
            {
            // InternalXcore.g:6324:1: (lv_explicitSyntax_4_0= '|' )
            // InternalXcore.g:6325:3: lv_explicitSyntax_4_0= '|'
            {
            lv_explicitSyntax_4_0=(Token)match(input,97,FollowSets000.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", true, "|");
              	    
            }

            }


            }


            }


            }

            // InternalXcore.g:6338:4: ( (lv_expression_5_0= ruleXExpression ) )
            // InternalXcore.g:6339:1: (lv_expression_5_0= ruleXExpression )
            {
            // InternalXcore.g:6339:1: (lv_expression_5_0= ruleXExpression )
            // InternalXcore.g:6340:3: lv_expression_5_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXShortClosureAccess().getExpressionXExpressionParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FollowSets000.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:6364: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:6365:2: (iv_ruleXParenthesizedExpression= ruleXParenthesizedExpression EOF )
            // InternalXcore.g:6366:2: iv_ruleXParenthesizedExpression= ruleXParenthesizedExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXParenthesizedExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXParenthesizedExpression=ruleXParenthesizedExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXParenthesizedExpression; 
            }
            match(input,EOF,FollowSets000.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:6373: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:6376:28: ( (otherlv_0= '(' this_XExpression_1= ruleXExpression otherlv_2= ')' ) )
            // InternalXcore.g:6377:1: (otherlv_0= '(' this_XExpression_1= ruleXExpression otherlv_2= ')' )
            {
            // InternalXcore.g:6377:1: (otherlv_0= '(' this_XExpression_1= ruleXExpression otherlv_2= ')' )
            // InternalXcore.g:6377:3: otherlv_0= '(' this_XExpression_1= ruleXExpression otherlv_2= ')'
            {
            otherlv_0=(Token)match(input,15,FollowSets000.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(FollowSets000.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,FollowSets000.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:6402: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:6403:2: (iv_ruleXIfExpression= ruleXIfExpression EOF )
            // InternalXcore.g:6404:2: iv_ruleXIfExpression= ruleXIfExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXIfExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXIfExpression=ruleXIfExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXIfExpression; 
            }
            match(input,EOF,FollowSets000.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:6411: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:6414:28: ( ( () 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:6415:1: ( () 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:6415:1: ( () 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:6415: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:6415:2: ()
            // InternalXcore.g:6416:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXIfExpressionAccess().getXIfExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,98,FollowSets000.FOLLOW_56); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXIfExpressionAccess().getIfKeyword_1());
                  
            }
            otherlv_2=(Token)match(input,15,FollowSets000.FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getXIfExpressionAccess().getLeftParenthesisKeyword_2());
                  
            }
            // InternalXcore.g:6429:1: ( (lv_if_3_0= ruleXExpression ) )
            // InternalXcore.g:6430:1: (lv_if_3_0= ruleXExpression )
            {
            // InternalXcore.g:6430:1: (lv_if_3_0= ruleXExpression )
            // InternalXcore.g:6431:3: lv_if_3_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXIfExpressionAccess().getIfXExpressionParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FollowSets000.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,FollowSets000.FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getXIfExpressionAccess().getRightParenthesisKeyword_4());
                  
            }
            // InternalXcore.g:6451:1: ( (lv_then_5_0= ruleXExpression ) )
            // InternalXcore.g:6452:1: (lv_then_5_0= ruleXExpression )
            {
            // InternalXcore.g:6452:1: (lv_then_5_0= ruleXExpression )
            // InternalXcore.g:6453:3: lv_then_5_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXIfExpressionAccess().getThenXExpressionParserRuleCall_5_0()); 
              	    
            }
            pushFollow(FollowSets000.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:6469:2: ( ( ( '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:6469:3: ( ( 'else' )=>otherlv_6= 'else' ) ( (lv_else_7_0= ruleXExpression ) )
                    {
                    // InternalXcore.g:6469:3: ( ( 'else' )=>otherlv_6= 'else' )
                    // InternalXcore.g:6469:4: ( 'else' )=>otherlv_6= 'else'
                    {
                    otherlv_6=(Token)match(input,99,FollowSets000.FOLLOW_75); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_6, grammarAccess.getXIfExpressionAccess().getElseKeyword_6_0());
                          
                    }

                    }

                    // InternalXcore.g:6474:2: ( (lv_else_7_0= ruleXExpression ) )
                    // InternalXcore.g:6475:1: (lv_else_7_0= ruleXExpression )
                    {
                    // InternalXcore.g:6475:1: (lv_else_7_0= ruleXExpression )
                    // InternalXcore.g:6476:3: lv_else_7_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXIfExpressionAccess().getElseXExpressionParserRuleCall_6_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:6500: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:6501:2: (iv_ruleXSwitchExpression= ruleXSwitchExpression EOF )
            // InternalXcore.g:6502:2: iv_ruleXSwitchExpression= ruleXSwitchExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXSwitchExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXSwitchExpression=ruleXSwitchExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXSwitchExpression; 
            }
            match(input,EOF,FollowSets000.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:6509: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:6512:28: ( ( () 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:6513:1: ( () 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:6513:1: ( () 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:6513: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:6513:2: ()
            // InternalXcore.g:6514:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXSwitchExpressionAccess().getXSwitchExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,100,FollowSets000.FOLLOW_109); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXSwitchExpressionAccess().getSwitchKeyword_1());
                  
            }
            // InternalXcore.g:6523:1: ( ( ( ( ( '(' ( ( 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:6523:2: ( ( ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_switch_5_0= ruleXExpression ) ) otherlv_6= ')' )
                    {
                    // InternalXcore.g:6523:2: ( ( ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_switch_5_0= ruleXExpression ) ) otherlv_6= ')' )
                    // InternalXcore.g:6523:3: ( ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) ) ( (lv_switch_5_0= ruleXExpression ) ) otherlv_6= ')'
                    {
                    // InternalXcore.g:6523:3: ( ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) )
                    // InternalXcore.g:6523:4: ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' )
                    {
                    // InternalXcore.g:6529:5: (otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' )
                    // InternalXcore.g:6529:7: otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':'
                    {
                    otherlv_2=(Token)match(input,15,FollowSets000.FOLLOW_20); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_2, grammarAccess.getXSwitchExpressionAccess().getLeftParenthesisKeyword_2_0_0_0_0());
                          
                    }
                    // InternalXcore.g:6533:1: ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) )
                    // InternalXcore.g:6534:1: (lv_declaredParam_3_0= ruleJvmFormalParameter )
                    {
                    // InternalXcore.g:6534:1: (lv_declaredParam_3_0= ruleJvmFormalParameter )
                    // InternalXcore.g:6535:3: lv_declaredParam_3_0= ruleJvmFormalParameter
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getDeclaredParamJvmFormalParameterParserRuleCall_2_0_0_0_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_75); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_4, grammarAccess.getXSwitchExpressionAccess().getColonKeyword_2_0_0_0_2());
                          
                    }

                    }


                    }

                    // InternalXcore.g:6555:3: ( (lv_switch_5_0= ruleXExpression ) )
                    // InternalXcore.g:6556:1: (lv_switch_5_0= ruleXExpression )
                    {
                    // InternalXcore.g:6556:1: (lv_switch_5_0= ruleXExpression )
                    // InternalXcore.g:6557:3: lv_switch_5_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getSwitchXExpressionParserRuleCall_2_0_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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,FollowSets000.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:6578:6: ( ( ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' ) )? ( (lv_switch_9_0= ruleXExpression ) ) )
                    {
                    // InternalXcore.g:6578:6: ( ( ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' ) )? ( (lv_switch_9_0= ruleXExpression ) ) )
                    // InternalXcore.g:6578:7: ( ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' ) )? ( (lv_switch_9_0= ruleXExpression ) )
                    {
                    // InternalXcore.g:6578:7: ( ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' ) )?
                    int alt128=2;
                    alt128 = dfa128.predict(input);
                    switch (alt128) {
                        case 1 :
                            // InternalXcore.g:6578:8: ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' )
                            {
                            // InternalXcore.g:6583:5: ( ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':' )
                            // InternalXcore.g:6583:6: ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) ) otherlv_8= ':'
                            {
                            // InternalXcore.g:6583:6: ( (lv_declaredParam_7_0= ruleJvmFormalParameter ) )
                            // InternalXcore.g:6584:1: (lv_declaredParam_7_0= ruleJvmFormalParameter )
                            {
                            // InternalXcore.g:6584:1: (lv_declaredParam_7_0= ruleJvmFormalParameter )
                            // InternalXcore.g:6585:3: lv_declaredParam_7_0= ruleJvmFormalParameter
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getDeclaredParamJvmFormalParameterParserRuleCall_2_1_0_0_0_0()); 
                              	    
                            }
                            pushFollow(FollowSets000.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,FollowSets000.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:6605:4: ( (lv_switch_9_0= ruleXExpression ) )
                    // InternalXcore.g:6606:1: (lv_switch_9_0= ruleXExpression )
                    {
                    // InternalXcore.g:6606:1: (lv_switch_9_0= ruleXExpression )
                    // InternalXcore.g:6607:3: lv_switch_9_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getSwitchXExpressionParserRuleCall_2_1_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_111); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_10, grammarAccess.getXSwitchExpressionAccess().getLeftCurlyBracketKeyword_3());
                  
            }
            // InternalXcore.g:6627:1: ( (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:6628:1: (lv_cases_11_0= ruleXCasePart )
            	    {
            	    // InternalXcore.g:6628:1: (lv_cases_11_0= ruleXCasePart )
            	    // InternalXcore.g:6629:3: lv_cases_11_0= ruleXCasePart
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getCasesXCasePartParserRuleCall_4_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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:6645: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:6645:5: otherlv_12= 'default' otherlv_13= ':' ( (lv_default_14_0= ruleXExpression ) )
                    {
                    otherlv_12=(Token)match(input,102,FollowSets000.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,FollowSets000.FOLLOW_75); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_13, grammarAccess.getXSwitchExpressionAccess().getColonKeyword_5_1());
                          
                    }
                    // InternalXcore.g:6653:1: ( (lv_default_14_0= ruleXExpression ) )
                    // InternalXcore.g:6654:1: (lv_default_14_0= ruleXExpression )
                    {
                    // InternalXcore.g:6654:1: (lv_default_14_0= ruleXExpression )
                    // InternalXcore.g:6655:3: lv_default_14_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXSwitchExpressionAccess().getDefaultXExpressionParserRuleCall_5_2_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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,FollowSets000.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:6683: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:6684:2: (iv_ruleXCasePart= ruleXCasePart EOF )
            // InternalXcore.g:6685:2: iv_ruleXCasePart= ruleXCasePart EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXCasePartRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXCasePart=ruleXCasePart();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXCasePart; 
            }
            match(input,EOF,FollowSets000.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:6692: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:6695:28: ( ( () ( (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:6696:1: ( () ( (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:6696:1: ( () ( (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:6696: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:6696:2: ()
            // InternalXcore.g:6697:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXCasePartAccess().getXCasePartAction_0(),
                          current);
                  
            }

            }

            // InternalXcore.g:6702:2: ( (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:6703:1: (lv_typeGuard_1_0= ruleJvmTypeReference )
                    {
                    // InternalXcore.g:6703:1: (lv_typeGuard_1_0= ruleJvmTypeReference )
                    // InternalXcore.g:6704:3: lv_typeGuard_1_0= ruleJvmTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXCasePartAccess().getTypeGuardJvmTypeReferenceParserRuleCall_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:6720: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:6720:5: otherlv_2= 'case' ( (lv_case_3_0= ruleXExpression ) )
                    {
                    otherlv_2=(Token)match(input,103,FollowSets000.FOLLOW_75); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_2, grammarAccess.getXCasePartAccess().getCaseKeyword_2_0());
                          
                    }
                    // InternalXcore.g:6724:1: ( (lv_case_3_0= ruleXExpression ) )
                    // InternalXcore.g:6725:1: (lv_case_3_0= ruleXExpression )
                    {
                    // InternalXcore.g:6725:1: (lv_case_3_0= ruleXExpression )
                    // InternalXcore.g:6726:3: lv_case_3_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXCasePartAccess().getCaseXExpressionParserRuleCall_2_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:6742:4: ( (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:6742:5: (otherlv_4= ':' ( (lv_then_5_0= ruleXExpression ) ) )
                    {
                    // InternalXcore.g:6742:5: (otherlv_4= ':' ( (lv_then_5_0= ruleXExpression ) ) )
                    // InternalXcore.g:6742:7: otherlv_4= ':' ( (lv_then_5_0= ruleXExpression ) )
                    {
                    otherlv_4=(Token)match(input,101,FollowSets000.FOLLOW_75); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_4, grammarAccess.getXCasePartAccess().getColonKeyword_3_0_0());
                          
                    }
                    // InternalXcore.g:6746:1: ( (lv_then_5_0= ruleXExpression ) )
                    // InternalXcore.g:6747:1: (lv_then_5_0= ruleXExpression )
                    {
                    // InternalXcore.g:6747:1: (lv_then_5_0= ruleXExpression )
                    // InternalXcore.g:6748:3: lv_then_5_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXCasePartAccess().getThenXExpressionParserRuleCall_3_0_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:6765:6: ( (lv_fallThrough_6_0= ',' ) )
                    {
                    // InternalXcore.g:6765:6: ( (lv_fallThrough_6_0= ',' ) )
                    // InternalXcore.g:6766:1: (lv_fallThrough_6_0= ',' )
                    {
                    // InternalXcore.g:6766:1: (lv_fallThrough_6_0= ',' )
                    // InternalXcore.g:6767:3: lv_fallThrough_6_0= ','
                    {
                    lv_fallThrough_6_0=(Token)match(input,16,FollowSets000.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", true, ",");
                      	    
                    }

                    }


                    }


                    }
                    break;

            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleXCasePart"


    // $ANTLR start "entryRuleXForLoopExpression"
    // InternalXcore.g:6788: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:6789:2: (iv_ruleXForLoopExpression= ruleXForLoopExpression EOF )
            // InternalXcore.g:6790:2: iv_ruleXForLoopExpression= ruleXForLoopExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXForLoopExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXForLoopExpression=ruleXForLoopExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXForLoopExpression; 
            }
            match(input,EOF,FollowSets000.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:6797: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:6800:28: ( ( ( ( ( () '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:6801:1: ( ( ( ( () '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:6801:1: ( ( ( ( () '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:6801: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:6801:2: ( ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' ) )
            // InternalXcore.g:6801:3: ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )=> ( () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' )
            {
            // InternalXcore.g:6809:5: ( () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':' )
            // InternalXcore.g:6809:6: () otherlv_1= 'for' otherlv_2= '(' ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) ) otherlv_4= ':'
            {
            // InternalXcore.g:6809:6: ()
            // InternalXcore.g:6810:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXForLoopExpressionAccess().getXForLoopExpressionAction_0_0_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,104,FollowSets000.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,FollowSets000.FOLLOW_20); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getXForLoopExpressionAccess().getLeftParenthesisKeyword_0_0_2());
                  
            }
            // InternalXcore.g:6823:1: ( (lv_declaredParam_3_0= ruleJvmFormalParameter ) )
            // InternalXcore.g:6824:1: (lv_declaredParam_3_0= ruleJvmFormalParameter )
            {
            // InternalXcore.g:6824:1: (lv_declaredParam_3_0= ruleJvmFormalParameter )
            // InternalXcore.g:6825:3: lv_declaredParam_3_0= ruleJvmFormalParameter
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXForLoopExpressionAccess().getDeclaredParamJvmFormalParameterParserRuleCall_0_0_3_0()); 
              	    
            }
            pushFollow(FollowSets000.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,FollowSets000.FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getXForLoopExpressionAccess().getColonKeyword_0_0_4());
                  
            }

            }


            }

            // InternalXcore.g:6845:3: ( (lv_forExpression_5_0= ruleXExpression ) )
            // InternalXcore.g:6846:1: (lv_forExpression_5_0= ruleXExpression )
            {
            // InternalXcore.g:6846:1: (lv_forExpression_5_0= ruleXExpression )
            // InternalXcore.g:6847:3: lv_forExpression_5_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXForLoopExpressionAccess().getForExpressionXExpressionParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FollowSets000.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,FollowSets000.FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_6, grammarAccess.getXForLoopExpressionAccess().getRightParenthesisKeyword_2());
                  
            }
            // InternalXcore.g:6867:1: ( (lv_eachExpression_7_0= ruleXExpression ) )
            // InternalXcore.g:6868:1: (lv_eachExpression_7_0= ruleXExpression )
            {
            // InternalXcore.g:6868:1: (lv_eachExpression_7_0= ruleXExpression )
            // InternalXcore.g:6869:3: lv_eachExpression_7_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXForLoopExpressionAccess().getEachExpressionXExpressionParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FollowSets000.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:6893: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:6894:2: (iv_ruleXBasicForLoopExpression= ruleXBasicForLoopExpression EOF )
            // InternalXcore.g:6895:2: iv_ruleXBasicForLoopExpression= ruleXBasicForLoopExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXBasicForLoopExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXBasicForLoopExpression=ruleXBasicForLoopExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXBasicForLoopExpression; 
            }
            match(input,EOF,FollowSets000.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:6902: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:6905:28: ( ( () 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:6906:1: ( () 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:6906:1: ( () 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:6906: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:6906:2: ()
            // InternalXcore.g:6907:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXBasicForLoopExpressionAccess().getXBasicForLoopExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,104,FollowSets000.FOLLOW_56); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXBasicForLoopExpressionAccess().getForKeyword_1());
                  
            }
            otherlv_2=(Token)match(input,15,FollowSets000.FOLLOW_115); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getXBasicForLoopExpressionAccess().getLeftParenthesisKeyword_2());
                  
            }
            // InternalXcore.g:6920:1: ( ( (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:6920:2: ( (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) ) )*
                    {
                    // InternalXcore.g:6920:2: ( (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration ) )
                    // InternalXcore.g:6921:1: (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration )
                    {
                    // InternalXcore.g:6921:1: (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration )
                    // InternalXcore.g:6922:3: lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsXExpressionOrVarDeclarationParserRuleCall_3_0_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:6938:2: (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:6938:4: otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) )
                    	    {
                    	    otherlv_4=(Token)match(input,16,FollowSets000.FOLLOW_75); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_4, grammarAccess.getXBasicForLoopExpressionAccess().getCommaKeyword_3_1_0());
                    	          
                    	    }
                    	    // InternalXcore.g:6942:1: ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) )
                    	    // InternalXcore.g:6943:1: (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration )
                    	    {
                    	    // InternalXcore.g:6943:1: (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration )
                    	    // InternalXcore.g:6944:3: lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsXExpressionOrVarDeclarationParserRuleCall_3_1_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_115); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_6, grammarAccess.getXBasicForLoopExpressionAccess().getSemicolonKeyword_4());
                  
            }
            // InternalXcore.g:6964:1: ( (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:6965:1: (lv_expression_7_0= ruleXExpression )
                    {
                    // InternalXcore.g:6965:1: (lv_expression_7_0= ruleXExpression )
                    // InternalXcore.g:6966:3: lv_expression_7_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getExpressionXExpressionParserRuleCall_5_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_118); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_8, grammarAccess.getXBasicForLoopExpressionAccess().getSemicolonKeyword_6());
                  
            }
            // InternalXcore.g:6986:1: ( ( (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:6986:2: ( (lv_updateExpressions_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) ) )*
                    {
                    // InternalXcore.g:6986:2: ( (lv_updateExpressions_9_0= ruleXExpression ) )
                    // InternalXcore.g:6987:1: (lv_updateExpressions_9_0= ruleXExpression )
                    {
                    // InternalXcore.g:6987:1: (lv_updateExpressions_9_0= ruleXExpression )
                    // InternalXcore.g:6988:3: lv_updateExpressions_9_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsXExpressionParserRuleCall_7_0_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:7004:2: (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:7004:4: otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) )
                    	    {
                    	    otherlv_10=(Token)match(input,16,FollowSets000.FOLLOW_75); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_10, grammarAccess.getXBasicForLoopExpressionAccess().getCommaKeyword_7_1_0());
                    	          
                    	    }
                    	    // InternalXcore.g:7008:1: ( (lv_updateExpressions_11_0= ruleXExpression ) )
                    	    // InternalXcore.g:7009:1: (lv_updateExpressions_11_0= ruleXExpression )
                    	    {
                    	    // InternalXcore.g:7009:1: (lv_updateExpressions_11_0= ruleXExpression )
                    	    // InternalXcore.g:7010:3: lv_updateExpressions_11_0= ruleXExpression
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsXExpressionParserRuleCall_7_1_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_12, grammarAccess.getXBasicForLoopExpressionAccess().getRightParenthesisKeyword_8());
                  
            }
            // InternalXcore.g:7030:1: ( (lv_eachExpression_13_0= ruleXExpression ) )
            // InternalXcore.g:7031:1: (lv_eachExpression_13_0= ruleXExpression )
            {
            // InternalXcore.g:7031:1: (lv_eachExpression_13_0= ruleXExpression )
            // InternalXcore.g:7032:3: lv_eachExpression_13_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getEachExpressionXExpressionParserRuleCall_9_0()); 
              	    
            }
            pushFollow(FollowSets000.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:7056: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:7057:2: (iv_ruleXWhileExpression= ruleXWhileExpression EOF )
            // InternalXcore.g:7058:2: iv_ruleXWhileExpression= ruleXWhileExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXWhileExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXWhileExpression=ruleXWhileExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXWhileExpression; 
            }
            match(input,EOF,FollowSets000.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:7065: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:7068:28: ( ( () otherlv_1= 'while' otherlv_2= '(' ( (lv_predicate_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_body_5_0= ruleXExpression ) ) ) )
            // InternalXcore.g:7069:1: ( () otherlv_1= 'while' otherlv_2= '(' ( (lv_predicate_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_body_5_0= ruleXExpression ) ) )
            {
            // InternalXcore.g:7069:1: ( () otherlv_1= 'while' otherlv_2= '(' ( (lv_predicate_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_body_5_0= ruleXExpression ) ) )
            // InternalXcore.g:7069:2: () otherlv_1= 'while' otherlv_2= '(' ( (lv_predicate_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_body_5_0= ruleXExpression ) )
            {
            // InternalXcore.g:7069:2: ()
            // InternalXcore.g:7070:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXWhileExpressionAccess().getXWhileExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,105,FollowSets000.FOLLOW_56); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXWhileExpressionAccess().getWhileKeyword_1());
                  
            }
            otherlv_2=(Token)match(input,15,FollowSets000.FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getXWhileExpressionAccess().getLeftParenthesisKeyword_2());
                  
            }
            // InternalXcore.g:7083:1: ( (lv_predicate_3_0= ruleXExpression ) )
            // InternalXcore.g:7084:1: (lv_predicate_3_0= ruleXExpression )
            {
            // InternalXcore.g:7084:1: (lv_predicate_3_0= ruleXExpression )
            // InternalXcore.g:7085:3: lv_predicate_3_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXWhileExpressionAccess().getPredicateXExpressionParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FollowSets000.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,FollowSets000.FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getXWhileExpressionAccess().getRightParenthesisKeyword_4());
                  
            }
            // InternalXcore.g:7105:1: ( (lv_body_5_0= ruleXExpression ) )
            // InternalXcore.g:7106:1: (lv_body_5_0= ruleXExpression )
            {
            // InternalXcore.g:7106:1: (lv_body_5_0= ruleXExpression )
            // InternalXcore.g:7107:3: lv_body_5_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXWhileExpressionAccess().getBodyXExpressionParserRuleCall_5_0()); 
              	    
            }
            pushFollow(FollowSets000.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:7131: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:7132:2: (iv_ruleXDoWhileExpression= ruleXDoWhileExpression EOF )
            // InternalXcore.g:7133:2: iv_ruleXDoWhileExpression= ruleXDoWhileExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXDoWhileExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXDoWhileExpression=ruleXDoWhileExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXDoWhileExpression; 
            }
            match(input,EOF,FollowSets000.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:7140: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:7143:28: ( ( () otherlv_1= 'do' ( (lv_body_2_0= ruleXExpression ) ) otherlv_3= 'while' otherlv_4= '(' ( (lv_predicate_5_0= ruleXExpression ) ) otherlv_6= ')' ) )
            // InternalXcore.g:7144:1: ( () otherlv_1= 'do' ( (lv_body_2_0= ruleXExpression ) ) otherlv_3= 'while' otherlv_4= '(' ( (lv_predicate_5_0= ruleXExpression ) ) otherlv_6= ')' )
            {
            // InternalXcore.g:7144:1: ( () otherlv_1= 'do' ( (lv_body_2_0= ruleXExpression ) ) otherlv_3= 'while' otherlv_4= '(' ( (lv_predicate_5_0= ruleXExpression ) ) otherlv_6= ')' )
            // InternalXcore.g:7144:2: () otherlv_1= 'do' ( (lv_body_2_0= ruleXExpression ) ) otherlv_3= 'while' otherlv_4= '(' ( (lv_predicate_5_0= ruleXExpression ) ) otherlv_6= ')'
            {
            // InternalXcore.g:7144:2: ()
            // InternalXcore.g:7145:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXDoWhileExpressionAccess().getXDoWhileExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,106,FollowSets000.FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXDoWhileExpressionAccess().getDoKeyword_1());
                  
            }
            // InternalXcore.g:7154:1: ( (lv_body_2_0= ruleXExpression ) )
            // InternalXcore.g:7155:1: (lv_body_2_0= ruleXExpression )
            {
            // InternalXcore.g:7155:1: (lv_body_2_0= ruleXExpression )
            // InternalXcore.g:7156:3: lv_body_2_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXDoWhileExpressionAccess().getBodyXExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FollowSets000.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,FollowSets000.FOLLOW_56); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getXDoWhileExpressionAccess().getWhileKeyword_3());
                  
            }
            otherlv_4=(Token)match(input,15,FollowSets000.FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getXDoWhileExpressionAccess().getLeftParenthesisKeyword_4());
                  
            }
            // InternalXcore.g:7180:1: ( (lv_predicate_5_0= ruleXExpression ) )
            // InternalXcore.g:7181:1: (lv_predicate_5_0= ruleXExpression )
            {
            // InternalXcore.g:7181:1: (lv_predicate_5_0= ruleXExpression )
            // InternalXcore.g:7182:3: lv_predicate_5_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXDoWhileExpressionAccess().getPredicateXExpressionParserRuleCall_5_0()); 
              	    
            }
            pushFollow(FollowSets000.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,FollowSets000.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:7210: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:7211:2: (iv_ruleXExpressionOrVarDeclaration= ruleXExpressionOrVarDeclaration EOF )
            // InternalXcore.g:7212:2: iv_ruleXExpressionOrVarDeclaration= ruleXExpressionOrVarDeclaration EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXExpressionOrVarDeclarationRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXExpressionOrVarDeclaration=ruleXExpressionOrVarDeclaration();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXExpressionOrVarDeclaration; 
            }
            match(input,EOF,FollowSets000.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:7219: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:7222:28: ( (this_XVariableDeclaration_0= ruleXVariableDeclaration | this_XExpression_1= ruleXExpression ) )
            // InternalXcore.g:7223:1: (this_XVariableDeclaration_0= ruleXVariableDeclaration | this_XExpression_1= ruleXExpression )
            {
            // InternalXcore.g:7223:1: (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:7224:5: this_XVariableDeclaration_0= ruleXVariableDeclaration
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXExpressionOrVarDeclarationAccess().getXVariableDeclarationParserRuleCall_0()); 
                          
                    }
                    pushFollow(FollowSets000.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:7234:5: this_XExpression_1= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getXExpressionOrVarDeclarationAccess().getXExpressionParserRuleCall_1()); 
                          
                    }
                    pushFollow(FollowSets000.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:7250: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:7251:2: (iv_ruleXVariableDeclaration= ruleXVariableDeclaration EOF )
            // InternalXcore.g:7252:2: iv_ruleXVariableDeclaration= ruleXVariableDeclaration EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXVariableDeclarationRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXVariableDeclaration=ruleXVariableDeclaration();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXVariableDeclaration; 
            }
            match(input,EOF,FollowSets000.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:7259: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:7262:28: ( ( () ( ( (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:7263:1: ( () ( ( (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:7263:1: ( () ( ( (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:7263: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:7263:2: ()
            // InternalXcore.g:7264:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXVariableDeclarationAccess().getXVariableDeclarationAction_0(),
                          current);
                  
            }

            }

            // InternalXcore.g:7269:2: ( ( (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:7269:3: ( (lv_writeable_1_0= 'var' ) )
                    {
                    // InternalXcore.g:7269:3: ( (lv_writeable_1_0= 'var' ) )
                    // InternalXcore.g:7270:1: (lv_writeable_1_0= 'var' )
                    {
                    // InternalXcore.g:7270:1: (lv_writeable_1_0= 'var' )
                    // InternalXcore.g:7271:3: lv_writeable_1_0= 'var'
                    {
                    lv_writeable_1_0=(Token)match(input,107,FollowSets000.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", true, "var");
                      	    
                    }

                    }


                    }


                    }
                    break;
                case 2 :
                    // InternalXcore.g:7285:7: otherlv_2= 'val'
                    {
                    otherlv_2=(Token)match(input,108,FollowSets000.FOLLOW_20); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_2, grammarAccess.getXVariableDeclarationAccess().getValKeyword_1_1());
                          
                    }

                    }
                    break;

            }

            // InternalXcore.g:7289:2: ( ( ( ( ( ( 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:7289:3: ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) )
                    {
                    // InternalXcore.g:7289:3: ( ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) ) )
                    // InternalXcore.g:7289:4: ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )=> ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) )
                    {
                    // InternalXcore.g:7297:6: ( ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) ) )
                    // InternalXcore.g:7297:7: ( (lv_type_3_0= ruleJvmTypeReference ) ) ( (lv_name_4_0= ruleValidID ) )
                    {
                    // InternalXcore.g:7297:7: ( (lv_type_3_0= ruleJvmTypeReference ) )
                    // InternalXcore.g:7298:1: (lv_type_3_0= ruleJvmTypeReference )
                    {
                    // InternalXcore.g:7298:1: (lv_type_3_0= ruleJvmTypeReference )
                    // InternalXcore.g:7299:3: lv_type_3_0= ruleJvmTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getTypeJvmTypeReferenceParserRuleCall_2_0_0_0_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:7315:2: ( (lv_name_4_0= ruleValidID ) )
                    // InternalXcore.g:7316:1: (lv_name_4_0= ruleValidID )
                    {
                    // InternalXcore.g:7316:1: (lv_name_4_0= ruleValidID )
                    // InternalXcore.g:7317:3: lv_name_4_0= ruleValidID
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getNameValidIDParserRuleCall_2_0_0_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:7334:6: ( (lv_name_5_0= ruleValidID ) )
                    {
                    // InternalXcore.g:7334:6: ( (lv_name_5_0= ruleValidID ) )
                    // InternalXcore.g:7335:1: (lv_name_5_0= ruleValidID )
                    {
                    // InternalXcore.g:7335:1: (lv_name_5_0= ruleValidID )
                    // InternalXcore.g:7336:3: lv_name_5_0= ruleValidID
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getNameValidIDParserRuleCall_2_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:7352: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:7352:5: otherlv_6= '=' ( (lv_right_7_0= ruleXExpression ) )
                    {
                    otherlv_6=(Token)match(input,18,FollowSets000.FOLLOW_75); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_6, grammarAccess.getXVariableDeclarationAccess().getEqualsSignKeyword_3_0());
                          
                    }
                    // InternalXcore.g:7356:1: ( (lv_right_7_0= ruleXExpression ) )
                    // InternalXcore.g:7357:1: (lv_right_7_0= ruleXExpression )
                    {
                    // InternalXcore.g:7357:1: (lv_right_7_0= ruleXExpression )
                    // InternalXcore.g:7358:3: lv_right_7_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getRightXExpressionParserRuleCall_3_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:7382: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:7383:2: (iv_ruleJvmFormalParameter= ruleJvmFormalParameter EOF )
            // InternalXcore.g:7384:2: iv_ruleJvmFormalParameter= ruleJvmFormalParameter EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmFormalParameterRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleJvmFormalParameter=ruleJvmFormalParameter();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmFormalParameter; 
            }
            match(input,EOF,FollowSets000.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:7391: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:7394:28: ( ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) )? ( (lv_name_1_0= ruleValidID ) ) ) )
            // InternalXcore.g:7395:1: ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) )? ( (lv_name_1_0= ruleValidID ) ) )
            {
            // InternalXcore.g:7395:1: ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) )? ( (lv_name_1_0= ruleValidID ) ) )
            // InternalXcore.g:7395:2: ( (lv_parameterType_0_0= ruleJvmTypeReference ) )? ( (lv_name_1_0= ruleValidID ) )
            {
            // InternalXcore.g:7395:2: ( (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:7396:1: (lv_parameterType_0_0= ruleJvmTypeReference )
                    {
                    // InternalXcore.g:7396:1: (lv_parameterType_0_0= ruleJvmTypeReference )
                    // InternalXcore.g:7397:3: lv_parameterType_0_0= ruleJvmTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getJvmFormalParameterAccess().getParameterTypeJvmTypeReferenceParserRuleCall_0_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:7413:3: ( (lv_name_1_0= ruleValidID ) )
            // InternalXcore.g:7414:1: (lv_name_1_0= ruleValidID )
            {
            // InternalXcore.g:7414:1: (lv_name_1_0= ruleValidID )
            // InternalXcore.g:7415:3: lv_name_1_0= ruleValidID
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getJvmFormalParameterAccess().getNameValidIDParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FollowSets000.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:7439: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:7440:2: (iv_ruleFullJvmFormalParameter= ruleFullJvmFormalParameter EOF )
            // InternalXcore.g:7441:2: iv_ruleFullJvmFormalParameter= ruleFullJvmFormalParameter EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getFullJvmFormalParameterRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleFullJvmFormalParameter=ruleFullJvmFormalParameter();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleFullJvmFormalParameter; 
            }
            match(input,EOF,FollowSets000.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:7448: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:7451:28: ( ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) ) ( (lv_name_1_0= ruleValidID ) ) ) )
            // InternalXcore.g:7452:1: ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) ) ( (lv_name_1_0= ruleValidID ) ) )
            {
            // InternalXcore.g:7452:1: ( ( (lv_parameterType_0_0= ruleJvmTypeReference ) ) ( (lv_name_1_0= ruleValidID ) ) )
            // InternalXcore.g:7452:2: ( (lv_parameterType_0_0= ruleJvmTypeReference ) ) ( (lv_name_1_0= ruleValidID ) )
            {
            // InternalXcore.g:7452:2: ( (lv_parameterType_0_0= ruleJvmTypeReference ) )
            // InternalXcore.g:7453:1: (lv_parameterType_0_0= ruleJvmTypeReference )
            {
            // InternalXcore.g:7453:1: (lv_parameterType_0_0= ruleJvmTypeReference )
            // InternalXcore.g:7454:3: lv_parameterType_0_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getFullJvmFormalParameterAccess().getParameterTypeJvmTypeReferenceParserRuleCall_0_0()); 
              	    
            }
            pushFollow(FollowSets000.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:7470:2: ( (lv_name_1_0= ruleValidID ) )
            // InternalXcore.g:7471:1: (lv_name_1_0= ruleValidID )
            {
            // InternalXcore.g:7471:1: (lv_name_1_0= ruleValidID )
            // InternalXcore.g:7472:3: lv_name_1_0= ruleValidID
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getFullJvmFormalParameterAccess().getNameValidIDParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FollowSets000.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:7496: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:7497:2: (iv_ruleXFeatureCall= ruleXFeatureCall EOF )
            // InternalXcore.g:7498:2: iv_ruleXFeatureCall= ruleXFeatureCall EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXFeatureCallRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXFeatureCall=ruleXFeatureCall();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXFeatureCall; 
            }
            match(input,EOF,FollowSets000.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:7505: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:7508:28: ( ( () (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:7509:1: ( () (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:7509:1: ( () (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:7509: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:7509:2: ()
            // InternalXcore.g:7510:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXFeatureCallAccess().getXFeatureCallAction_0(),
                          current);
                  
            }

            }

            // InternalXcore.g:7515:2: (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:7515:4: otherlv_1= '<' ( (lv_typeArguments_2_0= ruleJvmArgumentTypeReference ) ) (otherlv_3= ',' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) )* otherlv_5= '>'
                    {
                    otherlv_1=(Token)match(input,23,FollowSets000.FOLLOW_95); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_1, grammarAccess.getXFeatureCallAccess().getLessThanSignKeyword_1_0());
                          
                    }
                    // InternalXcore.g:7519:1: ( (lv_typeArguments_2_0= ruleJvmArgumentTypeReference ) )
                    // InternalXcore.g:7520:1: (lv_typeArguments_2_0= ruleJvmArgumentTypeReference )
                    {
                    // InternalXcore.g:7520:1: (lv_typeArguments_2_0= ruleJvmArgumentTypeReference )
                    // InternalXcore.g:7521:3: lv_typeArguments_2_0= ruleJvmArgumentTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:7537:2: (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:7537:4: otherlv_3= ',' ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) )
                    	    {
                    	    otherlv_3=(Token)match(input,16,FollowSets000.FOLLOW_95); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_3, grammarAccess.getXFeatureCallAccess().getCommaKeyword_1_2_0());
                    	          
                    	    }
                    	    // InternalXcore.g:7541:1: ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) )
                    	    // InternalXcore.g:7542:1: (lv_typeArguments_4_0= ruleJvmArgumentTypeReference )
                    	    {
                    	    // InternalXcore.g:7542:1: (lv_typeArguments_4_0= ruleJvmArgumentTypeReference )
                    	    // InternalXcore.g:7543:3: lv_typeArguments_4_0= ruleJvmArgumentTypeReference
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_1_2_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_94); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_5, grammarAccess.getXFeatureCallAccess().getGreaterThanSignKeyword_1_3());
                          
                    }

                    }
                    break;

            }

            // InternalXcore.g:7563:3: ( ( ruleIdOrSuper ) )
            // InternalXcore.g:7564:1: ( ruleIdOrSuper )
            {
            // InternalXcore.g:7564:1: ( ruleIdOrSuper )
            // InternalXcore.g:7565:3: ruleIdOrSuper
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getXFeatureCallRule());
              	        }
                      
            }
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureJvmIdentifiableElementCrossReference_2_0()); 
              	    
            }
            pushFollow(FollowSets000.FOLLOW_120);
            ruleIdOrSuper();

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

            }


            }

            // InternalXcore.g:7578:2: ( ( ( ( '(' ) )=> (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:7578: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= ')'
                    {
                    // InternalXcore.g:7578:3: ( ( ( '(' ) )=> (lv_explicitOperationCall_7_0= '(' ) )
                    // InternalXcore.g:7578:4: ( ( '(' ) )=> (lv_explicitOperationCall_7_0= '(' )
                    {
                    // InternalXcore.g:7585:1: (lv_explicitOperationCall_7_0= '(' )
                    // InternalXcore.g:7586:3: lv_explicitOperationCall_7_0= '('
                    {
                    lv_explicitOperationCall_7_0=(Token)match(input,15,FollowSets000.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", true, "(");
                      	    
                    }

                    }


                    }

                    // InternalXcore.g:7599:2: ( ( ( ( () ( ( ( 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:7599:3: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_featureCallArguments_8_0= ruleXShortClosure ) )
                            {
                            // InternalXcore.g:7599:3: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_featureCallArguments_8_0= ruleXShortClosure ) )
                            // InternalXcore.g:7599:4: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_featureCallArguments_8_0= ruleXShortClosure )
                            {
                            // InternalXcore.g:7616:1: (lv_featureCallArguments_8_0= ruleXShortClosure )
                            // InternalXcore.g:7617:3: lv_featureCallArguments_8_0= ruleXShortClosure
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXShortClosureParserRuleCall_3_1_0_0()); 
                              	    
                            }
                            pushFollow(FollowSets000.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:7634:6: ( ( (lv_featureCallArguments_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) ) )* )
                            {
                            // InternalXcore.g:7634:6: ( ( (lv_featureCallArguments_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) ) )* )
                            // InternalXcore.g:7634:7: ( (lv_featureCallArguments_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) ) )*
                            {
                            // InternalXcore.g:7634:7: ( (lv_featureCallArguments_9_0= ruleXExpression ) )
                            // InternalXcore.g:7635:1: (lv_featureCallArguments_9_0= ruleXExpression )
                            {
                            // InternalXcore.g:7635:1: (lv_featureCallArguments_9_0= ruleXExpression )
                            // InternalXcore.g:7636:3: lv_featureCallArguments_9_0= ruleXExpression
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXExpressionParserRuleCall_3_1_1_0_0()); 
                              	    
                            }
                            pushFollow(FollowSets000.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:7652:2: (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:7652:4: otherlv_10= ',' ( (lv_featureCallArguments_11_0= ruleXExpression ) )
                            	    {
                            	    otherlv_10=(Token)match(input,16,FollowSets000.FOLLOW_75); if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	          	newLeafNode(otherlv_10, grammarAccess.getXFeatureCallAccess().getCommaKeyword_3_1_1_1_0());
                            	          
                            	    }
                            	    // InternalXcore.g:7656:1: ( (lv_featureCallArguments_11_0= ruleXExpression ) )
                            	    // InternalXcore.g:7657:1: (lv_featureCallArguments_11_0= ruleXExpression )
                            	    {
                            	    // InternalXcore.g:7657:1: (lv_featureCallArguments_11_0= ruleXExpression )
                            	    // InternalXcore.g:7658:3: lv_featureCallArguments_11_0= ruleXExpression
                            	    {
                            	    if ( state.backtracking==0 ) {
                            	       
                            	      	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXExpressionParserRuleCall_3_1_1_1_1_0()); 
                            	      	    
                            	    }
                            	    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_121); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_12, grammarAccess.getXFeatureCallAccess().getRightParenthesisKeyword_3_2());
                          
                    }

                    }
                    break;

            }

            // InternalXcore.g:7678:3: ( ( ( () '[' ) )=> (lv_featureCallArguments_13_0= ruleXClosure ) )?
            int alt150=2;
            alt150 = dfa150.predict(input);
            switch (alt150) {
                case 1 :
                    // InternalXcore.g:7678:4: ( ( () '[' ) )=> (lv_featureCallArguments_13_0= ruleXClosure )
                    {
                    // InternalXcore.g:7681:1: (lv_featureCallArguments_13_0= ruleXClosure )
                    // InternalXcore.g:7682:3: lv_featureCallArguments_13_0= ruleXClosure
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXFeatureCallAccess().getFeatureCallArgumentsXClosureParserRuleCall_4_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:7706: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:7707:2: (iv_ruleIdOrSuper= ruleIdOrSuper EOF )
            // InternalXcore.g:7708:2: iv_ruleIdOrSuper= ruleIdOrSuper EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getIdOrSuperRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleIdOrSuper=ruleIdOrSuper();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleIdOrSuper.getText(); 
            }
            match(input,EOF,FollowSets000.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:7715: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:7718:28: ( (this_FeatureCallID_0= ruleFeatureCallID | kw= 'super' ) )
            // InternalXcore.g:7719:1: (this_FeatureCallID_0= ruleFeatureCallID | kw= 'super' )
            {
            // InternalXcore.g:7719:1: (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:7720:5: this_FeatureCallID_0= ruleFeatureCallID
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getIdOrSuperAccess().getFeatureCallIDParserRuleCall_0()); 
                          
                    }
                    pushFollow(FollowSets000.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:7732:2: kw= 'super'
                    {
                    kw=(Token)match(input,66,FollowSets000.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:7745: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:7746:2: (iv_ruleXConstructorCall= ruleXConstructorCall EOF )
            // InternalXcore.g:7747:2: iv_ruleXConstructorCall= ruleXConstructorCall EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXConstructorCallRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXConstructorCall=ruleXConstructorCall();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXConstructorCall; 
            }
            match(input,EOF,FollowSets000.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:7754: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:7757:28: ( ( () 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:7758:1: ( () 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:7758:1: ( () 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:7758: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:7758:2: ()
            // InternalXcore.g:7759:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXConstructorCallAccess().getXConstructorCallAction_0(),
                          current);
                  
            }

            }

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

                  	newLeafNode(otherlv_1, grammarAccess.getXConstructorCallAccess().getNewKeyword_1());
                  
            }
            // InternalXcore.g:7768:1: ( ( ruleQualifiedName ) )
            // InternalXcore.g:7769:1: ( ruleQualifiedName )
            {
            // InternalXcore.g:7769:1: ( ruleQualifiedName )
            // InternalXcore.g:7770:3: ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getXConstructorCallRule());
              	        }
                      
            }
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getConstructorJvmConstructorCrossReference_2_0()); 
              	    
            }
            pushFollow(FollowSets000.FOLLOW_122);
            ruleQualifiedName();

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

            }


            }

            // InternalXcore.g:7783:2: ( ( ( '<' )=>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:7783:3: ( ( '<' )=>otherlv_3= '<' ) ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>'
                    {
                    // InternalXcore.g:7783:3: ( ( '<' )=>otherlv_3= '<' )
                    // InternalXcore.g:7783:4: ( '<' )=>otherlv_3= '<'
                    {
                    otherlv_3=(Token)match(input,23,FollowSets000.FOLLOW_95); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_3, grammarAccess.getXConstructorCallAccess().getLessThanSignKeyword_3_0());
                          
                    }

                    }

                    // InternalXcore.g:7788:2: ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) )
                    // InternalXcore.g:7789:1: (lv_typeArguments_4_0= ruleJvmArgumentTypeReference )
                    {
                    // InternalXcore.g:7789:1: (lv_typeArguments_4_0= ruleJvmArgumentTypeReference )
                    // InternalXcore.g:7790:3: lv_typeArguments_4_0= ruleJvmArgumentTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_3_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:7806:2: (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:7806:4: otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) )
                    	    {
                    	    otherlv_5=(Token)match(input,16,FollowSets000.FOLLOW_95); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_5, grammarAccess.getXConstructorCallAccess().getCommaKeyword_3_2_0());
                    	          
                    	    }
                    	    // InternalXcore.g:7810:1: ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) )
                    	    // InternalXcore.g:7811:1: (lv_typeArguments_6_0= ruleJvmArgumentTypeReference )
                    	    {
                    	    // InternalXcore.g:7811:1: (lv_typeArguments_6_0= ruleJvmArgumentTypeReference )
                    	    // InternalXcore.g:7812:3: lv_typeArguments_6_0= ruleJvmArgumentTypeReference
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_3_2_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_120); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

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

                    }
                    break;

            }

            // InternalXcore.g:7832: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:7832: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:7832:4: ( ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' ) )
                    // InternalXcore.g:7832:5: ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' )
                    {
                    // InternalXcore.g:7839:1: (lv_explicitConstructorCall_8_0= '(' )
                    // InternalXcore.g:7840:3: lv_explicitConstructorCall_8_0= '('
                    {
                    lv_explicitConstructorCall_8_0=(Token)match(input,15,FollowSets000.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", true, "(");
                      	    
                    }

                    }


                    }

                    // InternalXcore.g:7853:2: ( ( ( ( () ( ( ( 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:7853:3: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) )
                            {
                            // InternalXcore.g:7853:3: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) )
                            // InternalXcore.g:7853:4: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure )
                            {
                            // InternalXcore.g:7870:1: (lv_arguments_9_0= ruleXShortClosure )
                            // InternalXcore.g:7871:3: lv_arguments_9_0= ruleXShortClosure
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getArgumentsXShortClosureParserRuleCall_4_1_0_0()); 
                              	    
                            }
                            pushFollow(FollowSets000.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:7888:6: ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* )
                            {
                            // InternalXcore.g:7888:6: ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* )
                            // InternalXcore.g:7888:7: ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )*
                            {
                            // InternalXcore.g:7888:7: ( (lv_arguments_10_0= ruleXExpression ) )
                            // InternalXcore.g:7889:1: (lv_arguments_10_0= ruleXExpression )
                            {
                            // InternalXcore.g:7889:1: (lv_arguments_10_0= ruleXExpression )
                            // InternalXcore.g:7890:3: lv_arguments_10_0= ruleXExpression
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getArgumentsXExpressionParserRuleCall_4_1_1_0_0()); 
                              	    
                            }
                            pushFollow(FollowSets000.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:7906:2: (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:7906:4: otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) )
                            	    {
                            	    otherlv_11=(Token)match(input,16,FollowSets000.FOLLOW_75); if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	          	newLeafNode(otherlv_11, grammarAccess.getXConstructorCallAccess().getCommaKeyword_4_1_1_1_0());
                            	          
                            	    }
                            	    // InternalXcore.g:7910:1: ( (lv_arguments_12_0= ruleXExpression ) )
                            	    // InternalXcore.g:7911:1: (lv_arguments_12_0= ruleXExpression )
                            	    {
                            	    // InternalXcore.g:7911:1: (lv_arguments_12_0= ruleXExpression )
                            	    // InternalXcore.g:7912:3: lv_arguments_12_0= ruleXExpression
                            	    {
                            	    if ( state.backtracking==0 ) {
                            	       
                            	      	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getArgumentsXExpressionParserRuleCall_4_1_1_1_1_0()); 
                            	      	    
                            	    }
                            	    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_121); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_13, grammarAccess.getXConstructorCallAccess().getRightParenthesisKeyword_4_2());
                          
                    }

                    }
                    break;

            }

            // InternalXcore.g:7932:3: ( ( ( () '[' ) )=> (lv_arguments_14_0= ruleXClosure ) )?
            int alt157=2;
            alt157 = dfa157.predict(input);
            switch (alt157) {
                case 1 :
                    // InternalXcore.g:7932:4: ( ( () '[' ) )=> (lv_arguments_14_0= ruleXClosure )
                    {
                    // InternalXcore.g:7935:1: (lv_arguments_14_0= ruleXClosure )
                    // InternalXcore.g:7936:3: lv_arguments_14_0= ruleXClosure
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXConstructorCallAccess().getArgumentsXClosureParserRuleCall_5_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:7960: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:7961:2: (iv_ruleXBooleanLiteral= ruleXBooleanLiteral EOF )
            // InternalXcore.g:7962:2: iv_ruleXBooleanLiteral= ruleXBooleanLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXBooleanLiteralRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXBooleanLiteral=ruleXBooleanLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXBooleanLiteral; 
            }
            match(input,EOF,FollowSets000.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:7969: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:7972:28: ( ( () (otherlv_1= 'false' | ( (lv_isTrue_2_0= 'true' ) ) ) ) )
            // InternalXcore.g:7973:1: ( () (otherlv_1= 'false' | ( (lv_isTrue_2_0= 'true' ) ) ) )
            {
            // InternalXcore.g:7973:1: ( () (otherlv_1= 'false' | ( (lv_isTrue_2_0= 'true' ) ) ) )
            // InternalXcore.g:7973:2: () (otherlv_1= 'false' | ( (lv_isTrue_2_0= 'true' ) ) )
            {
            // InternalXcore.g:7973:2: ()
            // InternalXcore.g:7974:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXBooleanLiteralAccess().getXBooleanLiteralAction_0(),
                          current);
                  
            }

            }

            // InternalXcore.g:7979:2: (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:7979:4: otherlv_1= 'false'
                    {
                    otherlv_1=(Token)match(input,110,FollowSets000.FOLLOW_2); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_1, grammarAccess.getXBooleanLiteralAccess().getFalseKeyword_1_0());
                          
                    }

                    }
                    break;
                case 2 :
                    // InternalXcore.g:7984:6: ( (lv_isTrue_2_0= 'true' ) )
                    {
                    // InternalXcore.g:7984:6: ( (lv_isTrue_2_0= 'true' ) )
                    // InternalXcore.g:7985:1: (lv_isTrue_2_0= 'true' )
                    {
                    // InternalXcore.g:7985:1: (lv_isTrue_2_0= 'true' )
                    // InternalXcore.g:7986:3: lv_isTrue_2_0= 'true'
                    {
                    lv_isTrue_2_0=(Token)match(input,111,FollowSets000.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", true, "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:8007: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:8008:2: (iv_ruleXNullLiteral= ruleXNullLiteral EOF )
            // InternalXcore.g:8009:2: iv_ruleXNullLiteral= ruleXNullLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXNullLiteralRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXNullLiteral=ruleXNullLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXNullLiteral; 
            }
            match(input,EOF,FollowSets000.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:8016: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:8019:28: ( ( () otherlv_1= 'null' ) )
            // InternalXcore.g:8020:1: ( () otherlv_1= 'null' )
            {
            // InternalXcore.g:8020:1: ( () otherlv_1= 'null' )
            // InternalXcore.g:8020:2: () otherlv_1= 'null'
            {
            // InternalXcore.g:8020:2: ()
            // InternalXcore.g:8021:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXNullLiteralAccess().getXNullLiteralAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,112,FollowSets000.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:8038: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:8039:2: (iv_ruleXNumberLiteral= ruleXNumberLiteral EOF )
            // InternalXcore.g:8040:2: iv_ruleXNumberLiteral= ruleXNumberLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXNumberLiteralRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXNumberLiteral=ruleXNumberLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXNumberLiteral; 
            }
            match(input,EOF,FollowSets000.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:8047: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:8050:28: ( ( () ( (lv_value_1_0= ruleNumber ) ) ) )
            // InternalXcore.g:8051:1: ( () ( (lv_value_1_0= ruleNumber ) ) )
            {
            // InternalXcore.g:8051:1: ( () ( (lv_value_1_0= ruleNumber ) ) )
            // InternalXcore.g:8051:2: () ( (lv_value_1_0= ruleNumber ) )
            {
            // InternalXcore.g:8051:2: ()
            // InternalXcore.g:8052:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXNumberLiteralAccess().getXNumberLiteralAction_0(),
                          current);
                  
            }

            }

            // InternalXcore.g:8057:2: ( (lv_value_1_0= ruleNumber ) )
            // InternalXcore.g:8058:1: (lv_value_1_0= ruleNumber )
            {
            // InternalXcore.g:8058:1: (lv_value_1_0= ruleNumber )
            // InternalXcore.g:8059:3: lv_value_1_0= ruleNumber
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXNumberLiteralAccess().getValueNumberParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FollowSets000.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:8083: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:8084:2: (iv_ruleXStringLiteral= ruleXStringLiteral EOF )
            // InternalXcore.g:8085:2: iv_ruleXStringLiteral= ruleXStringLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXStringLiteralRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXStringLiteral=ruleXStringLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXStringLiteral; 
            }
            match(input,EOF,FollowSets000.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:8092: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:8095:28: ( ( () ( (lv_value_1_0= RULE_STRING ) ) ) )
            // InternalXcore.g:8096:1: ( () ( (lv_value_1_0= RULE_STRING ) ) )
            {
            // InternalXcore.g:8096:1: ( () ( (lv_value_1_0= RULE_STRING ) ) )
            // InternalXcore.g:8096:2: () ( (lv_value_1_0= RULE_STRING ) )
            {
            // InternalXcore.g:8096:2: ()
            // InternalXcore.g:8097:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXStringLiteralAccess().getXStringLiteralAction_0(),
                          current);
                  
            }

            }

            // InternalXcore.g:8102:2: ( (lv_value_1_0= RULE_STRING ) )
            // InternalXcore.g:8103:1: (lv_value_1_0= RULE_STRING )
            {
            // InternalXcore.g:8103:1: (lv_value_1_0= RULE_STRING )
            // InternalXcore.g:8104:3: lv_value_1_0= RULE_STRING
            {
            lv_value_1_0=(Token)match(input,RULE_STRING,FollowSets000.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:8128: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:8129:2: (iv_ruleXTypeLiteral= ruleXTypeLiteral EOF )
            // InternalXcore.g:8130:2: iv_ruleXTypeLiteral= ruleXTypeLiteral EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXTypeLiteralRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXTypeLiteral=ruleXTypeLiteral();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXTypeLiteral; 
            }
            match(input,EOF,FollowSets000.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:8137: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:8140:28: ( ( () otherlv_1= 'typeof' otherlv_2= '(' ( ( ruleQualifiedName ) ) ( (lv_arrayDimensions_4_0= ruleArrayBrackets ) )* otherlv_5= ')' ) )
            // InternalXcore.g:8141:1: ( () otherlv_1= 'typeof' otherlv_2= '(' ( ( ruleQualifiedName ) ) ( (lv_arrayDimensions_4_0= ruleArrayBrackets ) )* otherlv_5= ')' )
            {
            // InternalXcore.g:8141:1: ( () otherlv_1= 'typeof' otherlv_2= '(' ( ( ruleQualifiedName ) ) ( (lv_arrayDimensions_4_0= ruleArrayBrackets ) )* otherlv_5= ')' )
            // InternalXcore.g:8141:2: () otherlv_1= 'typeof' otherlv_2= '(' ( ( ruleQualifiedName ) ) ( (lv_arrayDimensions_4_0= ruleArrayBrackets ) )* otherlv_5= ')'
            {
            // InternalXcore.g:8141:2: ()
            // InternalXcore.g:8142:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXTypeLiteralAccess().getXTypeLiteralAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,113,FollowSets000.FOLLOW_56); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXTypeLiteralAccess().getTypeofKeyword_1());
                  
            }
            otherlv_2=(Token)match(input,15,FollowSets000.FOLLOW_4); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getXTypeLiteralAccess().getLeftParenthesisKeyword_2());
                  
            }
            // InternalXcore.g:8155:1: ( ( ruleQualifiedName ) )
            // InternalXcore.g:8156:1: ( ruleQualifiedName )
            {
            // InternalXcore.g:8156:1: ( ruleQualifiedName )
            // InternalXcore.g:8157:3: ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getXTypeLiteralRule());
              	        }
                      
            }
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXTypeLiteralAccess().getTypeJvmTypeCrossReference_3_0()); 
              	    
            }
            pushFollow(FollowSets000.FOLLOW_123);
            ruleQualifiedName();

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

            }


            }

            // InternalXcore.g:8170:2: ( (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:8171:1: (lv_arrayDimensions_4_0= ruleArrayBrackets )
            	    {
            	    // InternalXcore.g:8171:1: (lv_arrayDimensions_4_0= ruleArrayBrackets )
            	    // InternalXcore.g:8172:3: lv_arrayDimensions_4_0= ruleArrayBrackets
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getXTypeLiteralAccess().getArrayDimensionsArrayBracketsParserRuleCall_4_0()); 
            	      	    
            	    }
            	    pushFollow(FollowSets000.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,FollowSets000.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:8200: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:8201:2: (iv_ruleXThrowExpression= ruleXThrowExpression EOF )
            // InternalXcore.g:8202:2: iv_ruleXThrowExpression= ruleXThrowExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXThrowExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXThrowExpression=ruleXThrowExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXThrowExpression; 
            }
            match(input,EOF,FollowSets000.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:8209: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:8212:28: ( ( () otherlv_1= 'throw' ( (lv_expression_2_0= ruleXExpression ) ) ) )
            // InternalXcore.g:8213:1: ( () otherlv_1= 'throw' ( (lv_expression_2_0= ruleXExpression ) ) )
            {
            // InternalXcore.g:8213:1: ( () otherlv_1= 'throw' ( (lv_expression_2_0= ruleXExpression ) ) )
            // InternalXcore.g:8213:2: () otherlv_1= 'throw' ( (lv_expression_2_0= ruleXExpression ) )
            {
            // InternalXcore.g:8213:2: ()
            // InternalXcore.g:8214:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXThrowExpressionAccess().getXThrowExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,114,FollowSets000.FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXThrowExpressionAccess().getThrowKeyword_1());
                  
            }
            // InternalXcore.g:8223:1: ( (lv_expression_2_0= ruleXExpression ) )
            // InternalXcore.g:8224:1: (lv_expression_2_0= ruleXExpression )
            {
            // InternalXcore.g:8224:1: (lv_expression_2_0= ruleXExpression )
            // InternalXcore.g:8225:3: lv_expression_2_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXThrowExpressionAccess().getExpressionXExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FollowSets000.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:8249: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:8250:2: (iv_ruleXReturnExpression= ruleXReturnExpression EOF )
            // InternalXcore.g:8251:2: iv_ruleXReturnExpression= ruleXReturnExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXReturnExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXReturnExpression=ruleXReturnExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXReturnExpression; 
            }
            match(input,EOF,FollowSets000.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:8258: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:8261:28: ( ( () 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:8262:1: ( () 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:8262:1: ( () 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:8262: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:8262:2: ()
            // InternalXcore.g:8263:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXReturnExpressionAccess().getXReturnExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,115,FollowSets000.FOLLOW_107); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXReturnExpressionAccess().getReturnKeyword_1());
                  
            }
            // InternalXcore.g:8272:1: ( ( '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:8272:2: ( '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:8332:1: (lv_expression_2_0= ruleXExpression )
                    // InternalXcore.g:8333:3: lv_expression_2_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXReturnExpressionAccess().getExpressionXExpressionParserRuleCall_2_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:8357: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:8358:2: (iv_ruleXTryCatchFinallyExpression= ruleXTryCatchFinallyExpression EOF )
            // InternalXcore.g:8359:2: iv_ruleXTryCatchFinallyExpression= ruleXTryCatchFinallyExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXTryCatchFinallyExpression=ruleXTryCatchFinallyExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXTryCatchFinallyExpression; 
            }
            match(input,EOF,FollowSets000.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:8366: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:8369:28: ( ( () 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:8370:1: ( () 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:8370:1: ( () 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:8370: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:8370:2: ()
            // InternalXcore.g:8371:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXTryCatchFinallyExpressionAccess().getXTryCatchFinallyExpressionAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,116,FollowSets000.FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXTryCatchFinallyExpressionAccess().getTryKeyword_1());
                  
            }
            // InternalXcore.g:8380:1: ( (lv_expression_2_0= ruleXExpression ) )
            // InternalXcore.g:8381:1: (lv_expression_2_0= ruleXExpression )
            {
            // InternalXcore.g:8381:1: (lv_expression_2_0= ruleXExpression )
            // InternalXcore.g:8382:3: lv_expression_2_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionAccess().getExpressionXExpressionParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FollowSets000.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:8398:2: ( ( ( ( '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:8398:3: ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? )
                    {
                    // InternalXcore.g:8398:3: ( ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )? )
                    // InternalXcore.g:8398:4: ( ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause ) )+ ( ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) ) )?
                    {
                    // InternalXcore.g:8398:4: ( ( '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:8398:5: ( 'catch' )=> (lv_catchClauses_3_0= ruleXCatchClause )
                    	    {
                    	    // InternalXcore.g:8400:1: (lv_catchClauses_3_0= ruleXCatchClause )
                    	    // InternalXcore.g:8401:3: lv_catchClauses_3_0= ruleXCatchClause
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionAccess().getCatchClausesXCatchClauseParserRuleCall_3_0_0_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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:8417:3: ( ( ( '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:8417:4: ( ( 'finally' )=>otherlv_4= 'finally' ) ( (lv_finallyExpression_5_0= ruleXExpression ) )
                            {
                            // InternalXcore.g:8417:4: ( ( 'finally' )=>otherlv_4= 'finally' )
                            // InternalXcore.g:8417:5: ( 'finally' )=>otherlv_4= 'finally'
                            {
                            otherlv_4=(Token)match(input,117,FollowSets000.FOLLOW_75); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                                  	newLeafNode(otherlv_4, grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyKeyword_3_0_1_0());
                                  
                            }

                            }

                            // InternalXcore.g:8422:2: ( (lv_finallyExpression_5_0= ruleXExpression ) )
                            // InternalXcore.g:8423:1: (lv_finallyExpression_5_0= ruleXExpression )
                            {
                            // InternalXcore.g:8423:1: (lv_finallyExpression_5_0= ruleXExpression )
                            // InternalXcore.g:8424:3: lv_finallyExpression_5_0= ruleXExpression
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionXExpressionParserRuleCall_3_0_1_1_0()); 
                              	    
                            }
                            pushFollow(FollowSets000.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:8441:6: (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) )
                    {
                    // InternalXcore.g:8441:6: (otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) ) )
                    // InternalXcore.g:8441:8: otherlv_6= 'finally' ( (lv_finallyExpression_7_0= ruleXExpression ) )
                    {
                    otherlv_6=(Token)match(input,117,FollowSets000.FOLLOW_75); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_6, grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyKeyword_3_1_0());
                          
                    }
                    // InternalXcore.g:8445:1: ( (lv_finallyExpression_7_0= ruleXExpression ) )
                    // InternalXcore.g:8446:1: (lv_finallyExpression_7_0= ruleXExpression )
                    {
                    // InternalXcore.g:8446:1: (lv_finallyExpression_7_0= ruleXExpression )
                    // InternalXcore.g:8447:3: lv_finallyExpression_7_0= ruleXExpression
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXTryCatchFinallyExpressionAccess().getFinallyExpressionXExpressionParserRuleCall_3_1_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:8471: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:8472:2: (iv_ruleXSynchronizedExpression= ruleXSynchronizedExpression EOF )
            // InternalXcore.g:8473:2: iv_ruleXSynchronizedExpression= ruleXSynchronizedExpression EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXSynchronizedExpressionRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXSynchronizedExpression=ruleXSynchronizedExpression();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXSynchronizedExpression; 
            }
            match(input,EOF,FollowSets000.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:8480: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:8483:28: ( ( ( ( ( () 'synchronized' '(' ) )=> ( () otherlv_1= 'synchronized' otherlv_2= '(' ) ) ( (lv_param_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_expression_5_0= ruleXExpression ) ) ) )
            // InternalXcore.g:8484:1: ( ( ( ( () 'synchronized' '(' ) )=> ( () otherlv_1= 'synchronized' otherlv_2= '(' ) ) ( (lv_param_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_expression_5_0= ruleXExpression ) ) )
            {
            // InternalXcore.g:8484:1: ( ( ( ( () 'synchronized' '(' ) )=> ( () otherlv_1= 'synchronized' otherlv_2= '(' ) ) ( (lv_param_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_expression_5_0= ruleXExpression ) ) )
            // InternalXcore.g:8484:2: ( ( ( () 'synchronized' '(' ) )=> ( () otherlv_1= 'synchronized' otherlv_2= '(' ) ) ( (lv_param_3_0= ruleXExpression ) ) otherlv_4= ')' ( (lv_expression_5_0= ruleXExpression ) )
            {
            // InternalXcore.g:8484:2: ( ( ( () 'synchronized' '(' ) )=> ( () otherlv_1= 'synchronized' otherlv_2= '(' ) )
            // InternalXcore.g:8484:3: ( ( () 'synchronized' '(' ) )=> ( () otherlv_1= 'synchronized' otherlv_2= '(' )
            {
            // InternalXcore.g:8487:5: ( () otherlv_1= 'synchronized' otherlv_2= '(' )
            // InternalXcore.g:8487:6: () otherlv_1= 'synchronized' otherlv_2= '('
            {
            // InternalXcore.g:8487:6: ()
            // InternalXcore.g:8488:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getXSynchronizedExpressionAccess().getXSynchronizedExpressionAction_0_0_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,118,FollowSets000.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,FollowSets000.FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_2, grammarAccess.getXSynchronizedExpressionAccess().getLeftParenthesisKeyword_0_0_2());
                  
            }

            }


            }

            // InternalXcore.g:8501:3: ( (lv_param_3_0= ruleXExpression ) )
            // InternalXcore.g:8502:1: (lv_param_3_0= ruleXExpression )
            {
            // InternalXcore.g:8502:1: (lv_param_3_0= ruleXExpression )
            // InternalXcore.g:8503:3: lv_param_3_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXSynchronizedExpressionAccess().getParamXExpressionParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FollowSets000.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,FollowSets000.FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_4, grammarAccess.getXSynchronizedExpressionAccess().getRightParenthesisKeyword_2());
                  
            }
            // InternalXcore.g:8523:1: ( (lv_expression_5_0= ruleXExpression ) )
            // InternalXcore.g:8524:1: (lv_expression_5_0= ruleXExpression )
            {
            // InternalXcore.g:8524:1: (lv_expression_5_0= ruleXExpression )
            // InternalXcore.g:8525:3: lv_expression_5_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXSynchronizedExpressionAccess().getExpressionXExpressionParserRuleCall_3_0()); 
              	    
            }
            pushFollow(FollowSets000.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:8549: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:8550:2: (iv_ruleXCatchClause= ruleXCatchClause EOF )
            // InternalXcore.g:8551:2: iv_ruleXCatchClause= ruleXCatchClause EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXCatchClauseRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXCatchClause=ruleXCatchClause();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXCatchClause; 
            }
            match(input,EOF,FollowSets000.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:8558: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:8561:28: ( ( ( ( 'catch' )=>otherlv_0= 'catch' ) otherlv_1= '(' ( (lv_declaredParam_2_0= ruleFullJvmFormalParameter ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleXExpression ) ) ) )
            // InternalXcore.g:8562:1: ( ( ( 'catch' )=>otherlv_0= 'catch' ) otherlv_1= '(' ( (lv_declaredParam_2_0= ruleFullJvmFormalParameter ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleXExpression ) ) )
            {
            // InternalXcore.g:8562:1: ( ( ( 'catch' )=>otherlv_0= 'catch' ) otherlv_1= '(' ( (lv_declaredParam_2_0= ruleFullJvmFormalParameter ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleXExpression ) ) )
            // InternalXcore.g:8562:2: ( ( 'catch' )=>otherlv_0= 'catch' ) otherlv_1= '(' ( (lv_declaredParam_2_0= ruleFullJvmFormalParameter ) ) otherlv_3= ')' ( (lv_expression_4_0= ruleXExpression ) )
            {
            // InternalXcore.g:8562:2: ( ( 'catch' )=>otherlv_0= 'catch' )
            // InternalXcore.g:8562:3: ( 'catch' )=>otherlv_0= 'catch'
            {
            otherlv_0=(Token)match(input,119,FollowSets000.FOLLOW_56); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getXCatchClauseAccess().getCatchKeyword_0());
                  
            }

            }

            otherlv_1=(Token)match(input,15,FollowSets000.FOLLOW_20); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getXCatchClauseAccess().getLeftParenthesisKeyword_1());
                  
            }
            // InternalXcore.g:8571:1: ( (lv_declaredParam_2_0= ruleFullJvmFormalParameter ) )
            // InternalXcore.g:8572:1: (lv_declaredParam_2_0= ruleFullJvmFormalParameter )
            {
            // InternalXcore.g:8572:1: (lv_declaredParam_2_0= ruleFullJvmFormalParameter )
            // InternalXcore.g:8573:3: lv_declaredParam_2_0= ruleFullJvmFormalParameter
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXCatchClauseAccess().getDeclaredParamFullJvmFormalParameterParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FollowSets000.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,FollowSets000.FOLLOW_75); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_3, grammarAccess.getXCatchClauseAccess().getRightParenthesisKeyword_3());
                  
            }
            // InternalXcore.g:8593:1: ( (lv_expression_4_0= ruleXExpression ) )
            // InternalXcore.g:8594:1: (lv_expression_4_0= ruleXExpression )
            {
            // InternalXcore.g:8594:1: (lv_expression_4_0= ruleXExpression )
            // InternalXcore.g:8595:3: lv_expression_4_0= ruleXExpression
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXCatchClauseAccess().getExpressionXExpressionParserRuleCall_4_0()); 
              	    
            }
            pushFollow(FollowSets000.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:8619: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:8620:2: (iv_ruleQualifiedName= ruleQualifiedName EOF )
            // InternalXcore.g:8621:2: iv_ruleQualifiedName= ruleQualifiedName EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getQualifiedNameRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleQualifiedName=ruleQualifiedName();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleQualifiedName.getText(); 
            }
            match(input,EOF,FollowSets000.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:8628: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:8631:28: ( (this_ValidID_0= ruleValidID ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )* ) )
            // InternalXcore.g:8632:1: (this_ValidID_0= ruleValidID ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )* )
            {
            // InternalXcore.g:8632:1: (this_ValidID_0= ruleValidID ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )* )
            // InternalXcore.g:8633:5: this_ValidID_0= ruleValidID ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )*
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getQualifiedNameAccess().getValidIDParserRuleCall_0()); 
                  
            }
            pushFollow(FollowSets000.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:8643:1: ( ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID )*
            loop164:
            do {
                int alt164=2;
                alt164 = dfa164.predict(input);
                switch (alt164) {
            	case 1 :
            	    // InternalXcore.g:8643:2: ( ( '.' )=>kw= '.' ) this_ValidID_2= ruleValidID
            	    {
            	    // InternalXcore.g:8643:2: ( ( '.' )=>kw= '.' )
            	    // InternalXcore.g:8643:3: ( '.' )=>kw= '.'
            	    {
            	    kw=(Token)match(input,67,FollowSets000.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(FollowSets000.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:8670: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:8674:2: (iv_ruleNumber= ruleNumber EOF )
            // InternalXcore.g:8675:2: iv_ruleNumber= ruleNumber EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getNumberRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleNumber=ruleNumber();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleNumber.getText(); 
            }
            match(input,EOF,FollowSets000.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:8685: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:8689:28: ( (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:8690:1: (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:8690:1: (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:8690:6: this_HEX_0= RULE_HEX
                    {
                    this_HEX_0=(Token)match(input,RULE_HEX,FollowSets000.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:8698:6: ( (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL ) (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )? )
                    {
                    // InternalXcore.g:8698:6: ( (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL ) (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )? )
                    // InternalXcore.g:8698:7: (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL ) (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )?
                    {
                    // InternalXcore.g:8698:7: (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:8698:12: this_INT_1= RULE_INT
                            {
                            this_INT_1=(Token)match(input,RULE_INT,FollowSets000.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:8706:10: this_DECIMAL_2= RULE_DECIMAL
                            {
                            this_DECIMAL_2=(Token)match(input,RULE_DECIMAL,FollowSets000.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:8713:2: (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:8714:2: kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL )
                            {
                            kw=(Token)match(input,67,FollowSets000.FOLLOW_126); if (state.failed) return current;
                            if ( state.backtracking==0 ) {

                                      current.merge(kw);
                                      newLeafNode(kw, grammarAccess.getNumberAccess().getFullStopKeyword_1_1_0()); 
                                  
                            }
                            // InternalXcore.g:8719:1: (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:8719:6: this_INT_4= RULE_INT
                                    {
                                    this_INT_4=(Token)match(input,RULE_INT,FollowSets000.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:8727:10: this_DECIMAL_5= RULE_DECIMAL
                                    {
                                    this_DECIMAL_5=(Token)match(input,RULE_DECIMAL,FollowSets000.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:8747: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:8748:2: (iv_ruleJvmTypeReference= ruleJvmTypeReference EOF )
            // InternalXcore.g:8749:2: iv_ruleJvmTypeReference= ruleJvmTypeReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmTypeReferenceRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleJvmTypeReference=ruleJvmTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmTypeReference; 
            }
            match(input,EOF,FollowSets000.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:8756: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:8759:28: ( ( (this_JvmParameterizedTypeReference_0= ruleJvmParameterizedTypeReference ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )* ) | this_XFunctionTypeRef_3= ruleXFunctionTypeRef ) )
            // InternalXcore.g:8760:1: ( (this_JvmParameterizedTypeReference_0= ruleJvmParameterizedTypeReference ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )* ) | this_XFunctionTypeRef_3= ruleXFunctionTypeRef )
            {
            // InternalXcore.g:8760:1: ( (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:8760:2: (this_JvmParameterizedTypeReference_0= ruleJvmParameterizedTypeReference ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )* )
                    {
                    // InternalXcore.g:8760:2: (this_JvmParameterizedTypeReference_0= ruleJvmParameterizedTypeReference ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )* )
                    // InternalXcore.g:8761:5: this_JvmParameterizedTypeReference_0= ruleJvmParameterizedTypeReference ( ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets ) )*
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getJvmTypeReferenceAccess().getJvmParameterizedTypeReferenceParserRuleCall_0_0()); 
                          
                    }
                    pushFollow(FollowSets000.FOLLOW_121);
                    this_JvmParameterizedTypeReference_0=ruleJvmParameterizedTypeReference();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_JvmParameterizedTypeReference_0; 
                              afterParserOrEnumRuleCall();
                          
                    }
                    // InternalXcore.g:8769:1: ( ( ( () 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:8769:2: ( ( () ruleArrayBrackets ) )=> ( () ruleArrayBrackets )
                    	    {
                    	    // InternalXcore.g:8770:24: ( () ruleArrayBrackets )
                    	    // InternalXcore.g:8770:25: () ruleArrayBrackets
                    	    {
                    	    // InternalXcore.g:8770:25: ()
                    	    // InternalXcore.g:8771:5: 
                    	    {
                    	    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(FollowSets000.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:8786:5: this_XFunctionTypeRef_3= ruleXFunctionTypeRef
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getJvmTypeReferenceAccess().getXFunctionTypeRefParserRuleCall_1()); 
                          
                    }
                    pushFollow(FollowSets000.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:8802: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:8803:2: (iv_ruleArrayBrackets= ruleArrayBrackets EOF )
            // InternalXcore.g:8804:2: iv_ruleArrayBrackets= ruleArrayBrackets EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getArrayBracketsRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleArrayBrackets=ruleArrayBrackets();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleArrayBrackets.getText(); 
            }
            match(input,EOF,FollowSets000.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:8811: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:8814:28: ( (kw= '[' kw= ']' ) )
            // InternalXcore.g:8815:1: (kw= '[' kw= ']' )
            {
            // InternalXcore.g:8815:1: (kw= '[' kw= ']' )
            // InternalXcore.g:8816:2: kw= '[' kw= ']'
            {
            kw=(Token)match(input,59,FollowSets000.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,FollowSets000.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:8835: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:8836:2: (iv_ruleXFunctionTypeRef= ruleXFunctionTypeRef EOF )
            // InternalXcore.g:8837:2: iv_ruleXFunctionTypeRef= ruleXFunctionTypeRef EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXFunctionTypeRefRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXFunctionTypeRef=ruleXFunctionTypeRef();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXFunctionTypeRef; 
            }
            match(input,EOF,FollowSets000.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:8844: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:8847:28: ( ( (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:8848:1: ( (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:8848:1: ( (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:8848: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:8848:2: (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:8848:4: otherlv_0= '(' ( ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )* )? otherlv_4= ')'
                    {
                    otherlv_0=(Token)match(input,15,FollowSets000.FOLLOW_127); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_0, grammarAccess.getXFunctionTypeRefAccess().getLeftParenthesisKeyword_0_0());
                          
                    }
                    // InternalXcore.g:8852:1: ( ( (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:8852:2: ( (lv_paramTypes_1_0= ruleJvmTypeReference ) ) (otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) ) )*
                            {
                            // InternalXcore.g:8852:2: ( (lv_paramTypes_1_0= ruleJvmTypeReference ) )
                            // InternalXcore.g:8853:1: (lv_paramTypes_1_0= ruleJvmTypeReference )
                            {
                            // InternalXcore.g:8853:1: (lv_paramTypes_1_0= ruleJvmTypeReference )
                            // InternalXcore.g:8854:3: lv_paramTypes_1_0= ruleJvmTypeReference
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getXFunctionTypeRefAccess().getParamTypesJvmTypeReferenceParserRuleCall_0_1_0_0()); 
                              	    
                            }
                            pushFollow(FollowSets000.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:8870:2: (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:8870:4: otherlv_2= ',' ( (lv_paramTypes_3_0= ruleJvmTypeReference ) )
                            	    {
                            	    otherlv_2=(Token)match(input,16,FollowSets000.FOLLOW_20); if (state.failed) return current;
                            	    if ( state.backtracking==0 ) {

                            	          	newLeafNode(otherlv_2, grammarAccess.getXFunctionTypeRefAccess().getCommaKeyword_0_1_1_0());
                            	          
                            	    }
                            	    // InternalXcore.g:8874:1: ( (lv_paramTypes_3_0= ruleJvmTypeReference ) )
                            	    // InternalXcore.g:8875:1: (lv_paramTypes_3_0= ruleJvmTypeReference )
                            	    {
                            	    // InternalXcore.g:8875:1: (lv_paramTypes_3_0= ruleJvmTypeReference )
                            	    // InternalXcore.g:8876:3: lv_paramTypes_3_0= ruleJvmTypeReference
                            	    {
                            	    if ( state.backtracking==0 ) {
                            	       
                            	      	        newCompositeNode(grammarAccess.getXFunctionTypeRefAccess().getParamTypesJvmTypeReferenceParserRuleCall_0_1_1_1_0()); 
                            	      	    
                            	    }
                            	    pushFollow(FollowSets000.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,FollowSets000.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,FollowSets000.FOLLOW_20); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getXFunctionTypeRefAccess().getEqualsSignGreaterThanSignKeyword_1());
                  
            }
            // InternalXcore.g:8900:1: ( (lv_returnType_6_0= ruleJvmTypeReference ) )
            // InternalXcore.g:8901:1: (lv_returnType_6_0= ruleJvmTypeReference )
            {
            // InternalXcore.g:8901:1: (lv_returnType_6_0= ruleJvmTypeReference )
            // InternalXcore.g:8902:3: lv_returnType_6_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getXFunctionTypeRefAccess().getReturnTypeJvmTypeReferenceParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FollowSets000.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:8926: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:8927:2: (iv_ruleJvmParameterizedTypeReference= ruleJvmParameterizedTypeReference EOF )
            // InternalXcore.g:8928:2: iv_ruleJvmParameterizedTypeReference= ruleJvmParameterizedTypeReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleJvmParameterizedTypeReference=ruleJvmParameterizedTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmParameterizedTypeReference; 
            }
            match(input,EOF,FollowSets000.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:8935: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:8938:28: ( ( ( ( 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:8939:1: ( ( ( 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:8939:1: ( ( ( 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:8939: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:8939:2: ( ( ruleQualifiedName ) )
            // InternalXcore.g:8940:1: ( ruleQualifiedName )
            {
            // InternalXcore.g:8940:1: ( ruleQualifiedName )
            // InternalXcore.g:8941:3: ruleQualifiedName
            {
            if ( state.backtracking==0 ) {

              			if (current==null) {
              	            current = createModelElement(grammarAccess.getJvmParameterizedTypeReferenceRule());
              	        }
                      
            }
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getTypeJvmTypeCrossReference_0_0()); 
              	    
            }
            pushFollow(FollowSets000.FOLLOW_71);
            ruleQualifiedName();

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

            }


            }

            // InternalXcore.g:8954:2: ( ( ( '<' )=>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:8954: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= '>' )? )*
                    {
                    // InternalXcore.g:8954:3: ( ( '<' )=>otherlv_1= '<' )
                    // InternalXcore.g:8954:4: ( '<' )=>otherlv_1= '<'
                    {
                    otherlv_1=(Token)match(input,23,FollowSets000.FOLLOW_95); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_1, grammarAccess.getJvmParameterizedTypeReferenceAccess().getLessThanSignKeyword_1_0());
                          
                    }

                    }

                    // InternalXcore.g:8959:2: ( (lv_arguments_2_0= ruleJvmArgumentTypeReference ) )
                    // InternalXcore.g:8960:1: (lv_arguments_2_0= ruleJvmArgumentTypeReference )
                    {
                    // InternalXcore.g:8960:1: (lv_arguments_2_0= ruleJvmArgumentTypeReference )
                    // InternalXcore.g:8961:3: lv_arguments_2_0= ruleJvmArgumentTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:8977:2: (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:8977:4: otherlv_3= ',' ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) )
                    	    {
                    	    otherlv_3=(Token)match(input,16,FollowSets000.FOLLOW_95); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_3, grammarAccess.getJvmParameterizedTypeReferenceAccess().getCommaKeyword_1_2_0());
                    	          
                    	    }
                    	    // InternalXcore.g:8981:1: ( (lv_arguments_4_0= ruleJvmArgumentTypeReference ) )
                    	    // InternalXcore.g:8982:1: (lv_arguments_4_0= ruleJvmArgumentTypeReference )
                    	    {
                    	    // InternalXcore.g:8982:1: (lv_arguments_4_0= ruleJvmArgumentTypeReference )
                    	    // InternalXcore.g:8983:3: lv_arguments_4_0= ruleJvmArgumentTypeReference
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_2_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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,FollowSets000.FOLLOW_74); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                          	newLeafNode(otherlv_5, grammarAccess.getJvmParameterizedTypeReferenceAccess().getGreaterThanSignKeyword_1_3());
                          
                    }
                    // InternalXcore.g:9003:1: ( ( ( ( () '.' ) )=> ( () 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:9003:2: ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) ) ( ( ruleValidID ) ) ( ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>' )?
                    	    {
                    	    // InternalXcore.g:9003:2: ( ( ( () '.' ) )=> ( () otherlv_7= '.' ) )
                    	    // InternalXcore.g:9003:3: ( ( () '.' ) )=> ( () otherlv_7= '.' )
                    	    {
                    	    // InternalXcore.g:9005:5: ( () otherlv_7= '.' )
                    	    // InternalXcore.g:9005:6: () otherlv_7= '.'
                    	    {
                    	    // InternalXcore.g:9005:6: ()
                    	    // InternalXcore.g:9006:5: 
                    	    {
                    	    if ( state.backtracking==0 ) {

                    	              current = forceCreateModelElementAndSet(
                    	                  grammarAccess.getJvmParameterizedTypeReferenceAccess().getJvmInnerTypeReferenceOuterAction_1_4_0_0_0(),
                    	                  current);
                    	          
                    	    }

                    	    }

                    	    otherlv_7=(Token)match(input,67,FollowSets000.FOLLOW_4); if (state.failed) return current;
                    	    if ( state.backtracking==0 ) {

                    	          	newLeafNode(otherlv_7, grammarAccess.getJvmParameterizedTypeReferenceAccess().getFullStopKeyword_1_4_0_0_1());
                    	          
                    	    }

                    	    }


                    	    }

                    	    // InternalXcore.g:9015:3: ( ( ruleValidID ) )
                    	    // InternalXcore.g:9016:1: ( ruleValidID )
                    	    {
                    	    // InternalXcore.g:9016:1: ( ruleValidID )
                    	    // InternalXcore.g:9017:3: 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(FollowSets000.FOLLOW_129);
                    	    ruleValidID();

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

                    	    }


                    	    }

                    	    // InternalXcore.g:9030:2: ( ( ( '<' )=>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:9030:3: ( ( '<' )=>otherlv_9= '<' ) ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) ) )* otherlv_13= '>'
                    	            {
                    	            // InternalXcore.g:9030:3: ( ( '<' )=>otherlv_9= '<' )
                    	            // InternalXcore.g:9030:4: ( '<' )=>otherlv_9= '<'
                    	            {
                    	            otherlv_9=(Token)match(input,23,FollowSets000.FOLLOW_95); if (state.failed) return current;
                    	            if ( state.backtracking==0 ) {

                    	                  	newLeafNode(otherlv_9, grammarAccess.getJvmParameterizedTypeReferenceAccess().getLessThanSignKeyword_1_4_2_0());
                    	                  
                    	            }

                    	            }

                    	            // InternalXcore.g:9035:2: ( (lv_arguments_10_0= ruleJvmArgumentTypeReference ) )
                    	            // InternalXcore.g:9036:1: (lv_arguments_10_0= ruleJvmArgumentTypeReference )
                    	            {
                    	            // InternalXcore.g:9036:1: (lv_arguments_10_0= ruleJvmArgumentTypeReference )
                    	            // InternalXcore.g:9037:3: lv_arguments_10_0= ruleJvmArgumentTypeReference
                    	            {
                    	            if ( state.backtracking==0 ) {
                    	               
                    	              	        newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_4_2_1_0()); 
                    	              	    
                    	            }
                    	            pushFollow(FollowSets000.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:9053:2: (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:9053:4: otherlv_11= ',' ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) )
                    	            	    {
                    	            	    otherlv_11=(Token)match(input,16,FollowSets000.FOLLOW_95); if (state.failed) return current;
                    	            	    if ( state.backtracking==0 ) {

                    	            	          	newLeafNode(otherlv_11, grammarAccess.getJvmParameterizedTypeReferenceAccess().getCommaKeyword_1_4_2_2_0());
                    	            	          
                    	            	    }
                    	            	    // InternalXcore.g:9057:1: ( (lv_arguments_12_0= ruleJvmArgumentTypeReference ) )
                    	            	    // InternalXcore.g:9058:1: (lv_arguments_12_0= ruleJvmArgumentTypeReference )
                    	            	    {
                    	            	    // InternalXcore.g:9058:1: (lv_arguments_12_0= ruleJvmArgumentTypeReference )
                    	            	    // InternalXcore.g:9059:3: lv_arguments_12_0= ruleJvmArgumentTypeReference
                    	            	    {
                    	            	    if ( state.backtracking==0 ) {
                    	            	       
                    	            	      	        newCompositeNode(grammarAccess.getJvmParameterizedTypeReferenceAccess().getArgumentsJvmArgumentTypeReferenceParserRuleCall_1_4_2_2_1_0()); 
                    	            	      	    
                    	            	    }
                    	            	    pushFollow(FollowSets000.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,FollowSets000.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:9087: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:9088:2: (iv_ruleJvmArgumentTypeReference= ruleJvmArgumentTypeReference EOF )
            // InternalXcore.g:9089:2: iv_ruleJvmArgumentTypeReference= ruleJvmArgumentTypeReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmArgumentTypeReferenceRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleJvmArgumentTypeReference=ruleJvmArgumentTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmArgumentTypeReference; 
            }
            match(input,EOF,FollowSets000.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:9096: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:9099:28: ( (this_JvmTypeReference_0= ruleJvmTypeReference | this_JvmWildcardTypeReference_1= ruleJvmWildcardTypeReference ) )
            // InternalXcore.g:9100:1: (this_JvmTypeReference_0= ruleJvmTypeReference | this_JvmWildcardTypeReference_1= ruleJvmWildcardTypeReference )
            {
            // InternalXcore.g:9100:1: (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:9101:5: this_JvmTypeReference_0= ruleJvmTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getJvmArgumentTypeReferenceAccess().getJvmTypeReferenceParserRuleCall_0()); 
                          
                    }
                    pushFollow(FollowSets000.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:9111:5: this_JvmWildcardTypeReference_1= ruleJvmWildcardTypeReference
                    {
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getJvmArgumentTypeReferenceAccess().getJvmWildcardTypeReferenceParserRuleCall_1()); 
                          
                    }
                    pushFollow(FollowSets000.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:9127: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:9128:2: (iv_ruleJvmWildcardTypeReference= ruleJvmWildcardTypeReference EOF )
            // InternalXcore.g:9129:2: iv_ruleJvmWildcardTypeReference= ruleJvmWildcardTypeReference EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleJvmWildcardTypeReference=ruleJvmWildcardTypeReference();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmWildcardTypeReference; 
            }
            match(input,EOF,FollowSets000.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:9136: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:9139:28: ( ( () otherlv_1= '?' ( ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) ( (lv_constraints_3_0= ruleJvmUpperBoundAnded ) )* ) | ( ( (lv_constraints_4_0= ruleJvmLowerBound ) ) ( (lv_constraints_5_0= ruleJvmLowerBoundAnded ) )* ) )? ) )
            // InternalXcore.g:9140:1: ( () otherlv_1= '?' ( ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) ( (lv_constraints_3_0= ruleJvmUpperBoundAnded ) )* ) | ( ( (lv_constraints_4_0= ruleJvmLowerBound ) ) ( (lv_constraints_5_0= ruleJvmLowerBoundAnded ) )* ) )? )
            {
            // InternalXcore.g:9140:1: ( () otherlv_1= '?' ( ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) ( (lv_constraints_3_0= ruleJvmUpperBoundAnded ) )* ) | ( ( (lv_constraints_4_0= ruleJvmLowerBound ) ) ( (lv_constraints_5_0= ruleJvmLowerBoundAnded ) )* ) )? )
            // InternalXcore.g:9140: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:9140:2: ()
            // InternalXcore.g:9141:5: 
            {
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getJvmWildcardTypeReferenceAccess().getJvmWildcardTypeReferenceAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,60,FollowSets000.FOLLOW_73); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getJvmWildcardTypeReferenceAccess().getQuestionMarkKeyword_1());
                  
            }
            // InternalXcore.g:9150:1: ( ( ( (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:9150:2: ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) ( (lv_constraints_3_0= ruleJvmUpperBoundAnded ) )* )
                    {
                    // InternalXcore.g:9150:2: ( ( (lv_constraints_2_0= ruleJvmUpperBound ) ) ( (lv_constraints_3_0= ruleJvmUpperBoundAnded ) )* )
                    // InternalXcore.g:9150:3: ( (lv_constraints_2_0= ruleJvmUpperBound ) ) ( (lv_constraints_3_0= ruleJvmUpperBoundAnded ) )*
                    {
                    // InternalXcore.g:9150:3: ( (lv_constraints_2_0= ruleJvmUpperBound ) )
                    // InternalXcore.g:9151:1: (lv_constraints_2_0= ruleJvmUpperBound )
                    {
                    // InternalXcore.g:9151:1: (lv_constraints_2_0= ruleJvmUpperBound )
                    // InternalXcore.g:9152:3: lv_constraints_2_0= ruleJvmUpperBound
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmUpperBoundParserRuleCall_2_0_0_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:9168:2: ( (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:9169:1: (lv_constraints_3_0= ruleJvmUpperBoundAnded )
                    	    {
                    	    // InternalXcore.g:9169:1: (lv_constraints_3_0= ruleJvmUpperBoundAnded )
                    	    // InternalXcore.g:9170:3: lv_constraints_3_0= ruleJvmUpperBoundAnded
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmUpperBoundAndedParserRuleCall_2_0_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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:9187:6: ( ( (lv_constraints_4_0= ruleJvmLowerBound ) ) ( (lv_constraints_5_0= ruleJvmLowerBoundAnded ) )* )
                    {
                    // InternalXcore.g:9187:6: ( ( (lv_constraints_4_0= ruleJvmLowerBound ) ) ( (lv_constraints_5_0= ruleJvmLowerBoundAnded ) )* )
                    // InternalXcore.g:9187:7: ( (lv_constraints_4_0= ruleJvmLowerBound ) ) ( (lv_constraints_5_0= ruleJvmLowerBoundAnded ) )*
                    {
                    // InternalXcore.g:9187:7: ( (lv_constraints_4_0= ruleJvmLowerBound ) )
                    // InternalXcore.g:9188:1: (lv_constraints_4_0= ruleJvmLowerBound )
                    {
                    // InternalXcore.g:9188:1: (lv_constraints_4_0= ruleJvmLowerBound )
                    // InternalXcore.g:9189:3: lv_constraints_4_0= ruleJvmLowerBound
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmLowerBoundParserRuleCall_2_1_0_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:9205:2: ( (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:9206:1: (lv_constraints_5_0= ruleJvmLowerBoundAnded )
                    	    {
                    	    // InternalXcore.g:9206:1: (lv_constraints_5_0= ruleJvmLowerBoundAnded )
                    	    // InternalXcore.g:9207:3: lv_constraints_5_0= ruleJvmLowerBoundAnded
                    	    {
                    	    if ( state.backtracking==0 ) {
                    	       
                    	      	        newCompositeNode(grammarAccess.getJvmWildcardTypeReferenceAccess().getConstraintsJvmLowerBoundAndedParserRuleCall_2_1_1_0()); 
                    	      	    
                    	    }
                    	    pushFollow(FollowSets000.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:9231: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:9232:2: (iv_ruleJvmUpperBound= ruleJvmUpperBound EOF )
            // InternalXcore.g:9233:2: iv_ruleJvmUpperBound= ruleJvmUpperBound EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmUpperBoundRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleJvmUpperBound=ruleJvmUpperBound();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmUpperBound; 
            }
            match(input,EOF,FollowSets000.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:9240: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:9243:28: ( (otherlv_0= 'extends' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) )
            // InternalXcore.g:9244:1: (otherlv_0= 'extends' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            {
            // InternalXcore.g:9244:1: (otherlv_0= 'extends' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            // InternalXcore.g:9244:3: otherlv_0= 'extends' ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            {
            otherlv_0=(Token)match(input,35,FollowSets000.FOLLOW_20); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getJvmUpperBoundAccess().getExtendsKeyword_0());
                  
            }
            // InternalXcore.g:9248:1: ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            // InternalXcore.g:9249:1: (lv_typeReference_1_0= ruleJvmTypeReference )
            {
            // InternalXcore.g:9249:1: (lv_typeReference_1_0= ruleJvmTypeReference )
            // InternalXcore.g:9250:3: lv_typeReference_1_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getJvmUpperBoundAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FollowSets000.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:9274: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:9275:2: (iv_ruleJvmUpperBoundAnded= ruleJvmUpperBoundAnded EOF )
            // InternalXcore.g:9276:2: iv_ruleJvmUpperBoundAnded= ruleJvmUpperBoundAnded EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmUpperBoundAndedRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleJvmUpperBoundAnded=ruleJvmUpperBoundAnded();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmUpperBoundAnded; 
            }
            match(input,EOF,FollowSets000.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:9283: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:9286:28: ( (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) )
            // InternalXcore.g:9287:1: (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            {
            // InternalXcore.g:9287:1: (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            // InternalXcore.g:9287:3: otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            {
            otherlv_0=(Token)match(input,58,FollowSets000.FOLLOW_20); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getJvmUpperBoundAndedAccess().getAmpersandKeyword_0());
                  
            }
            // InternalXcore.g:9291:1: ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            // InternalXcore.g:9292:1: (lv_typeReference_1_0= ruleJvmTypeReference )
            {
            // InternalXcore.g:9292:1: (lv_typeReference_1_0= ruleJvmTypeReference )
            // InternalXcore.g:9293:3: lv_typeReference_1_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getJvmUpperBoundAndedAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FollowSets000.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:9317: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:9318:2: (iv_ruleJvmLowerBound= ruleJvmLowerBound EOF )
            // InternalXcore.g:9319:2: iv_ruleJvmLowerBound= ruleJvmLowerBound EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmLowerBoundRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleJvmLowerBound=ruleJvmLowerBound();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmLowerBound; 
            }
            match(input,EOF,FollowSets000.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:9326: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:9329:28: ( (otherlv_0= 'super' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) )
            // InternalXcore.g:9330:1: (otherlv_0= 'super' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            {
            // InternalXcore.g:9330:1: (otherlv_0= 'super' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            // InternalXcore.g:9330:3: otherlv_0= 'super' ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            {
            otherlv_0=(Token)match(input,66,FollowSets000.FOLLOW_20); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getJvmLowerBoundAccess().getSuperKeyword_0());
                  
            }
            // InternalXcore.g:9334:1: ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            // InternalXcore.g:9335:1: (lv_typeReference_1_0= ruleJvmTypeReference )
            {
            // InternalXcore.g:9335:1: (lv_typeReference_1_0= ruleJvmTypeReference )
            // InternalXcore.g:9336:3: lv_typeReference_1_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getJvmLowerBoundAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FollowSets000.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:9360: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:9361:2: (iv_ruleJvmLowerBoundAnded= ruleJvmLowerBoundAnded EOF )
            // InternalXcore.g:9362:2: iv_ruleJvmLowerBoundAnded= ruleJvmLowerBoundAnded EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getJvmLowerBoundAndedRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleJvmLowerBoundAnded=ruleJvmLowerBoundAnded();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleJvmLowerBoundAnded; 
            }
            match(input,EOF,FollowSets000.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:9369: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:9372:28: ( (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) ) )
            // InternalXcore.g:9373:1: (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            {
            // InternalXcore.g:9373:1: (otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) ) )
            // InternalXcore.g:9373:3: otherlv_0= '&' ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            {
            otherlv_0=(Token)match(input,58,FollowSets000.FOLLOW_20); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getJvmLowerBoundAndedAccess().getAmpersandKeyword_0());
                  
            }
            // InternalXcore.g:9377:1: ( (lv_typeReference_1_0= ruleJvmTypeReference ) )
            // InternalXcore.g:9378:1: (lv_typeReference_1_0= ruleJvmTypeReference )
            {
            // InternalXcore.g:9378:1: (lv_typeReference_1_0= ruleJvmTypeReference )
            // InternalXcore.g:9379:3: lv_typeReference_1_0= ruleJvmTypeReference
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getJvmLowerBoundAndedAccess().getTypeReferenceJvmTypeReferenceParserRuleCall_1_0()); 
              	    
            }
            pushFollow(FollowSets000.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:9405: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:9406:2: (iv_ruleQualifiedNameWithWildcard= ruleQualifiedNameWithWildcard EOF )
            // InternalXcore.g:9407:2: iv_ruleQualifiedNameWithWildcard= ruleQualifiedNameWithWildcard EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getQualifiedNameWithWildcardRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleQualifiedNameWithWildcard=ruleQualifiedNameWithWildcard();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleQualifiedNameWithWildcard.getText(); 
            }
            match(input,EOF,FollowSets000.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:9414: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:9417:28: ( (this_QualifiedName_0= ruleQualifiedName kw= '.' kw= '*' ) )
            // InternalXcore.g:9418:1: (this_QualifiedName_0= ruleQualifiedName kw= '.' kw= '*' )
            {
            // InternalXcore.g:9418:1: (this_QualifiedName_0= ruleQualifiedName kw= '.' kw= '*' )
            // InternalXcore.g:9419:5: this_QualifiedName_0= ruleQualifiedName kw= '.' kw= '*'
            {
            if ( state.backtracking==0 ) {
               
                      newCompositeNode(grammarAccess.getQualifiedNameWithWildcardAccess().getQualifiedNameParserRuleCall_0()); 
                  
            }
            pushFollow(FollowSets000.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,FollowSets000.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,FollowSets000.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:9451: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:9452:2: (iv_ruleXImportDeclaration= ruleXImportDeclaration EOF )
            // InternalXcore.g:9453:2: iv_ruleXImportDeclaration= ruleXImportDeclaration EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getXImportDeclarationRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleXImportDeclaration=ruleXImportDeclaration();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleXImportDeclaration; 
            }
            match(input,EOF,FollowSets000.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:9460: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:9463:28: ( (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:9464:1: (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:9464:1: (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:9464: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,FollowSets000.FOLLOW_132); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_0, grammarAccess.getXImportDeclarationAccess().getImportKeyword_0());
                  
            }
            // InternalXcore.g:9468:1: ( ( ( (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:9468:2: ( ( (lv_static_1_0= 'static' ) ) ( (lv_extension_2_0= 'extension' ) )? ( ( ruleQualifiedNameInStaticImport ) ) ( ( (lv_wildcard_4_0= '*' ) ) | ( (lv_memberName_5_0= ruleValidID ) ) ) )
                    {
                    // InternalXcore.g:9468:2: ( ( (lv_static_1_0= 'static' ) ) ( (lv_extension_2_0= 'extension' ) )? ( ( ruleQualifiedNameInStaticImport ) ) ( ( (lv_wildcard_4_0= '*' ) ) | ( (lv_memberName_5_0= ruleValidID ) ) ) )
                    // InternalXcore.g:9468:3: ( (lv_static_1_0= 'static' ) ) ( (lv_extension_2_0= 'extension' ) )? ( ( ruleQualifiedNameInStaticImport ) ) ( ( (lv_wildcard_4_0= '*' ) ) | ( (lv_memberName_5_0= ruleValidID ) ) )
                    {
                    // InternalXcore.g:9468:3: ( (lv_static_1_0= 'static' ) )
                    // InternalXcore.g:9469:1: (lv_static_1_0= 'static' )
                    {
                    // InternalXcore.g:9469:1: (lv_static_1_0= 'static' )
                    // InternalXcore.g:9470:3: lv_static_1_0= 'static'
                    {
                    lv_static_1_0=(Token)match(input,69,FollowSets000.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", true, "static");
                      	    
                    }

                    }


                    }

                    // InternalXcore.g:9483:2: ( (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:9484:1: (lv_extension_2_0= 'extension' )
                            {
                            // InternalXcore.g:9484:1: (lv_extension_2_0= 'extension' )
                            // InternalXcore.g:9485:3: lv_extension_2_0= 'extension'
                            {
                            lv_extension_2_0=(Token)match(input,68,FollowSets000.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", true, "extension");
                              	    
                            }

                            }


                            }
                            break;

                    }

                    // InternalXcore.g:9498:3: ( ( ruleQualifiedNameInStaticImport ) )
                    // InternalXcore.g:9499:1: ( ruleQualifiedNameInStaticImport )
                    {
                    // InternalXcore.g:9499:1: ( ruleQualifiedNameInStaticImport )
                    // InternalXcore.g:9500:3: 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(FollowSets000.FOLLOW_134);
                    ruleQualifiedNameInStaticImport();

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

                    }


                    }

                    // InternalXcore.g:9513:2: ( ( (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:9513:3: ( (lv_wildcard_4_0= '*' ) )
                            {
                            // InternalXcore.g:9513:3: ( (lv_wildcard_4_0= '*' ) )
                            // InternalXcore.g:9514:1: (lv_wildcard_4_0= '*' )
                            {
                            // InternalXcore.g:9514:1: (lv_wildcard_4_0= '*' )
                            // InternalXcore.g:9515:3: lv_wildcard_4_0= '*'
                            {
                            lv_wildcard_4_0=(Token)match(input,61,FollowSets000.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", true, "*");
                              	    
                            }

                            }


                            }


                            }
                            break;
                        case 2 :
                            // InternalXcore.g:9529:6: ( (lv_memberName_5_0= ruleValidID ) )
                            {
                            // InternalXcore.g:9529:6: ( (lv_memberName_5_0= ruleValidID ) )
                            // InternalXcore.g:9530:1: (lv_memberName_5_0= ruleValidID )
                            {
                            // InternalXcore.g:9530:1: (lv_memberName_5_0= ruleValidID )
                            // InternalXcore.g:9531:3: lv_memberName_5_0= ruleValidID
                            {
                            if ( state.backtracking==0 ) {
                               
                              	        newCompositeNode(grammarAccess.getXImportDeclarationAccess().getMemberNameValidIDParserRuleCall_1_0_3_1_0()); 
                              	    
                            }
                            pushFollow(FollowSets000.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:9548:6: ( ( ruleQualifiedName ) )
                    {
                    // InternalXcore.g:9548:6: ( ( ruleQualifiedName ) )
                    // InternalXcore.g:9549:1: ( ruleQualifiedName )
                    {
                    // InternalXcore.g:9549:1: ( ruleQualifiedName )
                    // InternalXcore.g:9550:3: ruleQualifiedName
                    {
                    if ( state.backtracking==0 ) {

                      			if (current==null) {
                      	            current = createModelElement(grammarAccess.getXImportDeclarationRule());
                      	        }
                              
                    }
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXImportDeclarationAccess().getImportedTypeJvmDeclaredTypeCrossReference_1_1_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.FOLLOW_135);
                    ruleQualifiedName();

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

                    }


                    }


                    }
                    break;
                case 3 :
                    // InternalXcore.g:9564:6: ( (lv_importedNamespace_7_0= ruleQualifiedNameWithWildcard ) )
                    {
                    // InternalXcore.g:9564:6: ( (lv_importedNamespace_7_0= ruleQualifiedNameWithWildcard ) )
                    // InternalXcore.g:9565:1: (lv_importedNamespace_7_0= ruleQualifiedNameWithWildcard )
                    {
                    // InternalXcore.g:9565:1: (lv_importedNamespace_7_0= ruleQualifiedNameWithWildcard )
                    // InternalXcore.g:9566:3: lv_importedNamespace_7_0= ruleQualifiedNameWithWildcard
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getXImportDeclarationAccess().getImportedNamespaceQualifiedNameWithWildcardParserRuleCall_1_2_0()); 
                      	    
                    }
                    pushFollow(FollowSets000.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:9582:3: (otherlv_8= ';' )?
            int alt186=2;
            int LA186_0 = input.LA(1);

            if ( (LA186_0==65) ) {
                alt186=1;
            }
            switch (alt186) {
                case 1 :
                    // InternalXcore.g:9582:5: otherlv_8= ';'
                    {
                    otherlv_8=(Token)match(input,65,FollowSets000.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:9594: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:9595:2: (iv_ruleQualifiedNameInStaticImport= ruleQualifiedNameInStaticImport EOF )
            // InternalXcore.g:9596:2: iv_ruleQualifiedNameInStaticImport= ruleQualifiedNameInStaticImport EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getQualifiedNameInStaticImportRule()); 
            }
            pushFollow(FollowSets000.FOLLOW_1);
            iv_ruleQualifiedNameInStaticImport=ruleQualifiedNameInStaticImport();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleQualifiedNameInStaticImport.getText(); 
            }
            match(input,EOF,FollowSets000.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:9603: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:9606:28: ( (this_ValidID_0= ruleValidID kw= '.' )+ )
            // InternalXcore.g:9607:1: (this_ValidID_0= ruleValidID kw= '.' )+
            {
            // InternalXcore.g:9607:1: (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:9608:5: this_ValidID_0= ruleValidID kw= '.'
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	              newCompositeNode(grammarAccess.getQualifiedNameInStaticImportAccess().getValidIDParserRuleCall_0()); 
            	          
            	    }
            	    pushFollow(FollowSets000.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,FollowSets000.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:144:4: ( ( 'annotation' ( ( RULE_STRING ) ) ) )
        // InternalXcore.g:144:5: ( 'annotation' ( ( RULE_STRING ) ) )
        {
        // InternalXcore.g:144:5: ( 'annotation' ( ( RULE_STRING ) ) )
        // InternalXcore.g:144:7: 'annotation' ( ( RULE_STRING ) )
        {
        match(input,20,FollowSets000.FOLLOW_12); if (state.failed) return ;
        // InternalXcore.g:145:1: ( ( RULE_STRING ) )
        // InternalXcore.g:146:1: ( RULE_STRING )
        {
        // InternalXcore.g:146:1: ( RULE_STRING )
        // InternalXcore.g:147:1: RULE_STRING
        {
        match(input,RULE_STRING,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred1_InternalXcore

    // $ANTLR start synpred3_InternalXcore
    public final void synpred3_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:3223:4: ( '<' )
        // InternalXcore.g:3223:6: '<'
        {
        match(input,23,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred3_InternalXcore

    // $ANTLR start synpred4_InternalXcore
    public final void synpred4_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:3889:3: ( ( () ( ( ruleOpMultiAssign ) ) ) )
        // InternalXcore.g:3889:4: ( () ( ( ruleOpMultiAssign ) ) )
        {
        // InternalXcore.g:3889:4: ( () ( ( ruleOpMultiAssign ) ) )
        // InternalXcore.g:3889:5: () ( ( ruleOpMultiAssign ) )
        {
        // InternalXcore.g:3889:5: ()
        // InternalXcore.g:3890:1: 
        {
        }

        // InternalXcore.g:3890:2: ( ( ruleOpMultiAssign ) )
        // InternalXcore.g:3891:1: ( ruleOpMultiAssign )
        {
        // InternalXcore.g:3891:1: ( ruleOpMultiAssign )
        // InternalXcore.g:3892:3: ruleOpMultiAssign
        {
        pushFollow(FollowSets000.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:4083:3: ( ( () ( ( ruleOpOr ) ) ) )
        // InternalXcore.g:4083:4: ( () ( ( ruleOpOr ) ) )
        {
        // InternalXcore.g:4083:4: ( () ( ( ruleOpOr ) ) )
        // InternalXcore.g:4083:5: () ( ( ruleOpOr ) )
        {
        // InternalXcore.g:4083:5: ()
        // InternalXcore.g:4084:1: 
        {
        }

        // InternalXcore.g:4084:2: ( ( ruleOpOr ) )
        // InternalXcore.g:4085:1: ( ruleOpOr )
        {
        // InternalXcore.g:4085:1: ( ruleOpOr )
        // InternalXcore.g:4086:3: ruleOpOr
        {
        pushFollow(FollowSets000.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:4184:3: ( ( () ( ( ruleOpAnd ) ) ) )
        // InternalXcore.g:4184:4: ( () ( ( ruleOpAnd ) ) )
        {
        // InternalXcore.g:4184:4: ( () ( ( ruleOpAnd ) ) )
        // InternalXcore.g:4184:5: () ( ( ruleOpAnd ) )
        {
        // InternalXcore.g:4184:5: ()
        // InternalXcore.g:4185:1: 
        {
        }

        // InternalXcore.g:4185:2: ( ( ruleOpAnd ) )
        // InternalXcore.g:4186:1: ( ruleOpAnd )
        {
        // InternalXcore.g:4186:1: ( ruleOpAnd )
        // InternalXcore.g:4187:3: ruleOpAnd
        {
        pushFollow(FollowSets000.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:4285:3: ( ( () ( ( ruleOpEquality ) ) ) )
        // InternalXcore.g:4285:4: ( () ( ( ruleOpEquality ) ) )
        {
        // InternalXcore.g:4285:4: ( () ( ( ruleOpEquality ) ) )
        // InternalXcore.g:4285:5: () ( ( ruleOpEquality ) )
        {
        // InternalXcore.g:4285:5: ()
        // InternalXcore.g:4286:1: 
        {
        }

        // InternalXcore.g:4286:2: ( ( ruleOpEquality ) )
        // InternalXcore.g:4287:1: ( ruleOpEquality )
        {
        // InternalXcore.g:4287:1: ( ruleOpEquality )
        // InternalXcore.g:4288:3: ruleOpEquality
        {
        pushFollow(FollowSets000.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:4407:4: ( ( () 'instanceof' ) )
        // InternalXcore.g:4407:5: ( () 'instanceof' )
        {
        // InternalXcore.g:4407:5: ( () 'instanceof' )
        // InternalXcore.g:4407:6: () 'instanceof'
        {
        // InternalXcore.g:4407:6: ()
        // InternalXcore.g:4408:1: 
        {
        }

        match(input,82,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred8_InternalXcore

    // $ANTLR start synpred9_InternalXcore
    public final void synpred9_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:4438:8: ( ( () ( ( ruleOpCompare ) ) ) )
        // InternalXcore.g:4438:9: ( () ( ( ruleOpCompare ) ) )
        {
        // InternalXcore.g:4438:9: ( () ( ( ruleOpCompare ) ) )
        // InternalXcore.g:4438:10: () ( ( ruleOpCompare ) )
        {
        // InternalXcore.g:4438:10: ()
        // InternalXcore.g:4439:1: 
        {
        }

        // InternalXcore.g:4439:2: ( ( ruleOpCompare ) )
        // InternalXcore.g:4440:1: ( ruleOpCompare )
        {
        // InternalXcore.g:4440:1: ( ruleOpCompare )
        // InternalXcore.g:4441:3: ruleOpCompare
        {
        pushFollow(FollowSets000.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:4566:3: ( ( () ( ( ruleOpOther ) ) ) )
        // InternalXcore.g:4566:4: ( () ( ( ruleOpOther ) ) )
        {
        // InternalXcore.g:4566:4: ( () ( ( ruleOpOther ) ) )
        // InternalXcore.g:4566:5: () ( ( ruleOpOther ) )
        {
        // InternalXcore.g:4566:5: ()
        // InternalXcore.g:4567:1: 
        {
        }

        // InternalXcore.g:4567:2: ( ( ruleOpOther ) )
        // InternalXcore.g:4568:1: ( ruleOpOther )
        {
        // InternalXcore.g:4568:1: ( ruleOpOther )
        // InternalXcore.g:4569:3: ruleOpOther
        {
        pushFollow(FollowSets000.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:4678:3: ( ( '>' '>' ) )
        // InternalXcore.g:4678:4: ( '>' '>' )
        {
        // InternalXcore.g:4678:4: ( '>' '>' )
        // InternalXcore.g:4679:2: '>' '>'
        {
        match(input,24,FollowSets000.FOLLOW_86); if (state.failed) return ;
        match(input,24,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred11_InternalXcore

    // $ANTLR start synpred12_InternalXcore
    public final void synpred12_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:4708:3: ( ( '<' '<' ) )
        // InternalXcore.g:4708:4: ( '<' '<' )
        {
        // InternalXcore.g:4708:4: ( '<' '<' )
        // InternalXcore.g:4709:2: '<' '<'
        {
        match(input,23,FollowSets000.FOLLOW_77); if (state.failed) return ;
        match(input,23,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred12_InternalXcore

    // $ANTLR start synpred13_InternalXcore
    public final void synpred13_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:4782:3: ( ( () ( ( ruleOpAdd ) ) ) )
        // InternalXcore.g:4782:4: ( () ( ( ruleOpAdd ) ) )
        {
        // InternalXcore.g:4782:4: ( () ( ( ruleOpAdd ) ) )
        // InternalXcore.g:4782:5: () ( ( ruleOpAdd ) )
        {
        // InternalXcore.g:4782:5: ()
        // InternalXcore.g:4783:1: 
        {
        }

        // InternalXcore.g:4783:2: ( ( ruleOpAdd ) )
        // InternalXcore.g:4784:1: ( ruleOpAdd )
        {
        // InternalXcore.g:4784:1: ( ruleOpAdd )
        // InternalXcore.g:4785:3: ruleOpAdd
        {
        pushFollow(FollowSets000.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:4890:3: ( ( () ( ( ruleOpMulti ) ) ) )
        // InternalXcore.g:4890:4: ( () ( ( ruleOpMulti ) ) )
        {
        // InternalXcore.g:4890:4: ( () ( ( ruleOpMulti ) ) )
        // InternalXcore.g:4890:5: () ( ( ruleOpMulti ) )
        {
        // InternalXcore.g:4890:5: ()
        // InternalXcore.g:4891:1: 
        {
        }

        // InternalXcore.g:4891:2: ( ( ruleOpMulti ) )
        // InternalXcore.g:4892:1: ( ruleOpMulti )
        {
        // InternalXcore.g:4892:1: ( ruleOpMulti )
        // InternalXcore.g:4893:3: ruleOpMulti
        {
        pushFollow(FollowSets000.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:5123:3: ( ( () 'as' ) )
        // InternalXcore.g:5123:4: ( () 'as' )
        {
        // InternalXcore.g:5123:4: ( () 'as' )
        // InternalXcore.g:5123:5: () 'as'
        {
        // InternalXcore.g:5123:5: ()
        // InternalXcore.g:5124:1: 
        {
        }

        match(input,21,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred15_InternalXcore

    // $ANTLR start synpred16_InternalXcore
    public final void synpred16_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:5183:2: ( ( () ( ( ruleOpPostfix ) ) ) )
        // InternalXcore.g:5183:3: ( () ( ( ruleOpPostfix ) ) )
        {
        // InternalXcore.g:5183:3: ( () ( ( ruleOpPostfix ) ) )
        // InternalXcore.g:5183:4: () ( ( ruleOpPostfix ) )
        {
        // InternalXcore.g:5183:4: ()
        // InternalXcore.g:5184:1: 
        {
        }

        // InternalXcore.g:5184:2: ( ( ruleOpPostfix ) )
        // InternalXcore.g:5185:1: ( ruleOpPostfix )
        {
        // InternalXcore.g:5185:1: ( ruleOpPostfix )
        // InternalXcore.g:5186:3: ruleOpPostfix
        {
        pushFollow(FollowSets000.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:5273:4: ( ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign ) )
        // InternalXcore.g:5273:5: ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign )
        {
        // InternalXcore.g:5273:5: ( () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign )
        // InternalXcore.g:5273:6: () ( '.' | ( ( '::' ) ) ) ( ( ruleFeatureCallID ) ) ruleOpSingleAssign
        {
        // InternalXcore.g:5273:6: ()
        // InternalXcore.g:5274:1: 
        {
        }

        // InternalXcore.g:5274:2: ( '.' | ( ( '::' ) ) )
        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:5274:4: '.'
                {
                match(input,67,FollowSets000.FOLLOW_93); if (state.failed) return ;

                }
                break;
            case 2 :
                // InternalXcore.g:5276:6: ( ( '::' ) )
                {
                // InternalXcore.g:5276:6: ( ( '::' ) )
                // InternalXcore.g:5277:1: ( '::' )
                {
                // InternalXcore.g:5277:1: ( '::' )
                // InternalXcore.g:5278:2: '::'
                {
                match(input,94,FollowSets000.FOLLOW_93); if (state.failed) return ;

                }


                }


                }
                break;

        }

        // InternalXcore.g:5282:3: ( ( ruleFeatureCallID ) )
        // InternalXcore.g:5283:1: ( ruleFeatureCallID )
        {
        // InternalXcore.g:5283:1: ( ruleFeatureCallID )
        // InternalXcore.g:5284:3: ruleFeatureCallID
        {
        pushFollow(FollowSets000.FOLLOW_11);
        ruleFeatureCallID();

        state._fsp--;
        if (state.failed) return ;

        }


        }

        pushFollow(FollowSets000.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:5354:8: ( ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) ) )
        // InternalXcore.g:5354:9: ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) )
        {
        // InternalXcore.g:5354:9: ( () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) ) )
        // InternalXcore.g:5354:10: () ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) )
        {
        // InternalXcore.g:5354:10: ()
        // InternalXcore.g:5355:1: 
        {
        }

        // InternalXcore.g:5355:2: ( '.' | ( ( '?.' ) ) | ( ( '::' ) ) )
        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:5355:4: '.'
                {
                match(input,67,FollowSets000.FOLLOW_2); if (state.failed) return ;

                }
                break;
            case 2 :
                // InternalXcore.g:5357:6: ( ( '?.' ) )
                {
                // InternalXcore.g:5357:6: ( ( '?.' ) )
                // InternalXcore.g:5358:1: ( '?.' )
                {
                // InternalXcore.g:5358:1: ( '?.' )
                // InternalXcore.g:5359:2: '?.'
                {
                match(input,95,FollowSets000.FOLLOW_2); if (state.failed) return ;

                }


                }


                }
                break;
            case 3 :
                // InternalXcore.g:5364:6: ( ( '::' ) )
                {
                // InternalXcore.g:5364:6: ( ( '::' ) )
                // InternalXcore.g:5365:1: ( '::' )
                {
                // InternalXcore.g:5365:1: ( '::' )
                // InternalXcore.g:5366:2: '::'
                {
                match(input,94,FollowSets000.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:5475:4: ( ( '(' ) )
        // InternalXcore.g:5476:1: ( '(' )
        {
        // InternalXcore.g:5476:1: ( '(' )
        // InternalXcore.g:5477:2: '('
        {
        match(input,15,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred19_InternalXcore

    // $ANTLR start synpred20_InternalXcore
    public final void synpred20_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:5496:4: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )
        // InternalXcore.g:5496:5: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) )
        {
        // InternalXcore.g:5496:5: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) )
        // InternalXcore.g:5496:6: () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) )
        {
        // InternalXcore.g:5496:6: ()
        // InternalXcore.g:5497:1: 
        {
        }

        // InternalXcore.g:5497:2: ( ( ( 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:5497:3: ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )*
                {
                // InternalXcore.g:5497:3: ( ( ruleJvmFormalParameter ) )
                // InternalXcore.g:5498:1: ( ruleJvmFormalParameter )
                {
                // InternalXcore.g:5498:1: ( ruleJvmFormalParameter )
                // InternalXcore.g:5499:1: ruleJvmFormalParameter
                {
                pushFollow(FollowSets000.FOLLOW_105);
                ruleJvmFormalParameter();

                state._fsp--;
                if (state.failed) return ;

                }


                }

                // InternalXcore.g:5501:2: ( ',' ( ( ruleJvmFormalParameter ) ) )*
                loop190:
                do {
                    int alt190=2;
                    int LA190_0 = input.LA(1);

                    if ( (LA190_0==16) ) {
                        alt190=1;
                    }


                    switch (alt190) {
                	case 1 :
                	    // InternalXcore.g:5501:4: ',' ( ( ruleJvmFormalParameter ) )
                	    {
                	    match(input,16,FollowSets000.FOLLOW_20); if (state.failed) return ;
                	    // InternalXcore.g:5502:1: ( ( ruleJvmFormalParameter ) )
                	    // InternalXcore.g:5503:1: ( ruleJvmFormalParameter )
                	    {
                	    // InternalXcore.g:5503:1: ( ruleJvmFormalParameter )
                	    // InternalXcore.g:5504:1: ruleJvmFormalParameter
                	    {
                	    pushFollow(FollowSets000.FOLLOW_105);
                	    ruleJvmFormalParameter();

                	    state._fsp--;
                	    if (state.failed) return ;

                	    }


                	    }


                	    }
                	    break;

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


                }
                break;

        }

        // InternalXcore.g:5506:6: ( ( '|' ) )
        // InternalXcore.g:5507:1: ( '|' )
        {
        // InternalXcore.g:5507:1: ( '|' )
        // InternalXcore.g:5508:2: '|'
        {
        match(input,97,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred20_InternalXcore

    // $ANTLR start synpred21_InternalXcore
    public final void synpred21_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:5575:4: ( ( () '[' ) )
        // InternalXcore.g:5575:5: ( () '[' )
        {
        // InternalXcore.g:5575:5: ( () '[' )
        // InternalXcore.g:5575:6: () '['
        {
        // InternalXcore.g:5575:6: ()
        // InternalXcore.g:5576:1: 
        {
        }

        match(input,59,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred21_InternalXcore

    // $ANTLR start synpred22_InternalXcore
    public final void synpred22_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:5646:7: ( ( () 'synchronized' '(' ) )
        // InternalXcore.g:5646:8: ( () 'synchronized' '(' )
        {
        // InternalXcore.g:5646:8: ( () 'synchronized' '(' )
        // InternalXcore.g:5646:9: () 'synchronized' '('
        {
        // InternalXcore.g:5646:9: ()
        // InternalXcore.g:5647:1: 
        {
        }

        match(input,118,FollowSets000.FOLLOW_56); if (state.failed) return ;
        match(input,15,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred22_InternalXcore

    // $ANTLR start synpred23_InternalXcore
    public final void synpred23_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:5689:7: ( ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' ) )
        // InternalXcore.g:5689:8: ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' )
        {
        // InternalXcore.g:5689:8: ( () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':' )
        // InternalXcore.g:5689:9: () 'for' '(' ( ( ruleJvmFormalParameter ) ) ':'
        {
        // InternalXcore.g:5689:9: ()
        // InternalXcore.g:5690:1: 
        {
        }

        match(input,104,FollowSets000.FOLLOW_56); if (state.failed) return ;
        match(input,15,FollowSets000.FOLLOW_20); if (state.failed) return ;
        // InternalXcore.g:5692:1: ( ( ruleJvmFormalParameter ) )
        // InternalXcore.g:5693:1: ( ruleJvmFormalParameter )
        {
        // InternalXcore.g:5693:1: ( ruleJvmFormalParameter )
        // InternalXcore.g:5694:1: ruleJvmFormalParameter
        {
        pushFollow(FollowSets000.FOLLOW_110);
        ruleJvmFormalParameter();

        state._fsp--;
        if (state.failed) return ;

        }


        }

        match(input,101,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred23_InternalXcore

    // $ANTLR start synpred24_InternalXcore
    public final void synpred24_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:5807:7: ( ( () '[' ) )
        // InternalXcore.g:5807:8: ( () '[' )
        {
        // InternalXcore.g:5807:8: ( () '[' )
        // InternalXcore.g:5807:9: () '['
        {
        // InternalXcore.g:5807:9: ()
        // InternalXcore.g:5808:1: 
        {
        }

        match(input,59,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred24_InternalXcore

    // $ANTLR start synpred26_InternalXcore
    public final void synpred26_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:6099:4: ( ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )
        // InternalXcore.g:6099:5: ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) )
        {
        // InternalXcore.g:6099:5: ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) )
        // InternalXcore.g:6099:6: ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) )
        {
        // InternalXcore.g:6099:6: ( ( ( 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:6099:7: ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )*
                {
                // InternalXcore.g:6099:7: ( ( ruleJvmFormalParameter ) )
                // InternalXcore.g:6100:1: ( ruleJvmFormalParameter )
                {
                // InternalXcore.g:6100:1: ( ruleJvmFormalParameter )
                // InternalXcore.g:6101:1: ruleJvmFormalParameter
                {
                pushFollow(FollowSets000.FOLLOW_105);
                ruleJvmFormalParameter();

                state._fsp--;
                if (state.failed) return ;

                }


                }

                // InternalXcore.g:6103:2: ( ',' ( ( ruleJvmFormalParameter ) ) )*
                loop192:
                do {
                    int alt192=2;
                    int LA192_0 = input.LA(1);

                    if ( (LA192_0==16) ) {
                        alt192=1;
                    }


                    switch (alt192) {
                	case 1 :
                	    // InternalXcore.g:6103:4: ',' ( ( ruleJvmFormalParameter ) )
                	    {
                	    match(input,16,FollowSets000.FOLLOW_20); if (state.failed) return ;
                	    // InternalXcore.g:6104:1: ( ( ruleJvmFormalParameter ) )
                	    // InternalXcore.g:6105:1: ( ruleJvmFormalParameter )
                	    {
                	    // InternalXcore.g:6105:1: ( ruleJvmFormalParameter )
                	    // InternalXcore.g:6106:1: ruleJvmFormalParameter
                	    {
                	    pushFollow(FollowSets000.FOLLOW_105);
                	    ruleJvmFormalParameter();

                	    state._fsp--;
                	    if (state.failed) return ;

                	    }


                	    }


                	    }
                	    break;

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


                }
                break;

        }

        // InternalXcore.g:6108:6: ( ( '|' ) )
        // InternalXcore.g:6109:1: ( '|' )
        {
        // InternalXcore.g:6109:1: ( '|' )
        // InternalXcore.g:6110:2: '|'
        {
        match(input,97,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred26_InternalXcore

    // $ANTLR start synpred28_InternalXcore
    public final void synpred28_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:6469:4: ( 'else' )
        // InternalXcore.g:6469:6: 'else'
        {
        match(input,99,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred28_InternalXcore

    // $ANTLR start synpred29_InternalXcore
    public final void synpred29_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:6523:4: ( ( '(' ( ( ruleJvmFormalParameter ) ) ':' ) )
        // InternalXcore.g:6523:5: ( '(' ( ( ruleJvmFormalParameter ) ) ':' )
        {
        // InternalXcore.g:6523:5: ( '(' ( ( ruleJvmFormalParameter ) ) ':' )
        // InternalXcore.g:6523:7: '(' ( ( ruleJvmFormalParameter ) ) ':'
        {
        match(input,15,FollowSets000.FOLLOW_20); if (state.failed) return ;
        // InternalXcore.g:6524:1: ( ( ruleJvmFormalParameter ) )
        // InternalXcore.g:6525:1: ( ruleJvmFormalParameter )
        {
        // InternalXcore.g:6525:1: ( ruleJvmFormalParameter )
        // InternalXcore.g:6526:1: ruleJvmFormalParameter
        {
        pushFollow(FollowSets000.FOLLOW_110);
        ruleJvmFormalParameter();

        state._fsp--;
        if (state.failed) return ;

        }


        }

        match(input,101,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred29_InternalXcore

    // $ANTLR start synpred30_InternalXcore
    public final void synpred30_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:6578:8: ( ( ( ( ruleJvmFormalParameter ) ) ':' ) )
        // InternalXcore.g:6578:9: ( ( ( ruleJvmFormalParameter ) ) ':' )
        {
        // InternalXcore.g:6578:9: ( ( ( ruleJvmFormalParameter ) ) ':' )
        // InternalXcore.g:6578:10: ( ( ruleJvmFormalParameter ) ) ':'
        {
        // InternalXcore.g:6578:10: ( ( ruleJvmFormalParameter ) )
        // InternalXcore.g:6579:1: ( ruleJvmFormalParameter )
        {
        // InternalXcore.g:6579:1: ( ruleJvmFormalParameter )
        // InternalXcore.g:6580:1: ruleJvmFormalParameter
        {
        pushFollow(FollowSets000.FOLLOW_110);
        ruleJvmFormalParameter();

        state._fsp--;
        if (state.failed) return ;

        }


        }

        match(input,101,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred30_InternalXcore

    // $ANTLR start synpred32_InternalXcore
    public final void synpred32_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:7289:4: ( ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) ) )
        // InternalXcore.g:7289:5: ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) )
        {
        // InternalXcore.g:7289:5: ( ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) ) )
        // InternalXcore.g:7289:6: ( ( ruleJvmTypeReference ) ) ( ( ruleValidID ) )
        {
        // InternalXcore.g:7289:6: ( ( ruleJvmTypeReference ) )
        // InternalXcore.g:7290:1: ( ruleJvmTypeReference )
        {
        // InternalXcore.g:7290:1: ( ruleJvmTypeReference )
        // InternalXcore.g:7291:1: ruleJvmTypeReference
        {
        pushFollow(FollowSets000.FOLLOW_4);
        ruleJvmTypeReference();

        state._fsp--;
        if (state.failed) return ;

        }


        }

        // InternalXcore.g:7293:2: ( ( ruleValidID ) )
        // InternalXcore.g:7294:1: ( ruleValidID )
        {
        // InternalXcore.g:7294:1: ( ruleValidID )
        // InternalXcore.g:7295:1: ruleValidID
        {
        pushFollow(FollowSets000.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:7578:4: ( ( '(' ) )
        // InternalXcore.g:7579:1: ( '(' )
        {
        // InternalXcore.g:7579:1: ( '(' )
        // InternalXcore.g:7580:2: '('
        {
        match(input,15,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred33_InternalXcore

    // $ANTLR start synpred34_InternalXcore
    public final void synpred34_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:7599:4: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )
        // InternalXcore.g:7599:5: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) )
        {
        // InternalXcore.g:7599:5: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) )
        // InternalXcore.g:7599:6: () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) )
        {
        // InternalXcore.g:7599:6: ()
        // InternalXcore.g:7600:1: 
        {
        }

        // InternalXcore.g:7600:2: ( ( ( 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:7600:3: ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )*
                {
                // InternalXcore.g:7600:3: ( ( ruleJvmFormalParameter ) )
                // InternalXcore.g:7601:1: ( ruleJvmFormalParameter )
                {
                // InternalXcore.g:7601:1: ( ruleJvmFormalParameter )
                // InternalXcore.g:7602:1: ruleJvmFormalParameter
                {
                pushFollow(FollowSets000.FOLLOW_105);
                ruleJvmFormalParameter();

                state._fsp--;
                if (state.failed) return ;

                }


                }

                // InternalXcore.g:7604:2: ( ',' ( ( ruleJvmFormalParameter ) ) )*
                loop196:
                do {
                    int alt196=2;
                    int LA196_0 = input.LA(1);

                    if ( (LA196_0==16) ) {
                        alt196=1;
                    }


                    switch (alt196) {
                	case 1 :
                	    // InternalXcore.g:7604:4: ',' ( ( ruleJvmFormalParameter ) )
                	    {
                	    match(input,16,FollowSets000.FOLLOW_20); if (state.failed) return ;
                	    // InternalXcore.g:7605:1: ( ( ruleJvmFormalParameter ) )
                	    // InternalXcore.g:7606:1: ( ruleJvmFormalParameter )
                	    {
                	    // InternalXcore.g:7606:1: ( ruleJvmFormalParameter )
                	    // InternalXcore.g:7607:1: ruleJvmFormalParameter
                	    {
                	    pushFollow(FollowSets000.FOLLOW_105);
                	    ruleJvmFormalParameter();

                	    state._fsp--;
                	    if (state.failed) return ;

                	    }


                	    }


                	    }
                	    break;

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


                }
                break;

        }

        // InternalXcore.g:7609:6: ( ( '|' ) )
        // InternalXcore.g:7610:1: ( '|' )
        {
        // InternalXcore.g:7610:1: ( '|' )
        // InternalXcore.g:7611:2: '|'
        {
        match(input,97,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred34_InternalXcore

    // $ANTLR start synpred35_InternalXcore
    public final void synpred35_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:7678:4: ( ( () '[' ) )
        // InternalXcore.g:7678:5: ( () '[' )
        {
        // InternalXcore.g:7678:5: ( () '[' )
        // InternalXcore.g:7678:6: () '['
        {
        // InternalXcore.g:7678:6: ()
        // InternalXcore.g:7679:1: 
        {
        }

        match(input,59,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred35_InternalXcore

    // $ANTLR start synpred36_InternalXcore
    public final void synpred36_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:7783:4: ( '<' )
        // InternalXcore.g:7783:6: '<'
        {
        match(input,23,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred36_InternalXcore

    // $ANTLR start synpred37_InternalXcore
    public final void synpred37_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:7832:5: ( ( '(' ) )
        // InternalXcore.g:7833:1: ( '(' )
        {
        // InternalXcore.g:7833:1: ( '(' )
        // InternalXcore.g:7834:2: '('
        {
        match(input,15,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred37_InternalXcore

    // $ANTLR start synpred38_InternalXcore
    public final void synpred38_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:7853:4: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )
        // InternalXcore.g:7853:5: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) )
        {
        // InternalXcore.g:7853:5: ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) )
        // InternalXcore.g:7853:6: () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) )
        {
        // InternalXcore.g:7853:6: ()
        // InternalXcore.g:7854:1: 
        {
        }

        // InternalXcore.g:7854:2: ( ( ( 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:7854:3: ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )*
                {
                // InternalXcore.g:7854:3: ( ( ruleJvmFormalParameter ) )
                // InternalXcore.g:7855:1: ( ruleJvmFormalParameter )
                {
                // InternalXcore.g:7855:1: ( ruleJvmFormalParameter )
                // InternalXcore.g:7856:1: ruleJvmFormalParameter
                {
                pushFollow(FollowSets000.FOLLOW_105);
                ruleJvmFormalParameter();

                state._fsp--;
                if (state.failed) return ;

                }


                }

                // InternalXcore.g:7858:2: ( ',' ( ( ruleJvmFormalParameter ) ) )*
                loop198:
                do {
                    int alt198=2;
                    int LA198_0 = input.LA(1);

                    if ( (LA198_0==16) ) {
                        alt198=1;
                    }


                    switch (alt198) {
                	case 1 :
                	    // InternalXcore.g:7858:4: ',' ( ( ruleJvmFormalParameter ) )
                	    {
                	    match(input,16,FollowSets000.FOLLOW_20); if (state.failed) return ;
                	    // InternalXcore.g:7859:1: ( ( ruleJvmFormalParameter ) )
                	    // InternalXcore.g:7860:1: ( ruleJvmFormalParameter )
                	    {
                	    // InternalXcore.g:7860:1: ( ruleJvmFormalParameter )
                	    // InternalXcore.g:7861:1: ruleJvmFormalParameter
                	    {
                	    pushFollow(FollowSets000.FOLLOW_105);
                	    ruleJvmFormalParameter();

                	    state._fsp--;
                	    if (state.failed) return ;

                	    }


                	    }


                	    }
                	    break;

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


                }
                break;

        }

        // InternalXcore.g:7863:6: ( ( '|' ) )
        // InternalXcore.g:7864:1: ( '|' )
        {
        // InternalXcore.g:7864:1: ( '|' )
        // InternalXcore.g:7865:2: '|'
        {
        match(input,97,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }


        }


        }
    }
    // $ANTLR end synpred38_InternalXcore

    // $ANTLR start synpred39_InternalXcore
    public final void synpred39_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:7932:4: ( ( () '[' ) )
        // InternalXcore.g:7932:5: ( () '[' )
        {
        // InternalXcore.g:7932:5: ( () '[' )
        // InternalXcore.g:7932:6: () '['
        {
        // InternalXcore.g:7932:6: ()
        // InternalXcore.g:7933:1: 
        {
        }

        match(input,59,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred39_InternalXcore

    // $ANTLR start synpred40_InternalXcore
    public final void synpred40_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:8272:2: ( '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:8398:5: ( 'catch' )
        // InternalXcore.g:8398:7: 'catch'
        {
        match(input,119,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred41_InternalXcore

    // $ANTLR start synpred42_InternalXcore
    public final void synpred42_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:8417:5: ( 'finally' )
        // InternalXcore.g:8417:7: 'finally'
        {
        match(input,117,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred42_InternalXcore

    // $ANTLR start synpred45_InternalXcore
    public final void synpred45_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:8643:3: ( '.' )
        // InternalXcore.g:8644:2: '.'
        {
        match(input,67,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred45_InternalXcore

    // $ANTLR start synpred46_InternalXcore
    public final void synpred46_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:8769:2: ( ( () ruleArrayBrackets ) )
        // InternalXcore.g:8769:3: ( () ruleArrayBrackets )
        {
        // InternalXcore.g:8769:3: ( () ruleArrayBrackets )
        // InternalXcore.g:8769:4: () ruleArrayBrackets
        {
        // InternalXcore.g:8769:4: ()
        // InternalXcore.g:8770:1: 
        {
        }

        pushFollow(FollowSets000.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:8954:4: ( '<' )
        // InternalXcore.g:8954:6: '<'
        {
        match(input,23,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }
    }
    // $ANTLR end synpred47_InternalXcore

    // $ANTLR start synpred48_InternalXcore
    public final void synpred48_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:9003:3: ( ( () '.' ) )
        // InternalXcore.g:9003:4: ( () '.' )
        {
        // InternalXcore.g:9003:4: ( () '.' )
        // InternalXcore.g:9003:5: () '.'
        {
        // InternalXcore.g:9003:5: ()
        // InternalXcore.g:9004:1: 
        {
        }

        match(input,67,FollowSets000.FOLLOW_2); if (state.failed) return ;

        }


        }
    }
    // $ANTLR end synpred48_InternalXcore

    // $ANTLR start synpred49_InternalXcore
    public final void synpred49_InternalXcore_fragment() throws RecognitionException {   
        // InternalXcore.g:9030:4: ( '<' )
        // InternalXcore.g:9030:6: '<'
        {
        match(input,23,FollowSets000.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 "366:1: ( ( (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 "492:1: (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 "1250:1: (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 1331: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' ) ) ) ) ) )*";
        }
        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 1639: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 ) ) ) ) ) ) )*";
        }
        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 2315: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 ) ) ) ) ) ) )*";
        }
        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 "3832:1: ( ( () ( ( 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 "3889:1: ( ( ( ( () ( ( 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 4566:1: ( ( ( ( () ( ( 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 "4631:1: (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 "5475:2: ( ( ( ( '(' ) )=> (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 "5496:2: ( ( ( ( () ( ( ( 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 "5575:3: ( ( ( () '[' ) )=> (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 "5616:1: (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 "6099: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 "6523:1: ( ( ( ( ( '(' ( ( 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 "6578:7: ( ( ( ( ( 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 "7289:2: ( ( ( ( ( ( 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 "7578:2: ( ( ( ( '(' ) )=> (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 "7599:2: ( ( ( ( () ( ( ( 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 "7678: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 "7783:2: ( ( ( '<' )=>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 "7832: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 "7853:2: ( ( ( ( () ( ( ( 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 "7932: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 "8272:1: ( ( '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 8643:1: ( ( ( '.' )=>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 "8954:2: ( ( ( '<' )=>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 9003:1: ( ( ( ( () '.' ) )=> ( () 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 "9030:2: ( ( ( '<' )=>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 "9468:1: ( ( ( (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 ) ) )";
        }
    }
 

    
    private static class FollowSets000 {
        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});
    }


}