package org.xtext.example.domij.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.xtext.example.domij.services.ErDslGrammarAccess;



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

@SuppressWarnings("all")
public class InternalErDslParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_STRING", "RULE_ID", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'{'", "'domains'", "','", "'}'", "'entities'", "'gerunds'", "'relationships'", "'attributeSet'", "'keySet'", "'primaryKey'", "'('", "')'", "'default'", "'extends'", "'entitiesInRelationship'", "'ISA'", "'supertype'", "'subtypes'", "'classificationAttribute'", "'Categorisation'", "'categorisedEntity'", "'categorisationEntities'", "'isPartial'", "'IdentificationDependency'", "'weakEntity'", "'regularEntity'", "'zero'", "'one'", "'many'", "'integer'", "'string'", "'real'", "'boolean'", "'date'", "'time'", "'true'", "'false'", "'-'"
    };
    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__11=11;
    public static final int T__12=12;
    public static final int T__13=13;
    public static final int T__14=14;
    public static final int RULE_ID=5;
    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 RULE_INT=6;
    public static final int T__29=29;
    public static final int T__22=22;
    public static final int RULE_ML_COMMENT=7;
    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 RULE_STRING=4;
    public static final int RULE_SL_COMMENT=8;
    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 EOF=-1;
    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 RULE_WS=9;
    public static final int RULE_ANY_OTHER=10;
    public static final int T__48=48;
    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;

    // delegates
    // delegators


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

    public String[] getTokenNames() { return InternalErDslParser.tokenNames; }
    public String getGrammarFileName() { return "../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g"; }



     	private ErDslGrammarAccess grammarAccess;
     	
        public InternalErDslParser(TokenStream input, ErDslGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "ERModel";	
       	}
       	
       	@Override
       	protected ErDslGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start "entryRuleERModel"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:67:1: entryRuleERModel returns [EObject current=null] : iv_ruleERModel= ruleERModel EOF ;
    public final EObject entryRuleERModel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleERModel = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:68:2: (iv_ruleERModel= ruleERModel EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:69:2: iv_ruleERModel= ruleERModel EOF
            {
             newCompositeNode(grammarAccess.getERModelRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleERModel_in_entryRuleERModel75);
            iv_ruleERModel=ruleERModel();

            state._fsp--;

             current =iv_ruleERModel; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleERModel85); 

            }

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


    // $ANTLR start "ruleERModel"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:76:1: ruleERModel returns [EObject current=null] : ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' (otherlv_2= 'domains' otherlv_3= '{' ( (lv_domains_4_0= ruleDomain ) ) (otherlv_5= ',' ( (lv_domains_6_0= ruleDomain ) ) )* otherlv_7= '}' )? (otherlv_8= 'entities' otherlv_9= '{' ( (lv_entities_10_0= ruleEntity ) ) (otherlv_11= ',' ( (lv_entities_12_0= ruleEntity ) ) )* otherlv_13= '}' )? (otherlv_14= 'gerunds' otherlv_15= '{' ( (lv_gerunds_16_0= ruleGerund ) ) (otherlv_17= ',' ( (lv_gerunds_18_0= ruleGerund ) ) )* otherlv_19= '}' )? (otherlv_20= 'relationships' otherlv_21= '{' ( (lv_relationships_22_0= ruleRelationshipConcept ) ) (otherlv_23= ',' ( (lv_relationships_24_0= ruleRelationshipConcept ) ) )* otherlv_25= '}' )? otherlv_26= '}' ) ;
    public final EObject ruleERModel() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token otherlv_15=null;
        Token otherlv_17=null;
        Token otherlv_19=null;
        Token otherlv_20=null;
        Token otherlv_21=null;
        Token otherlv_23=null;
        Token otherlv_25=null;
        Token otherlv_26=null;
        AntlrDatatypeRuleToken lv_name_0_0 = null;

        EObject lv_domains_4_0 = null;

        EObject lv_domains_6_0 = null;

        EObject lv_entities_10_0 = null;

        EObject lv_entities_12_0 = null;

        EObject lv_gerunds_16_0 = null;

        EObject lv_gerunds_18_0 = null;

        EObject lv_relationships_22_0 = null;

        EObject lv_relationships_24_0 = null;


         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:79:28: ( ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' (otherlv_2= 'domains' otherlv_3= '{' ( (lv_domains_4_0= ruleDomain ) ) (otherlv_5= ',' ( (lv_domains_6_0= ruleDomain ) ) )* otherlv_7= '}' )? (otherlv_8= 'entities' otherlv_9= '{' ( (lv_entities_10_0= ruleEntity ) ) (otherlv_11= ',' ( (lv_entities_12_0= ruleEntity ) ) )* otherlv_13= '}' )? (otherlv_14= 'gerunds' otherlv_15= '{' ( (lv_gerunds_16_0= ruleGerund ) ) (otherlv_17= ',' ( (lv_gerunds_18_0= ruleGerund ) ) )* otherlv_19= '}' )? (otherlv_20= 'relationships' otherlv_21= '{' ( (lv_relationships_22_0= ruleRelationshipConcept ) ) (otherlv_23= ',' ( (lv_relationships_24_0= ruleRelationshipConcept ) ) )* otherlv_25= '}' )? otherlv_26= '}' ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:80:1: ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' (otherlv_2= 'domains' otherlv_3= '{' ( (lv_domains_4_0= ruleDomain ) ) (otherlv_5= ',' ( (lv_domains_6_0= ruleDomain ) ) )* otherlv_7= '}' )? (otherlv_8= 'entities' otherlv_9= '{' ( (lv_entities_10_0= ruleEntity ) ) (otherlv_11= ',' ( (lv_entities_12_0= ruleEntity ) ) )* otherlv_13= '}' )? (otherlv_14= 'gerunds' otherlv_15= '{' ( (lv_gerunds_16_0= ruleGerund ) ) (otherlv_17= ',' ( (lv_gerunds_18_0= ruleGerund ) ) )* otherlv_19= '}' )? (otherlv_20= 'relationships' otherlv_21= '{' ( (lv_relationships_22_0= ruleRelationshipConcept ) ) (otherlv_23= ',' ( (lv_relationships_24_0= ruleRelationshipConcept ) ) )* otherlv_25= '}' )? otherlv_26= '}' )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:80:1: ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' (otherlv_2= 'domains' otherlv_3= '{' ( (lv_domains_4_0= ruleDomain ) ) (otherlv_5= ',' ( (lv_domains_6_0= ruleDomain ) ) )* otherlv_7= '}' )? (otherlv_8= 'entities' otherlv_9= '{' ( (lv_entities_10_0= ruleEntity ) ) (otherlv_11= ',' ( (lv_entities_12_0= ruleEntity ) ) )* otherlv_13= '}' )? (otherlv_14= 'gerunds' otherlv_15= '{' ( (lv_gerunds_16_0= ruleGerund ) ) (otherlv_17= ',' ( (lv_gerunds_18_0= ruleGerund ) ) )* otherlv_19= '}' )? (otherlv_20= 'relationships' otherlv_21= '{' ( (lv_relationships_22_0= ruleRelationshipConcept ) ) (otherlv_23= ',' ( (lv_relationships_24_0= ruleRelationshipConcept ) ) )* otherlv_25= '}' )? otherlv_26= '}' )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:80:2: ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' (otherlv_2= 'domains' otherlv_3= '{' ( (lv_domains_4_0= ruleDomain ) ) (otherlv_5= ',' ( (lv_domains_6_0= ruleDomain ) ) )* otherlv_7= '}' )? (otherlv_8= 'entities' otherlv_9= '{' ( (lv_entities_10_0= ruleEntity ) ) (otherlv_11= ',' ( (lv_entities_12_0= ruleEntity ) ) )* otherlv_13= '}' )? (otherlv_14= 'gerunds' otherlv_15= '{' ( (lv_gerunds_16_0= ruleGerund ) ) (otherlv_17= ',' ( (lv_gerunds_18_0= ruleGerund ) ) )* otherlv_19= '}' )? (otherlv_20= 'relationships' otherlv_21= '{' ( (lv_relationships_22_0= ruleRelationshipConcept ) ) (otherlv_23= ',' ( (lv_relationships_24_0= ruleRelationshipConcept ) ) )* otherlv_25= '}' )? otherlv_26= '}'
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:80:2: ( (lv_name_0_0= ruleEString ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:81:1: (lv_name_0_0= ruleEString )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:81:1: (lv_name_0_0= ruleEString )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:82:3: lv_name_0_0= ruleEString
            {
             
            	        newCompositeNode(grammarAccess.getERModelAccess().getNameEStringParserRuleCall_0_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleERModel131);
            lv_name_0_0=ruleEString();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getERModelRule());
            	        }
                   		set(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"EString");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_1=(Token)match(input,11,FollowSets000.FOLLOW_11_in_ruleERModel143); 

                	newLeafNode(otherlv_1, grammarAccess.getERModelAccess().getLeftCurlyBracketKeyword_1());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:102:1: (otherlv_2= 'domains' otherlv_3= '{' ( (lv_domains_4_0= ruleDomain ) ) (otherlv_5= ',' ( (lv_domains_6_0= ruleDomain ) ) )* otherlv_7= '}' )?
            int alt2=2;
            int LA2_0 = input.LA(1);

            if ( (LA2_0==12) ) {
                alt2=1;
            }
            switch (alt2) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:102:3: otherlv_2= 'domains' otherlv_3= '{' ( (lv_domains_4_0= ruleDomain ) ) (otherlv_5= ',' ( (lv_domains_6_0= ruleDomain ) ) )* otherlv_7= '}'
                    {
                    otherlv_2=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleERModel156); 

                        	newLeafNode(otherlv_2, grammarAccess.getERModelAccess().getDomainsKeyword_2_0());
                        
                    otherlv_3=(Token)match(input,11,FollowSets000.FOLLOW_11_in_ruleERModel168); 

                        	newLeafNode(otherlv_3, grammarAccess.getERModelAccess().getLeftCurlyBracketKeyword_2_1());
                        
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:110:1: ( (lv_domains_4_0= ruleDomain ) )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:111:1: (lv_domains_4_0= ruleDomain )
                    {
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:111:1: (lv_domains_4_0= ruleDomain )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:112:3: lv_domains_4_0= ruleDomain
                    {
                     
                    	        newCompositeNode(grammarAccess.getERModelAccess().getDomainsDomainParserRuleCall_2_2_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleDomain_in_ruleERModel189);
                    lv_domains_4_0=ruleDomain();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getERModelRule());
                    	        }
                           		add(
                           			current, 
                           			"domains",
                            		lv_domains_4_0, 
                            		"Domain");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:128:2: (otherlv_5= ',' ( (lv_domains_6_0= ruleDomain ) ) )*
                    loop1:
                    do {
                        int alt1=2;
                        int LA1_0 = input.LA(1);

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


                        switch (alt1) {
                    	case 1 :
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:128:4: otherlv_5= ',' ( (lv_domains_6_0= ruleDomain ) )
                    	    {
                    	    otherlv_5=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleERModel202); 

                    	        	newLeafNode(otherlv_5, grammarAccess.getERModelAccess().getCommaKeyword_2_3_0());
                    	        
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:132:1: ( (lv_domains_6_0= ruleDomain ) )
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:133:1: (lv_domains_6_0= ruleDomain )
                    	    {
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:133:1: (lv_domains_6_0= ruleDomain )
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:134:3: lv_domains_6_0= ruleDomain
                    	    {
                    	     
                    	    	        newCompositeNode(grammarAccess.getERModelAccess().getDomainsDomainParserRuleCall_2_3_1_0()); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_ruleDomain_in_ruleERModel223);
                    	    lv_domains_6_0=ruleDomain();

                    	    state._fsp--;


                    	    	        if (current==null) {
                    	    	            current = createModelElementForParent(grammarAccess.getERModelRule());
                    	    	        }
                    	           		add(
                    	           			current, 
                    	           			"domains",
                    	            		lv_domains_6_0, 
                    	            		"Domain");
                    	    	        afterParserOrEnumRuleCall();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

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

                    otherlv_7=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleERModel237); 

                        	newLeafNode(otherlv_7, grammarAccess.getERModelAccess().getRightCurlyBracketKeyword_2_4());
                        

                    }
                    break;

            }

            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:154:3: (otherlv_8= 'entities' otherlv_9= '{' ( (lv_entities_10_0= ruleEntity ) ) (otherlv_11= ',' ( (lv_entities_12_0= ruleEntity ) ) )* otherlv_13= '}' )?
            int alt4=2;
            int LA4_0 = input.LA(1);

            if ( (LA4_0==15) ) {
                alt4=1;
            }
            switch (alt4) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:154:5: otherlv_8= 'entities' otherlv_9= '{' ( (lv_entities_10_0= ruleEntity ) ) (otherlv_11= ',' ( (lv_entities_12_0= ruleEntity ) ) )* otherlv_13= '}'
                    {
                    otherlv_8=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleERModel252); 

                        	newLeafNode(otherlv_8, grammarAccess.getERModelAccess().getEntitiesKeyword_3_0());
                        
                    otherlv_9=(Token)match(input,11,FollowSets000.FOLLOW_11_in_ruleERModel264); 

                        	newLeafNode(otherlv_9, grammarAccess.getERModelAccess().getLeftCurlyBracketKeyword_3_1());
                        
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:162:1: ( (lv_entities_10_0= ruleEntity ) )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:163:1: (lv_entities_10_0= ruleEntity )
                    {
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:163:1: (lv_entities_10_0= ruleEntity )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:164:3: lv_entities_10_0= ruleEntity
                    {
                     
                    	        newCompositeNode(grammarAccess.getERModelAccess().getEntitiesEntityParserRuleCall_3_2_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleEntity_in_ruleERModel285);
                    lv_entities_10_0=ruleEntity();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getERModelRule());
                    	        }
                           		add(
                           			current, 
                           			"entities",
                            		lv_entities_10_0, 
                            		"Entity");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:180:2: (otherlv_11= ',' ( (lv_entities_12_0= ruleEntity ) ) )*
                    loop3:
                    do {
                        int alt3=2;
                        int LA3_0 = input.LA(1);

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


                        switch (alt3) {
                    	case 1 :
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:180:4: otherlv_11= ',' ( (lv_entities_12_0= ruleEntity ) )
                    	    {
                    	    otherlv_11=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleERModel298); 

                    	        	newLeafNode(otherlv_11, grammarAccess.getERModelAccess().getCommaKeyword_3_3_0());
                    	        
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:184:1: ( (lv_entities_12_0= ruleEntity ) )
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:185:1: (lv_entities_12_0= ruleEntity )
                    	    {
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:185:1: (lv_entities_12_0= ruleEntity )
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:186:3: lv_entities_12_0= ruleEntity
                    	    {
                    	     
                    	    	        newCompositeNode(grammarAccess.getERModelAccess().getEntitiesEntityParserRuleCall_3_3_1_0()); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_ruleEntity_in_ruleERModel319);
                    	    lv_entities_12_0=ruleEntity();

                    	    state._fsp--;


                    	    	        if (current==null) {
                    	    	            current = createModelElementForParent(grammarAccess.getERModelRule());
                    	    	        }
                    	           		add(
                    	           			current, 
                    	           			"entities",
                    	            		lv_entities_12_0, 
                    	            		"Entity");
                    	    	        afterParserOrEnumRuleCall();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

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

                    otherlv_13=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleERModel333); 

                        	newLeafNode(otherlv_13, grammarAccess.getERModelAccess().getRightCurlyBracketKeyword_3_4());
                        

                    }
                    break;

            }

            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:206:3: (otherlv_14= 'gerunds' otherlv_15= '{' ( (lv_gerunds_16_0= ruleGerund ) ) (otherlv_17= ',' ( (lv_gerunds_18_0= ruleGerund ) ) )* otherlv_19= '}' )?
            int alt6=2;
            int LA6_0 = input.LA(1);

            if ( (LA6_0==16) ) {
                alt6=1;
            }
            switch (alt6) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:206:5: otherlv_14= 'gerunds' otherlv_15= '{' ( (lv_gerunds_16_0= ruleGerund ) ) (otherlv_17= ',' ( (lv_gerunds_18_0= ruleGerund ) ) )* otherlv_19= '}'
                    {
                    otherlv_14=(Token)match(input,16,FollowSets000.FOLLOW_16_in_ruleERModel348); 

                        	newLeafNode(otherlv_14, grammarAccess.getERModelAccess().getGerundsKeyword_4_0());
                        
                    otherlv_15=(Token)match(input,11,FollowSets000.FOLLOW_11_in_ruleERModel360); 

                        	newLeafNode(otherlv_15, grammarAccess.getERModelAccess().getLeftCurlyBracketKeyword_4_1());
                        
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:214:1: ( (lv_gerunds_16_0= ruleGerund ) )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:215:1: (lv_gerunds_16_0= ruleGerund )
                    {
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:215:1: (lv_gerunds_16_0= ruleGerund )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:216:3: lv_gerunds_16_0= ruleGerund
                    {
                     
                    	        newCompositeNode(grammarAccess.getERModelAccess().getGerundsGerundParserRuleCall_4_2_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleGerund_in_ruleERModel381);
                    lv_gerunds_16_0=ruleGerund();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getERModelRule());
                    	        }
                           		add(
                           			current, 
                           			"gerunds",
                            		lv_gerunds_16_0, 
                            		"Gerund");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:232:2: (otherlv_17= ',' ( (lv_gerunds_18_0= ruleGerund ) ) )*
                    loop5:
                    do {
                        int alt5=2;
                        int LA5_0 = input.LA(1);

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


                        switch (alt5) {
                    	case 1 :
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:232:4: otherlv_17= ',' ( (lv_gerunds_18_0= ruleGerund ) )
                    	    {
                    	    otherlv_17=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleERModel394); 

                    	        	newLeafNode(otherlv_17, grammarAccess.getERModelAccess().getCommaKeyword_4_3_0());
                    	        
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:236:1: ( (lv_gerunds_18_0= ruleGerund ) )
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:237:1: (lv_gerunds_18_0= ruleGerund )
                    	    {
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:237:1: (lv_gerunds_18_0= ruleGerund )
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:238:3: lv_gerunds_18_0= ruleGerund
                    	    {
                    	     
                    	    	        newCompositeNode(grammarAccess.getERModelAccess().getGerundsGerundParserRuleCall_4_3_1_0()); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_ruleGerund_in_ruleERModel415);
                    	    lv_gerunds_18_0=ruleGerund();

                    	    state._fsp--;


                    	    	        if (current==null) {
                    	    	            current = createModelElementForParent(grammarAccess.getERModelRule());
                    	    	        }
                    	           		add(
                    	           			current, 
                    	           			"gerunds",
                    	            		lv_gerunds_18_0, 
                    	            		"Gerund");
                    	    	        afterParserOrEnumRuleCall();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

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

                    otherlv_19=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleERModel429); 

                        	newLeafNode(otherlv_19, grammarAccess.getERModelAccess().getRightCurlyBracketKeyword_4_4());
                        

                    }
                    break;

            }

            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:258:3: (otherlv_20= 'relationships' otherlv_21= '{' ( (lv_relationships_22_0= ruleRelationshipConcept ) ) (otherlv_23= ',' ( (lv_relationships_24_0= ruleRelationshipConcept ) ) )* otherlv_25= '}' )?
            int alt8=2;
            int LA8_0 = input.LA(1);

            if ( (LA8_0==17) ) {
                alt8=1;
            }
            switch (alt8) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:258:5: otherlv_20= 'relationships' otherlv_21= '{' ( (lv_relationships_22_0= ruleRelationshipConcept ) ) (otherlv_23= ',' ( (lv_relationships_24_0= ruleRelationshipConcept ) ) )* otherlv_25= '}'
                    {
                    otherlv_20=(Token)match(input,17,FollowSets000.FOLLOW_17_in_ruleERModel444); 

                        	newLeafNode(otherlv_20, grammarAccess.getERModelAccess().getRelationshipsKeyword_5_0());
                        
                    otherlv_21=(Token)match(input,11,FollowSets000.FOLLOW_11_in_ruleERModel456); 

                        	newLeafNode(otherlv_21, grammarAccess.getERModelAccess().getLeftCurlyBracketKeyword_5_1());
                        
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:266:1: ( (lv_relationships_22_0= ruleRelationshipConcept ) )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:267:1: (lv_relationships_22_0= ruleRelationshipConcept )
                    {
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:267:1: (lv_relationships_22_0= ruleRelationshipConcept )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:268:3: lv_relationships_22_0= ruleRelationshipConcept
                    {
                     
                    	        newCompositeNode(grammarAccess.getERModelAccess().getRelationshipsRelationshipConceptParserRuleCall_5_2_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleRelationshipConcept_in_ruleERModel477);
                    lv_relationships_22_0=ruleRelationshipConcept();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getERModelRule());
                    	        }
                           		add(
                           			current, 
                           			"relationships",
                            		lv_relationships_22_0, 
                            		"RelationshipConcept");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:284:2: (otherlv_23= ',' ( (lv_relationships_24_0= ruleRelationshipConcept ) ) )*
                    loop7:
                    do {
                        int alt7=2;
                        int LA7_0 = input.LA(1);

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


                        switch (alt7) {
                    	case 1 :
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:284:4: otherlv_23= ',' ( (lv_relationships_24_0= ruleRelationshipConcept ) )
                    	    {
                    	    otherlv_23=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleERModel490); 

                    	        	newLeafNode(otherlv_23, grammarAccess.getERModelAccess().getCommaKeyword_5_3_0());
                    	        
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:288:1: ( (lv_relationships_24_0= ruleRelationshipConcept ) )
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:289:1: (lv_relationships_24_0= ruleRelationshipConcept )
                    	    {
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:289:1: (lv_relationships_24_0= ruleRelationshipConcept )
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:290:3: lv_relationships_24_0= ruleRelationshipConcept
                    	    {
                    	     
                    	    	        newCompositeNode(grammarAccess.getERModelAccess().getRelationshipsRelationshipConceptParserRuleCall_5_3_1_0()); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_ruleRelationshipConcept_in_ruleERModel511);
                    	    lv_relationships_24_0=ruleRelationshipConcept();

                    	    state._fsp--;


                    	    	        if (current==null) {
                    	    	            current = createModelElementForParent(grammarAccess.getERModelRule());
                    	    	        }
                    	           		add(
                    	           			current, 
                    	           			"relationships",
                    	            		lv_relationships_24_0, 
                    	            		"RelationshipConcept");
                    	    	        afterParserOrEnumRuleCall();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

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

                    otherlv_25=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleERModel525); 

                        	newLeafNode(otherlv_25, grammarAccess.getERModelAccess().getRightCurlyBracketKeyword_5_4());
                        

                    }
                    break;

            }

            otherlv_26=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleERModel539); 

                	newLeafNode(otherlv_26, grammarAccess.getERModelAccess().getRightCurlyBracketKeyword_6());
                

            }


            }

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


    // $ANTLR start "entryRuleRelationshipConcept"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:322:1: entryRuleRelationshipConcept returns [EObject current=null] : iv_ruleRelationshipConcept= ruleRelationshipConcept EOF ;
    public final EObject entryRuleRelationshipConcept() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRelationshipConcept = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:323:2: (iv_ruleRelationshipConcept= ruleRelationshipConcept EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:324:2: iv_ruleRelationshipConcept= ruleRelationshipConcept EOF
            {
             newCompositeNode(grammarAccess.getRelationshipConceptRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleRelationshipConcept_in_entryRuleRelationshipConcept575);
            iv_ruleRelationshipConcept=ruleRelationshipConcept();

            state._fsp--;

             current =iv_ruleRelationshipConcept; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleRelationshipConcept585); 

            }

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


    // $ANTLR start "ruleRelationshipConcept"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:331:1: ruleRelationshipConcept returns [EObject current=null] : (this_Relationship_0= ruleRelationship | this_ISA_1= ruleISA | this_Categorisation_2= ruleCategorisation | this_IdentificationDependency_3= ruleIdentificationDependency ) ;
    public final EObject ruleRelationshipConcept() throws RecognitionException {
        EObject current = null;

        EObject this_Relationship_0 = null;

        EObject this_ISA_1 = null;

        EObject this_Categorisation_2 = null;

        EObject this_IdentificationDependency_3 = null;


         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:334:28: ( (this_Relationship_0= ruleRelationship | this_ISA_1= ruleISA | this_Categorisation_2= ruleCategorisation | this_IdentificationDependency_3= ruleIdentificationDependency ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:335:1: (this_Relationship_0= ruleRelationship | this_ISA_1= ruleISA | this_Categorisation_2= ruleCategorisation | this_IdentificationDependency_3= ruleIdentificationDependency )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:335:1: (this_Relationship_0= ruleRelationship | this_ISA_1= ruleISA | this_Categorisation_2= ruleCategorisation | this_IdentificationDependency_3= ruleIdentificationDependency )
            int alt9=4;
            switch ( input.LA(1) ) {
            case RULE_STRING:
            case RULE_ID:
                {
                alt9=1;
                }
                break;
            case 26:
                {
                alt9=2;
                }
                break;
            case 30:
                {
                alt9=3;
                }
                break;
            case 34:
                {
                alt9=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 9, 0, input);

                throw nvae;
            }

            switch (alt9) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:336:5: this_Relationship_0= ruleRelationship
                    {
                     
                            newCompositeNode(grammarAccess.getRelationshipConceptAccess().getRelationshipParserRuleCall_0()); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleRelationship_in_ruleRelationshipConcept632);
                    this_Relationship_0=ruleRelationship();

                    state._fsp--;

                     
                            current = this_Relationship_0; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 2 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:346:5: this_ISA_1= ruleISA
                    {
                     
                            newCompositeNode(grammarAccess.getRelationshipConceptAccess().getISAParserRuleCall_1()); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleISA_in_ruleRelationshipConcept659);
                    this_ISA_1=ruleISA();

                    state._fsp--;

                     
                            current = this_ISA_1; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 3 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:356:5: this_Categorisation_2= ruleCategorisation
                    {
                     
                            newCompositeNode(grammarAccess.getRelationshipConceptAccess().getCategorisationParserRuleCall_2()); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleCategorisation_in_ruleRelationshipConcept686);
                    this_Categorisation_2=ruleCategorisation();

                    state._fsp--;

                     
                            current = this_Categorisation_2; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;
                case 4 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:366:5: this_IdentificationDependency_3= ruleIdentificationDependency
                    {
                     
                            newCompositeNode(grammarAccess.getRelationshipConceptAccess().getIdentificationDependencyParserRuleCall_3()); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleIdentificationDependency_in_ruleRelationshipConcept713);
                    this_IdentificationDependency_3=ruleIdentificationDependency();

                    state._fsp--;

                     
                            current = this_IdentificationDependency_3; 
                            afterParserOrEnumRuleCall();
                        

                    }
                    break;

            }


            }

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


    // $ANTLR start "entryRuleEString"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:384:1: entryRuleEString returns [String current=null] : iv_ruleEString= ruleEString EOF ;
    public final String entryRuleEString() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleEString = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:385:2: (iv_ruleEString= ruleEString EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:386:2: iv_ruleEString= ruleEString EOF
            {
             newCompositeNode(grammarAccess.getEStringRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_entryRuleEString751);
            iv_ruleEString=ruleEString();

            state._fsp--;

             current =iv_ruleEString.getText(); 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEString762); 

            }

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


    // $ANTLR start "ruleEString"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:393:1: ruleEString returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID ) ;
    public final AntlrDatatypeRuleToken ruleEString() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_STRING_0=null;
        Token this_ID_1=null;

         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:396:28: ( (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:397:1: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:397:1: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID )
            int alt10=2;
            int LA10_0 = input.LA(1);

            if ( (LA10_0==RULE_STRING) ) {
                alt10=1;
            }
            else if ( (LA10_0==RULE_ID) ) {
                alt10=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 10, 0, input);

                throw nvae;
            }
            switch (alt10) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:397:6: this_STRING_0= RULE_STRING
                    {
                    this_STRING_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_RULE_STRING_in_ruleEString802); 

                    		current.merge(this_STRING_0);
                        
                     
                        newLeafNode(this_STRING_0, grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0()); 
                        

                    }
                    break;
                case 2 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:405:10: this_ID_1= RULE_ID
                    {
                    this_ID_1=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleEString828); 

                    		current.merge(this_ID_1);
                        
                     
                        newLeafNode(this_ID_1, grammarAccess.getEStringAccess().getIDTerminalRuleCall_1()); 
                        

                    }
                    break;

            }


            }

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


    // $ANTLR start "entryRuleEntity"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:420:1: entryRuleEntity returns [EObject current=null] : iv_ruleEntity= ruleEntity EOF ;
    public final EObject entryRuleEntity() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEntity = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:421:2: (iv_ruleEntity= ruleEntity EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:422:2: iv_ruleEntity= ruleEntity EOF
            {
             newCompositeNode(grammarAccess.getEntityRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleEntity_in_entryRuleEntity873);
            iv_ruleEntity=ruleEntity();

            state._fsp--;

             current =iv_ruleEntity; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEntity883); 

            }

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


    // $ANTLR start "ruleEntity"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:429:1: ruleEntity returns [EObject current=null] : ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' (otherlv_2= 'attributeSet' otherlv_3= '{' ( (lv_entityAttributes_4_0= ruleAttribute ) ) (otherlv_5= ',' ( (lv_entityAttributes_6_0= ruleAttribute ) ) )* otherlv_7= '}' )? (otherlv_8= 'keySet' otherlv_9= '{' ( (lv_keySet_10_0= ruleKey ) ) (otherlv_11= ',' ( (lv_keySet_12_0= ruleKey ) ) )* otherlv_13= '}' )? (otherlv_14= 'primaryKey' ( ( ruleEString ) ) )? otherlv_16= '}' ) ;
    public final EObject ruleEntity() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        Token otherlv_16=null;
        AntlrDatatypeRuleToken lv_name_0_0 = null;

        EObject lv_entityAttributes_4_0 = null;

        EObject lv_entityAttributes_6_0 = null;

        EObject lv_keySet_10_0 = null;

        EObject lv_keySet_12_0 = null;


         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:432:28: ( ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' (otherlv_2= 'attributeSet' otherlv_3= '{' ( (lv_entityAttributes_4_0= ruleAttribute ) ) (otherlv_5= ',' ( (lv_entityAttributes_6_0= ruleAttribute ) ) )* otherlv_7= '}' )? (otherlv_8= 'keySet' otherlv_9= '{' ( (lv_keySet_10_0= ruleKey ) ) (otherlv_11= ',' ( (lv_keySet_12_0= ruleKey ) ) )* otherlv_13= '}' )? (otherlv_14= 'primaryKey' ( ( ruleEString ) ) )? otherlv_16= '}' ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:433:1: ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' (otherlv_2= 'attributeSet' otherlv_3= '{' ( (lv_entityAttributes_4_0= ruleAttribute ) ) (otherlv_5= ',' ( (lv_entityAttributes_6_0= ruleAttribute ) ) )* otherlv_7= '}' )? (otherlv_8= 'keySet' otherlv_9= '{' ( (lv_keySet_10_0= ruleKey ) ) (otherlv_11= ',' ( (lv_keySet_12_0= ruleKey ) ) )* otherlv_13= '}' )? (otherlv_14= 'primaryKey' ( ( ruleEString ) ) )? otherlv_16= '}' )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:433:1: ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' (otherlv_2= 'attributeSet' otherlv_3= '{' ( (lv_entityAttributes_4_0= ruleAttribute ) ) (otherlv_5= ',' ( (lv_entityAttributes_6_0= ruleAttribute ) ) )* otherlv_7= '}' )? (otherlv_8= 'keySet' otherlv_9= '{' ( (lv_keySet_10_0= ruleKey ) ) (otherlv_11= ',' ( (lv_keySet_12_0= ruleKey ) ) )* otherlv_13= '}' )? (otherlv_14= 'primaryKey' ( ( ruleEString ) ) )? otherlv_16= '}' )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:433:2: ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' (otherlv_2= 'attributeSet' otherlv_3= '{' ( (lv_entityAttributes_4_0= ruleAttribute ) ) (otherlv_5= ',' ( (lv_entityAttributes_6_0= ruleAttribute ) ) )* otherlv_7= '}' )? (otherlv_8= 'keySet' otherlv_9= '{' ( (lv_keySet_10_0= ruleKey ) ) (otherlv_11= ',' ( (lv_keySet_12_0= ruleKey ) ) )* otherlv_13= '}' )? (otherlv_14= 'primaryKey' ( ( ruleEString ) ) )? otherlv_16= '}'
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:433:2: ( (lv_name_0_0= ruleEString ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:434:1: (lv_name_0_0= ruleEString )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:434:1: (lv_name_0_0= ruleEString )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:435:3: lv_name_0_0= ruleEString
            {
             
            	        newCompositeNode(grammarAccess.getEntityAccess().getNameEStringParserRuleCall_0_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleEntity929);
            lv_name_0_0=ruleEString();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getEntityRule());
            	        }
                   		set(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"EString");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_1=(Token)match(input,11,FollowSets000.FOLLOW_11_in_ruleEntity941); 

                	newLeafNode(otherlv_1, grammarAccess.getEntityAccess().getLeftCurlyBracketKeyword_1());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:455:1: (otherlv_2= 'attributeSet' otherlv_3= '{' ( (lv_entityAttributes_4_0= ruleAttribute ) ) (otherlv_5= ',' ( (lv_entityAttributes_6_0= ruleAttribute ) ) )* otherlv_7= '}' )?
            int alt12=2;
            int LA12_0 = input.LA(1);

            if ( (LA12_0==18) ) {
                alt12=1;
            }
            switch (alt12) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:455:3: otherlv_2= 'attributeSet' otherlv_3= '{' ( (lv_entityAttributes_4_0= ruleAttribute ) ) (otherlv_5= ',' ( (lv_entityAttributes_6_0= ruleAttribute ) ) )* otherlv_7= '}'
                    {
                    otherlv_2=(Token)match(input,18,FollowSets000.FOLLOW_18_in_ruleEntity954); 

                        	newLeafNode(otherlv_2, grammarAccess.getEntityAccess().getAttributeSetKeyword_2_0());
                        
                    otherlv_3=(Token)match(input,11,FollowSets000.FOLLOW_11_in_ruleEntity966); 

                        	newLeafNode(otherlv_3, grammarAccess.getEntityAccess().getLeftCurlyBracketKeyword_2_1());
                        
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:463:1: ( (lv_entityAttributes_4_0= ruleAttribute ) )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:464:1: (lv_entityAttributes_4_0= ruleAttribute )
                    {
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:464:1: (lv_entityAttributes_4_0= ruleAttribute )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:465:3: lv_entityAttributes_4_0= ruleAttribute
                    {
                     
                    	        newCompositeNode(grammarAccess.getEntityAccess().getEntityAttributesAttributeParserRuleCall_2_2_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleAttribute_in_ruleEntity987);
                    lv_entityAttributes_4_0=ruleAttribute();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getEntityRule());
                    	        }
                           		add(
                           			current, 
                           			"entityAttributes",
                            		lv_entityAttributes_4_0, 
                            		"Attribute");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:481:2: (otherlv_5= ',' ( (lv_entityAttributes_6_0= ruleAttribute ) ) )*
                    loop11:
                    do {
                        int alt11=2;
                        int LA11_0 = input.LA(1);

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


                        switch (alt11) {
                    	case 1 :
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:481:4: otherlv_5= ',' ( (lv_entityAttributes_6_0= ruleAttribute ) )
                    	    {
                    	    otherlv_5=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleEntity1000); 

                    	        	newLeafNode(otherlv_5, grammarAccess.getEntityAccess().getCommaKeyword_2_3_0());
                    	        
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:485:1: ( (lv_entityAttributes_6_0= ruleAttribute ) )
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:486:1: (lv_entityAttributes_6_0= ruleAttribute )
                    	    {
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:486:1: (lv_entityAttributes_6_0= ruleAttribute )
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:487:3: lv_entityAttributes_6_0= ruleAttribute
                    	    {
                    	     
                    	    	        newCompositeNode(grammarAccess.getEntityAccess().getEntityAttributesAttributeParserRuleCall_2_3_1_0()); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_ruleAttribute_in_ruleEntity1021);
                    	    lv_entityAttributes_6_0=ruleAttribute();

                    	    state._fsp--;


                    	    	        if (current==null) {
                    	    	            current = createModelElementForParent(grammarAccess.getEntityRule());
                    	    	        }
                    	           		add(
                    	           			current, 
                    	           			"entityAttributes",
                    	            		lv_entityAttributes_6_0, 
                    	            		"Attribute");
                    	    	        afterParserOrEnumRuleCall();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

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

                    otherlv_7=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleEntity1035); 

                        	newLeafNode(otherlv_7, grammarAccess.getEntityAccess().getRightCurlyBracketKeyword_2_4());
                        

                    }
                    break;

            }

            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:507:3: (otherlv_8= 'keySet' otherlv_9= '{' ( (lv_keySet_10_0= ruleKey ) ) (otherlv_11= ',' ( (lv_keySet_12_0= ruleKey ) ) )* otherlv_13= '}' )?
            int alt14=2;
            int LA14_0 = input.LA(1);

            if ( (LA14_0==19) ) {
                alt14=1;
            }
            switch (alt14) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:507:5: otherlv_8= 'keySet' otherlv_9= '{' ( (lv_keySet_10_0= ruleKey ) ) (otherlv_11= ',' ( (lv_keySet_12_0= ruleKey ) ) )* otherlv_13= '}'
                    {
                    otherlv_8=(Token)match(input,19,FollowSets000.FOLLOW_19_in_ruleEntity1050); 

                        	newLeafNode(otherlv_8, grammarAccess.getEntityAccess().getKeySetKeyword_3_0());
                        
                    otherlv_9=(Token)match(input,11,FollowSets000.FOLLOW_11_in_ruleEntity1062); 

                        	newLeafNode(otherlv_9, grammarAccess.getEntityAccess().getLeftCurlyBracketKeyword_3_1());
                        
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:515:1: ( (lv_keySet_10_0= ruleKey ) )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:516:1: (lv_keySet_10_0= ruleKey )
                    {
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:516:1: (lv_keySet_10_0= ruleKey )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:517:3: lv_keySet_10_0= ruleKey
                    {
                     
                    	        newCompositeNode(grammarAccess.getEntityAccess().getKeySetKeyParserRuleCall_3_2_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleKey_in_ruleEntity1083);
                    lv_keySet_10_0=ruleKey();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getEntityRule());
                    	        }
                           		add(
                           			current, 
                           			"keySet",
                            		lv_keySet_10_0, 
                            		"Key");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:533:2: (otherlv_11= ',' ( (lv_keySet_12_0= ruleKey ) ) )*
                    loop13:
                    do {
                        int alt13=2;
                        int LA13_0 = input.LA(1);

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


                        switch (alt13) {
                    	case 1 :
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:533:4: otherlv_11= ',' ( (lv_keySet_12_0= ruleKey ) )
                    	    {
                    	    otherlv_11=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleEntity1096); 

                    	        	newLeafNode(otherlv_11, grammarAccess.getEntityAccess().getCommaKeyword_3_3_0());
                    	        
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:537:1: ( (lv_keySet_12_0= ruleKey ) )
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:538:1: (lv_keySet_12_0= ruleKey )
                    	    {
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:538:1: (lv_keySet_12_0= ruleKey )
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:539:3: lv_keySet_12_0= ruleKey
                    	    {
                    	     
                    	    	        newCompositeNode(grammarAccess.getEntityAccess().getKeySetKeyParserRuleCall_3_3_1_0()); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_ruleKey_in_ruleEntity1117);
                    	    lv_keySet_12_0=ruleKey();

                    	    state._fsp--;


                    	    	        if (current==null) {
                    	    	            current = createModelElementForParent(grammarAccess.getEntityRule());
                    	    	        }
                    	           		add(
                    	           			current, 
                    	           			"keySet",
                    	            		lv_keySet_12_0, 
                    	            		"Key");
                    	    	        afterParserOrEnumRuleCall();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

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

                    otherlv_13=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleEntity1131); 

                        	newLeafNode(otherlv_13, grammarAccess.getEntityAccess().getRightCurlyBracketKeyword_3_4());
                        

                    }
                    break;

            }

            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:559:3: (otherlv_14= 'primaryKey' ( ( ruleEString ) ) )?
            int alt15=2;
            int LA15_0 = input.LA(1);

            if ( (LA15_0==20) ) {
                alt15=1;
            }
            switch (alt15) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:559:5: otherlv_14= 'primaryKey' ( ( ruleEString ) )
                    {
                    otherlv_14=(Token)match(input,20,FollowSets000.FOLLOW_20_in_ruleEntity1146); 

                        	newLeafNode(otherlv_14, grammarAccess.getEntityAccess().getPrimaryKeyKeyword_4_0());
                        
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:563:1: ( ( ruleEString ) )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:564:1: ( ruleEString )
                    {
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:564:1: ( ruleEString )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:565:3: ruleEString
                    {

                    			if (current==null) {
                    	            current = createModelElement(grammarAccess.getEntityRule());
                    	        }
                            
                     
                    	        newCompositeNode(grammarAccess.getEntityAccess().getPrimaryKeyKeyCrossReference_4_1_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleEntity1169);
                    ruleEString();

                    state._fsp--;

                     
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }
                    break;

            }

            otherlv_16=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleEntity1183); 

                	newLeafNode(otherlv_16, grammarAccess.getEntityAccess().getRightCurlyBracketKeyword_5());
                

            }


            }

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


    // $ANTLR start "entryRuleGerund"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:590:1: entryRuleGerund returns [EObject current=null] : iv_ruleGerund= ruleGerund EOF ;
    public final EObject entryRuleGerund() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleGerund = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:591:2: (iv_ruleGerund= ruleGerund EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:592:2: iv_ruleGerund= ruleGerund EOF
            {
             newCompositeNode(grammarAccess.getGerundRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleGerund_in_entryRuleGerund1219);
            iv_ruleGerund=ruleGerund();

            state._fsp--;

             current =iv_ruleGerund; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleGerund1229); 

            }

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


    // $ANTLR start "ruleGerund"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:599:1: ruleGerund returns [EObject current=null] : ( (lv_relationship_0_0= ruleRelationship ) ) ;
    public final EObject ruleGerund() throws RecognitionException {
        EObject current = null;

        EObject lv_relationship_0_0 = null;


         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:602:28: ( ( (lv_relationship_0_0= ruleRelationship ) ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:603:1: ( (lv_relationship_0_0= ruleRelationship ) )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:603:1: ( (lv_relationship_0_0= ruleRelationship ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:604:1: (lv_relationship_0_0= ruleRelationship )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:604:1: (lv_relationship_0_0= ruleRelationship )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:605:3: lv_relationship_0_0= ruleRelationship
            {
             
            	        newCompositeNode(grammarAccess.getGerundAccess().getRelationshipRelationshipParserRuleCall_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleRelationship_in_ruleGerund1274);
            lv_relationship_0_0=ruleRelationship();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getGerundRule());
            	        }
                   		set(
                   			current, 
                   			"relationship",
                    		lv_relationship_0_0, 
                    		"Relationship");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }


            }

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


    // $ANTLR start "entryRuleAttribute"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:629:1: entryRuleAttribute returns [EObject current=null] : iv_ruleAttribute= ruleAttribute EOF ;
    public final EObject entryRuleAttribute() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAttribute = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:630:2: (iv_ruleAttribute= ruleAttribute EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:631:2: iv_ruleAttribute= ruleAttribute EOF
            {
             newCompositeNode(grammarAccess.getAttributeRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleAttribute_in_entryRuleAttribute1309);
            iv_ruleAttribute=ruleAttribute();

            state._fsp--;

             current =iv_ruleAttribute; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleAttribute1319); 

            }

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


    // $ANTLR start "ruleAttribute"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:638:1: ruleAttribute returns [EObject current=null] : ( () ( (lv_name_1_0= ruleEString ) ) ( (lv_attributeDomain_2_0= ruleAttributeDomain ) )? ) ;
    public final EObject ruleAttribute() throws RecognitionException {
        EObject current = null;

        AntlrDatatypeRuleToken lv_name_1_0 = null;

        EObject lv_attributeDomain_2_0 = null;


         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:641:28: ( ( () ( (lv_name_1_0= ruleEString ) ) ( (lv_attributeDomain_2_0= ruleAttributeDomain ) )? ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:642:1: ( () ( (lv_name_1_0= ruleEString ) ) ( (lv_attributeDomain_2_0= ruleAttributeDomain ) )? )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:642:1: ( () ( (lv_name_1_0= ruleEString ) ) ( (lv_attributeDomain_2_0= ruleAttributeDomain ) )? )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:642:2: () ( (lv_name_1_0= ruleEString ) ) ( (lv_attributeDomain_2_0= ruleAttributeDomain ) )?
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:642:2: ()
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:643:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getAttributeAccess().getAttributeAction_0(),
                        current);
                

            }

            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:648:2: ( (lv_name_1_0= ruleEString ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:649:1: (lv_name_1_0= ruleEString )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:649:1: (lv_name_1_0= ruleEString )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:650:3: lv_name_1_0= ruleEString
            {
             
            	        newCompositeNode(grammarAccess.getAttributeAccess().getNameEStringParserRuleCall_1_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleAttribute1374);
            lv_name_1_0=ruleEString();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getAttributeRule());
            	        }
                   		set(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"EString");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:666:2: ( (lv_attributeDomain_2_0= ruleAttributeDomain ) )?
            int alt16=2;
            int LA16_0 = input.LA(1);

            if ( ((LA16_0>=RULE_STRING && LA16_0<=RULE_ID)) ) {
                alt16=1;
            }
            switch (alt16) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:667:1: (lv_attributeDomain_2_0= ruleAttributeDomain )
                    {
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:667:1: (lv_attributeDomain_2_0= ruleAttributeDomain )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:668:3: lv_attributeDomain_2_0= ruleAttributeDomain
                    {
                     
                    	        newCompositeNode(grammarAccess.getAttributeAccess().getAttributeDomainAttributeDomainParserRuleCall_2_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleAttributeDomain_in_ruleAttribute1395);
                    lv_attributeDomain_2_0=ruleAttributeDomain();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getAttributeRule());
                    	        }
                           		set(
                           			current, 
                           			"attributeDomain",
                            		lv_attributeDomain_2_0, 
                            		"AttributeDomain");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }
                    break;

            }


            }


            }

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


    // $ANTLR start "entryRuleAttributeDomain"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:692:1: entryRuleAttributeDomain returns [EObject current=null] : iv_ruleAttributeDomain= ruleAttributeDomain EOF ;
    public final EObject entryRuleAttributeDomain() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAttributeDomain = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:693:2: (iv_ruleAttributeDomain= ruleAttributeDomain EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:694:2: iv_ruleAttributeDomain= ruleAttributeDomain EOF
            {
             newCompositeNode(grammarAccess.getAttributeDomainRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleAttributeDomain_in_entryRuleAttributeDomain1432);
            iv_ruleAttributeDomain=ruleAttributeDomain();

            state._fsp--;

             current =iv_ruleAttributeDomain; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleAttributeDomain1442); 

            }

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


    // $ANTLR start "ruleAttributeDomain"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:701:1: ruleAttributeDomain returns [EObject current=null] : ( ( ( ruleEString ) ) (otherlv_1= '(' ( (lv_length_2_0= ruleEInt ) ) otherlv_3= ')' )? (otherlv_4= 'default' ( (lv_default_5_0= ruleEString ) ) )? ) ;
    public final EObject ruleAttributeDomain() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_4=null;
        AntlrDatatypeRuleToken lv_length_2_0 = null;

        AntlrDatatypeRuleToken lv_default_5_0 = null;


         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:704:28: ( ( ( ( ruleEString ) ) (otherlv_1= '(' ( (lv_length_2_0= ruleEInt ) ) otherlv_3= ')' )? (otherlv_4= 'default' ( (lv_default_5_0= ruleEString ) ) )? ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:705:1: ( ( ( ruleEString ) ) (otherlv_1= '(' ( (lv_length_2_0= ruleEInt ) ) otherlv_3= ')' )? (otherlv_4= 'default' ( (lv_default_5_0= ruleEString ) ) )? )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:705:1: ( ( ( ruleEString ) ) (otherlv_1= '(' ( (lv_length_2_0= ruleEInt ) ) otherlv_3= ')' )? (otherlv_4= 'default' ( (lv_default_5_0= ruleEString ) ) )? )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:705:2: ( ( ruleEString ) ) (otherlv_1= '(' ( (lv_length_2_0= ruleEInt ) ) otherlv_3= ')' )? (otherlv_4= 'default' ( (lv_default_5_0= ruleEString ) ) )?
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:705:2: ( ( ruleEString ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:706:1: ( ruleEString )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:706:1: ( ruleEString )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:707:3: ruleEString
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getAttributeDomainRule());
            	        }
                    
             
            	        newCompositeNode(grammarAccess.getAttributeDomainAccess().getDomainDomainCrossReference_0_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleAttributeDomain1490);
            ruleEString();

            state._fsp--;

             
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:720:2: (otherlv_1= '(' ( (lv_length_2_0= ruleEInt ) ) otherlv_3= ')' )?
            int alt17=2;
            int LA17_0 = input.LA(1);

            if ( (LA17_0==21) ) {
                alt17=1;
            }
            switch (alt17) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:720:4: otherlv_1= '(' ( (lv_length_2_0= ruleEInt ) ) otherlv_3= ')'
                    {
                    otherlv_1=(Token)match(input,21,FollowSets000.FOLLOW_21_in_ruleAttributeDomain1503); 

                        	newLeafNode(otherlv_1, grammarAccess.getAttributeDomainAccess().getLeftParenthesisKeyword_1_0());
                        
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:724:1: ( (lv_length_2_0= ruleEInt ) )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:725:1: (lv_length_2_0= ruleEInt )
                    {
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:725:1: (lv_length_2_0= ruleEInt )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:726:3: lv_length_2_0= ruleEInt
                    {
                     
                    	        newCompositeNode(grammarAccess.getAttributeDomainAccess().getLengthEIntParserRuleCall_1_1_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleEInt_in_ruleAttributeDomain1524);
                    lv_length_2_0=ruleEInt();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getAttributeDomainRule());
                    	        }
                           		set(
                           			current, 
                           			"length",
                            		lv_length_2_0, 
                            		"EInt");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    otherlv_3=(Token)match(input,22,FollowSets000.FOLLOW_22_in_ruleAttributeDomain1536); 

                        	newLeafNode(otherlv_3, grammarAccess.getAttributeDomainAccess().getRightParenthesisKeyword_1_2());
                        

                    }
                    break;

            }

            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:746:3: (otherlv_4= 'default' ( (lv_default_5_0= ruleEString ) ) )?
            int alt18=2;
            int LA18_0 = input.LA(1);

            if ( (LA18_0==23) ) {
                alt18=1;
            }
            switch (alt18) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:746:5: otherlv_4= 'default' ( (lv_default_5_0= ruleEString ) )
                    {
                    otherlv_4=(Token)match(input,23,FollowSets000.FOLLOW_23_in_ruleAttributeDomain1551); 

                        	newLeafNode(otherlv_4, grammarAccess.getAttributeDomainAccess().getDefaultKeyword_2_0());
                        
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:750:1: ( (lv_default_5_0= ruleEString ) )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:751:1: (lv_default_5_0= ruleEString )
                    {
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:751:1: (lv_default_5_0= ruleEString )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:752:3: lv_default_5_0= ruleEString
                    {
                     
                    	        newCompositeNode(grammarAccess.getAttributeDomainAccess().getDefaultEStringParserRuleCall_2_1_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleAttributeDomain1572);
                    lv_default_5_0=ruleEString();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getAttributeDomainRule());
                    	        }
                           		set(
                           			current, 
                           			"default",
                            		lv_default_5_0, 
                            		"EString");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }
                    break;

            }


            }


            }

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


    // $ANTLR start "entryRuleKey"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:776:1: entryRuleKey returns [EObject current=null] : iv_ruleKey= ruleKey EOF ;
    public final EObject entryRuleKey() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleKey = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:777:2: (iv_ruleKey= ruleKey EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:778:2: iv_ruleKey= ruleKey EOF
            {
             newCompositeNode(grammarAccess.getKeyRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleKey_in_entryRuleKey1610);
            iv_ruleKey=ruleKey();

            state._fsp--;

             current =iv_ruleKey; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleKey1620); 

            }

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


    // $ANTLR start "ruleKey"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:785:1: ruleKey returns [EObject current=null] : ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '(' ( ( ruleEString ) ) (otherlv_3= ',' ( ( ruleEString ) ) )* otherlv_5= ')' ) ;
    public final EObject ruleKey() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        AntlrDatatypeRuleToken lv_name_0_0 = null;


         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:788:28: ( ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '(' ( ( ruleEString ) ) (otherlv_3= ',' ( ( ruleEString ) ) )* otherlv_5= ')' ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:789:1: ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '(' ( ( ruleEString ) ) (otherlv_3= ',' ( ( ruleEString ) ) )* otherlv_5= ')' )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:789:1: ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '(' ( ( ruleEString ) ) (otherlv_3= ',' ( ( ruleEString ) ) )* otherlv_5= ')' )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:789:2: ( (lv_name_0_0= ruleEString ) ) otherlv_1= '(' ( ( ruleEString ) ) (otherlv_3= ',' ( ( ruleEString ) ) )* otherlv_5= ')'
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:789:2: ( (lv_name_0_0= ruleEString ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:790:1: (lv_name_0_0= ruleEString )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:790:1: (lv_name_0_0= ruleEString )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:791:3: lv_name_0_0= ruleEString
            {
             
            	        newCompositeNode(grammarAccess.getKeyAccess().getNameEStringParserRuleCall_0_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleKey1666);
            lv_name_0_0=ruleEString();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getKeyRule());
            	        }
                   		set(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"EString");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_1=(Token)match(input,21,FollowSets000.FOLLOW_21_in_ruleKey1678); 

                	newLeafNode(otherlv_1, grammarAccess.getKeyAccess().getLeftParenthesisKeyword_1());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:811:1: ( ( ruleEString ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:812:1: ( ruleEString )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:812:1: ( ruleEString )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:813:3: ruleEString
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getKeyRule());
            	        }
                    
             
            	        newCompositeNode(grammarAccess.getKeyAccess().getKeyAttributesAttributeCrossReference_2_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleKey1701);
            ruleEString();

            state._fsp--;

             
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:826:2: (otherlv_3= ',' ( ( ruleEString ) ) )*
            loop19:
            do {
                int alt19=2;
                int LA19_0 = input.LA(1);

                if ( (LA19_0==13) ) {
                    alt19=1;
                }


                switch (alt19) {
            	case 1 :
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:826:4: otherlv_3= ',' ( ( ruleEString ) )
            	    {
            	    otherlv_3=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleKey1714); 

            	        	newLeafNode(otherlv_3, grammarAccess.getKeyAccess().getCommaKeyword_3_0());
            	        
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:830:1: ( ( ruleEString ) )
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:831:1: ( ruleEString )
            	    {
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:831:1: ( ruleEString )
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:832:3: ruleEString
            	    {

            	    			if (current==null) {
            	    	            current = createModelElement(grammarAccess.getKeyRule());
            	    	        }
            	            
            	     
            	    	        newCompositeNode(grammarAccess.getKeyAccess().getKeyAttributesAttributeCrossReference_3_1_0()); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleKey1737);
            	    ruleEString();

            	    state._fsp--;

            	     
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }


            	    }
            	    break;

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

            otherlv_5=(Token)match(input,22,FollowSets000.FOLLOW_22_in_ruleKey1751); 

                	newLeafNode(otherlv_5, grammarAccess.getKeyAccess().getRightParenthesisKeyword_4());
                

            }


            }

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


    // $ANTLR start "entryRuleDomain"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:857:1: entryRuleDomain returns [EObject current=null] : iv_ruleDomain= ruleDomain EOF ;
    public final EObject entryRuleDomain() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDomain = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:858:2: (iv_ruleDomain= ruleDomain EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:859:2: iv_ruleDomain= ruleDomain EOF
            {
             newCompositeNode(grammarAccess.getDomainRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleDomain_in_entryRuleDomain1787);
            iv_ruleDomain=ruleDomain();

            state._fsp--;

             current =iv_ruleDomain; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleDomain1797); 

            }

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


    // $ANTLR start "ruleDomain"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:866:1: ruleDomain returns [EObject current=null] : ( () ( (lv_name_1_0= ruleEString ) ) otherlv_2= 'extends' ( (lv_primitiveDomain_3_0= rulePrimitiveDomain ) ) ) ;
    public final EObject ruleDomain() throws RecognitionException {
        EObject current = null;

        Token otherlv_2=null;
        AntlrDatatypeRuleToken lv_name_1_0 = null;

        AntlrDatatypeRuleToken lv_primitiveDomain_3_0 = null;


         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:869:28: ( ( () ( (lv_name_1_0= ruleEString ) ) otherlv_2= 'extends' ( (lv_primitiveDomain_3_0= rulePrimitiveDomain ) ) ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:870:1: ( () ( (lv_name_1_0= ruleEString ) ) otherlv_2= 'extends' ( (lv_primitiveDomain_3_0= rulePrimitiveDomain ) ) )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:870:1: ( () ( (lv_name_1_0= ruleEString ) ) otherlv_2= 'extends' ( (lv_primitiveDomain_3_0= rulePrimitiveDomain ) ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:870:2: () ( (lv_name_1_0= ruleEString ) ) otherlv_2= 'extends' ( (lv_primitiveDomain_3_0= rulePrimitiveDomain ) )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:870:2: ()
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:871:5: 
            {

                    current = forceCreateModelElement(
                        grammarAccess.getDomainAccess().getDomainAction_0(),
                        current);
                

            }

            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:876:2: ( (lv_name_1_0= ruleEString ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:877:1: (lv_name_1_0= ruleEString )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:877:1: (lv_name_1_0= ruleEString )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:878:3: lv_name_1_0= ruleEString
            {
             
            	        newCompositeNode(grammarAccess.getDomainAccess().getNameEStringParserRuleCall_1_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleDomain1852);
            lv_name_1_0=ruleEString();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getDomainRule());
            	        }
                   		set(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"EString");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_2=(Token)match(input,24,FollowSets000.FOLLOW_24_in_ruleDomain1864); 

                	newLeafNode(otherlv_2, grammarAccess.getDomainAccess().getExtendsKeyword_2());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:898:1: ( (lv_primitiveDomain_3_0= rulePrimitiveDomain ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:899:1: (lv_primitiveDomain_3_0= rulePrimitiveDomain )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:899:1: (lv_primitiveDomain_3_0= rulePrimitiveDomain )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:900:3: lv_primitiveDomain_3_0= rulePrimitiveDomain
            {
             
            	        newCompositeNode(grammarAccess.getDomainAccess().getPrimitiveDomainPrimitiveDomainParserRuleCall_3_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_rulePrimitiveDomain_in_ruleDomain1885);
            lv_primitiveDomain_3_0=rulePrimitiveDomain();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getDomainRule());
            	        }
                   		set(
                   			current, 
                   			"primitiveDomain",
                    		lv_primitiveDomain_3_0, 
                    		"PrimitiveDomain");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }


            }


            }

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


    // $ANTLR start "entryRuleRelationship"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:924:1: entryRuleRelationship returns [EObject current=null] : iv_ruleRelationship= ruleRelationship EOF ;
    public final EObject entryRuleRelationship() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRelationship = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:925:2: (iv_ruleRelationship= ruleRelationship EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:926:2: iv_ruleRelationship= ruleRelationship EOF
            {
             newCompositeNode(grammarAccess.getRelationshipRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleRelationship_in_entryRuleRelationship1921);
            iv_ruleRelationship=ruleRelationship();

            state._fsp--;

             current =iv_ruleRelationship; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleRelationship1931); 

            }

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


    // $ANTLR start "ruleRelationship"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:933:1: ruleRelationship returns [EObject current=null] : ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' otherlv_2= 'entitiesInRelationship' otherlv_3= '{' ( (lv_entities_4_0= ruleRegularEntity ) ) (otherlv_5= ',' ( (lv_entities_6_0= ruleRegularEntity ) ) )* otherlv_7= '}' (otherlv_8= 'attributeSet' otherlv_9= '{' ( (lv_relationshipAttributes_10_0= ruleAttribute ) ) (otherlv_11= ',' ( (lv_relationshipAttributes_12_0= ruleAttribute ) ) )* otherlv_13= '}' )? otherlv_14= '}' ) ;
    public final EObject ruleRelationship() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_8=null;
        Token otherlv_9=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        Token otherlv_14=null;
        AntlrDatatypeRuleToken lv_name_0_0 = null;

        EObject lv_entities_4_0 = null;

        EObject lv_entities_6_0 = null;

        EObject lv_relationshipAttributes_10_0 = null;

        EObject lv_relationshipAttributes_12_0 = null;


         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:936:28: ( ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' otherlv_2= 'entitiesInRelationship' otherlv_3= '{' ( (lv_entities_4_0= ruleRegularEntity ) ) (otherlv_5= ',' ( (lv_entities_6_0= ruleRegularEntity ) ) )* otherlv_7= '}' (otherlv_8= 'attributeSet' otherlv_9= '{' ( (lv_relationshipAttributes_10_0= ruleAttribute ) ) (otherlv_11= ',' ( (lv_relationshipAttributes_12_0= ruleAttribute ) ) )* otherlv_13= '}' )? otherlv_14= '}' ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:937:1: ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' otherlv_2= 'entitiesInRelationship' otherlv_3= '{' ( (lv_entities_4_0= ruleRegularEntity ) ) (otherlv_5= ',' ( (lv_entities_6_0= ruleRegularEntity ) ) )* otherlv_7= '}' (otherlv_8= 'attributeSet' otherlv_9= '{' ( (lv_relationshipAttributes_10_0= ruleAttribute ) ) (otherlv_11= ',' ( (lv_relationshipAttributes_12_0= ruleAttribute ) ) )* otherlv_13= '}' )? otherlv_14= '}' )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:937:1: ( ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' otherlv_2= 'entitiesInRelationship' otherlv_3= '{' ( (lv_entities_4_0= ruleRegularEntity ) ) (otherlv_5= ',' ( (lv_entities_6_0= ruleRegularEntity ) ) )* otherlv_7= '}' (otherlv_8= 'attributeSet' otherlv_9= '{' ( (lv_relationshipAttributes_10_0= ruleAttribute ) ) (otherlv_11= ',' ( (lv_relationshipAttributes_12_0= ruleAttribute ) ) )* otherlv_13= '}' )? otherlv_14= '}' )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:937:2: ( (lv_name_0_0= ruleEString ) ) otherlv_1= '{' otherlv_2= 'entitiesInRelationship' otherlv_3= '{' ( (lv_entities_4_0= ruleRegularEntity ) ) (otherlv_5= ',' ( (lv_entities_6_0= ruleRegularEntity ) ) )* otherlv_7= '}' (otherlv_8= 'attributeSet' otherlv_9= '{' ( (lv_relationshipAttributes_10_0= ruleAttribute ) ) (otherlv_11= ',' ( (lv_relationshipAttributes_12_0= ruleAttribute ) ) )* otherlv_13= '}' )? otherlv_14= '}'
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:937:2: ( (lv_name_0_0= ruleEString ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:938:1: (lv_name_0_0= ruleEString )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:938:1: (lv_name_0_0= ruleEString )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:939:3: lv_name_0_0= ruleEString
            {
             
            	        newCompositeNode(grammarAccess.getRelationshipAccess().getNameEStringParserRuleCall_0_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleRelationship1977);
            lv_name_0_0=ruleEString();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getRelationshipRule());
            	        }
                   		set(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"EString");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_1=(Token)match(input,11,FollowSets000.FOLLOW_11_in_ruleRelationship1989); 

                	newLeafNode(otherlv_1, grammarAccess.getRelationshipAccess().getLeftCurlyBracketKeyword_1());
                
            otherlv_2=(Token)match(input,25,FollowSets000.FOLLOW_25_in_ruleRelationship2001); 

                	newLeafNode(otherlv_2, grammarAccess.getRelationshipAccess().getEntitiesInRelationshipKeyword_2());
                
            otherlv_3=(Token)match(input,11,FollowSets000.FOLLOW_11_in_ruleRelationship2013); 

                	newLeafNode(otherlv_3, grammarAccess.getRelationshipAccess().getLeftCurlyBracketKeyword_3());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:967:1: ( (lv_entities_4_0= ruleRegularEntity ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:968:1: (lv_entities_4_0= ruleRegularEntity )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:968:1: (lv_entities_4_0= ruleRegularEntity )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:969:3: lv_entities_4_0= ruleRegularEntity
            {
             
            	        newCompositeNode(grammarAccess.getRelationshipAccess().getEntitiesRegularEntityParserRuleCall_4_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleRegularEntity_in_ruleRelationship2034);
            lv_entities_4_0=ruleRegularEntity();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getRelationshipRule());
            	        }
                   		add(
                   			current, 
                   			"entities",
                    		lv_entities_4_0, 
                    		"RegularEntity");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:985:2: (otherlv_5= ',' ( (lv_entities_6_0= ruleRegularEntity ) ) )*
            loop20:
            do {
                int alt20=2;
                int LA20_0 = input.LA(1);

                if ( (LA20_0==13) ) {
                    alt20=1;
                }


                switch (alt20) {
            	case 1 :
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:985:4: otherlv_5= ',' ( (lv_entities_6_0= ruleRegularEntity ) )
            	    {
            	    otherlv_5=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleRelationship2047); 

            	        	newLeafNode(otherlv_5, grammarAccess.getRelationshipAccess().getCommaKeyword_5_0());
            	        
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:989:1: ( (lv_entities_6_0= ruleRegularEntity ) )
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:990:1: (lv_entities_6_0= ruleRegularEntity )
            	    {
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:990:1: (lv_entities_6_0= ruleRegularEntity )
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:991:3: lv_entities_6_0= ruleRegularEntity
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getRelationshipAccess().getEntitiesRegularEntityParserRuleCall_5_1_0()); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleRegularEntity_in_ruleRelationship2068);
            	    lv_entities_6_0=ruleRegularEntity();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getRelationshipRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"entities",
            	            		lv_entities_6_0, 
            	            		"RegularEntity");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }


            	    }
            	    break;

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

            otherlv_7=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleRelationship2082); 

                	newLeafNode(otherlv_7, grammarAccess.getRelationshipAccess().getRightCurlyBracketKeyword_6());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1011:1: (otherlv_8= 'attributeSet' otherlv_9= '{' ( (lv_relationshipAttributes_10_0= ruleAttribute ) ) (otherlv_11= ',' ( (lv_relationshipAttributes_12_0= ruleAttribute ) ) )* otherlv_13= '}' )?
            int alt22=2;
            int LA22_0 = input.LA(1);

            if ( (LA22_0==18) ) {
                alt22=1;
            }
            switch (alt22) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1011:3: otherlv_8= 'attributeSet' otherlv_9= '{' ( (lv_relationshipAttributes_10_0= ruleAttribute ) ) (otherlv_11= ',' ( (lv_relationshipAttributes_12_0= ruleAttribute ) ) )* otherlv_13= '}'
                    {
                    otherlv_8=(Token)match(input,18,FollowSets000.FOLLOW_18_in_ruleRelationship2095); 

                        	newLeafNode(otherlv_8, grammarAccess.getRelationshipAccess().getAttributeSetKeyword_7_0());
                        
                    otherlv_9=(Token)match(input,11,FollowSets000.FOLLOW_11_in_ruleRelationship2107); 

                        	newLeafNode(otherlv_9, grammarAccess.getRelationshipAccess().getLeftCurlyBracketKeyword_7_1());
                        
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1019:1: ( (lv_relationshipAttributes_10_0= ruleAttribute ) )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1020:1: (lv_relationshipAttributes_10_0= ruleAttribute )
                    {
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1020:1: (lv_relationshipAttributes_10_0= ruleAttribute )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1021:3: lv_relationshipAttributes_10_0= ruleAttribute
                    {
                     
                    	        newCompositeNode(grammarAccess.getRelationshipAccess().getRelationshipAttributesAttributeParserRuleCall_7_2_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleAttribute_in_ruleRelationship2128);
                    lv_relationshipAttributes_10_0=ruleAttribute();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getRelationshipRule());
                    	        }
                           		add(
                           			current, 
                           			"relationshipAttributes",
                            		lv_relationshipAttributes_10_0, 
                            		"Attribute");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }

                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1037:2: (otherlv_11= ',' ( (lv_relationshipAttributes_12_0= ruleAttribute ) ) )*
                    loop21:
                    do {
                        int alt21=2;
                        int LA21_0 = input.LA(1);

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


                        switch (alt21) {
                    	case 1 :
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1037:4: otherlv_11= ',' ( (lv_relationshipAttributes_12_0= ruleAttribute ) )
                    	    {
                    	    otherlv_11=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleRelationship2141); 

                    	        	newLeafNode(otherlv_11, grammarAccess.getRelationshipAccess().getCommaKeyword_7_3_0());
                    	        
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1041:1: ( (lv_relationshipAttributes_12_0= ruleAttribute ) )
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1042:1: (lv_relationshipAttributes_12_0= ruleAttribute )
                    	    {
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1042:1: (lv_relationshipAttributes_12_0= ruleAttribute )
                    	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1043:3: lv_relationshipAttributes_12_0= ruleAttribute
                    	    {
                    	     
                    	    	        newCompositeNode(grammarAccess.getRelationshipAccess().getRelationshipAttributesAttributeParserRuleCall_7_3_1_0()); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_ruleAttribute_in_ruleRelationship2162);
                    	    lv_relationshipAttributes_12_0=ruleAttribute();

                    	    state._fsp--;


                    	    	        if (current==null) {
                    	    	            current = createModelElementForParent(grammarAccess.getRelationshipRule());
                    	    	        }
                    	           		add(
                    	           			current, 
                    	           			"relationshipAttributes",
                    	            		lv_relationshipAttributes_12_0, 
                    	            		"Attribute");
                    	    	        afterParserOrEnumRuleCall();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

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

                    otherlv_13=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleRelationship2176); 

                        	newLeafNode(otherlv_13, grammarAccess.getRelationshipAccess().getRightCurlyBracketKeyword_7_4());
                        

                    }
                    break;

            }

            otherlv_14=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleRelationship2190); 

                	newLeafNode(otherlv_14, grammarAccess.getRelationshipAccess().getRightCurlyBracketKeyword_8());
                

            }


            }

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


    // $ANTLR start "entryRuleISA"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1075:1: entryRuleISA returns [EObject current=null] : iv_ruleISA= ruleISA EOF ;
    public final EObject entryRuleISA() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleISA = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1076:2: (iv_ruleISA= ruleISA EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1077:2: iv_ruleISA= ruleISA EOF
            {
             newCompositeNode(grammarAccess.getISARule()); 
            pushFollow(FollowSets000.FOLLOW_ruleISA_in_entryRuleISA2226);
            iv_ruleISA=ruleISA();

            state._fsp--;

             current =iv_ruleISA; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleISA2236); 

            }

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


    // $ANTLR start "ruleISA"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1084:1: ruleISA returns [EObject current=null] : (otherlv_0= 'ISA' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'supertype' ( (lv_supertype_4_0= ruleRegularEntity ) ) otherlv_5= 'subtypes' otherlv_6= '(' ( ( ruleEString ) ) (otherlv_8= ',' ( ( ruleEString ) ) )* otherlv_10= ')' otherlv_11= 'classificationAttribute' ( ( ruleEString ) ) otherlv_13= '}' ) ;
    public final EObject ruleISA() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_6=null;
        Token otherlv_8=null;
        Token otherlv_10=null;
        Token otherlv_11=null;
        Token otherlv_13=null;
        AntlrDatatypeRuleToken lv_name_1_0 = null;

        EObject lv_supertype_4_0 = null;


         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1087:28: ( (otherlv_0= 'ISA' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'supertype' ( (lv_supertype_4_0= ruleRegularEntity ) ) otherlv_5= 'subtypes' otherlv_6= '(' ( ( ruleEString ) ) (otherlv_8= ',' ( ( ruleEString ) ) )* otherlv_10= ')' otherlv_11= 'classificationAttribute' ( ( ruleEString ) ) otherlv_13= '}' ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1088:1: (otherlv_0= 'ISA' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'supertype' ( (lv_supertype_4_0= ruleRegularEntity ) ) otherlv_5= 'subtypes' otherlv_6= '(' ( ( ruleEString ) ) (otherlv_8= ',' ( ( ruleEString ) ) )* otherlv_10= ')' otherlv_11= 'classificationAttribute' ( ( ruleEString ) ) otherlv_13= '}' )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1088:1: (otherlv_0= 'ISA' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'supertype' ( (lv_supertype_4_0= ruleRegularEntity ) ) otherlv_5= 'subtypes' otherlv_6= '(' ( ( ruleEString ) ) (otherlv_8= ',' ( ( ruleEString ) ) )* otherlv_10= ')' otherlv_11= 'classificationAttribute' ( ( ruleEString ) ) otherlv_13= '}' )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1088:3: otherlv_0= 'ISA' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'supertype' ( (lv_supertype_4_0= ruleRegularEntity ) ) otherlv_5= 'subtypes' otherlv_6= '(' ( ( ruleEString ) ) (otherlv_8= ',' ( ( ruleEString ) ) )* otherlv_10= ')' otherlv_11= 'classificationAttribute' ( ( ruleEString ) ) otherlv_13= '}'
            {
            otherlv_0=(Token)match(input,26,FollowSets000.FOLLOW_26_in_ruleISA2273); 

                	newLeafNode(otherlv_0, grammarAccess.getISAAccess().getISAKeyword_0());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1092:1: ( (lv_name_1_0= ruleEString ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1093:1: (lv_name_1_0= ruleEString )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1093:1: (lv_name_1_0= ruleEString )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1094:3: lv_name_1_0= ruleEString
            {
             
            	        newCompositeNode(grammarAccess.getISAAccess().getNameEStringParserRuleCall_1_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleISA2294);
            lv_name_1_0=ruleEString();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getISARule());
            	        }
                   		set(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"EString");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_2=(Token)match(input,11,FollowSets000.FOLLOW_11_in_ruleISA2306); 

                	newLeafNode(otherlv_2, grammarAccess.getISAAccess().getLeftCurlyBracketKeyword_2());
                
            otherlv_3=(Token)match(input,27,FollowSets000.FOLLOW_27_in_ruleISA2318); 

                	newLeafNode(otherlv_3, grammarAccess.getISAAccess().getSupertypeKeyword_3());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1118:1: ( (lv_supertype_4_0= ruleRegularEntity ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1119:1: (lv_supertype_4_0= ruleRegularEntity )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1119:1: (lv_supertype_4_0= ruleRegularEntity )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1120:3: lv_supertype_4_0= ruleRegularEntity
            {
             
            	        newCompositeNode(grammarAccess.getISAAccess().getSupertypeRegularEntityParserRuleCall_4_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleRegularEntity_in_ruleISA2339);
            lv_supertype_4_0=ruleRegularEntity();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getISARule());
            	        }
                   		set(
                   			current, 
                   			"supertype",
                    		lv_supertype_4_0, 
                    		"RegularEntity");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_5=(Token)match(input,28,FollowSets000.FOLLOW_28_in_ruleISA2351); 

                	newLeafNode(otherlv_5, grammarAccess.getISAAccess().getSubtypesKeyword_5());
                
            otherlv_6=(Token)match(input,21,FollowSets000.FOLLOW_21_in_ruleISA2363); 

                	newLeafNode(otherlv_6, grammarAccess.getISAAccess().getLeftParenthesisKeyword_6());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1144:1: ( ( ruleEString ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1145:1: ( ruleEString )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1145:1: ( ruleEString )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1146:3: ruleEString
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getISARule());
            	        }
                    
             
            	        newCompositeNode(grammarAccess.getISAAccess().getSubtypesEntityCrossReference_7_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleISA2386);
            ruleEString();

            state._fsp--;

             
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1159:2: (otherlv_8= ',' ( ( ruleEString ) ) )*
            loop23:
            do {
                int alt23=2;
                int LA23_0 = input.LA(1);

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


                switch (alt23) {
            	case 1 :
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1159:4: otherlv_8= ',' ( ( ruleEString ) )
            	    {
            	    otherlv_8=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleISA2399); 

            	        	newLeafNode(otherlv_8, grammarAccess.getISAAccess().getCommaKeyword_8_0());
            	        
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1163:1: ( ( ruleEString ) )
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1164:1: ( ruleEString )
            	    {
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1164:1: ( ruleEString )
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1165:3: ruleEString
            	    {

            	    			if (current==null) {
            	    	            current = createModelElement(grammarAccess.getISARule());
            	    	        }
            	            
            	     
            	    	        newCompositeNode(grammarAccess.getISAAccess().getSubtypesEntityCrossReference_8_1_0()); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleISA2422);
            	    ruleEString();

            	    state._fsp--;

            	     
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }


            	    }
            	    break;

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

            otherlv_10=(Token)match(input,22,FollowSets000.FOLLOW_22_in_ruleISA2436); 

                	newLeafNode(otherlv_10, grammarAccess.getISAAccess().getRightParenthesisKeyword_9());
                
            otherlv_11=(Token)match(input,29,FollowSets000.FOLLOW_29_in_ruleISA2448); 

                	newLeafNode(otherlv_11, grammarAccess.getISAAccess().getClassificationAttributeKeyword_10());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1186:1: ( ( ruleEString ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1187:1: ( ruleEString )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1187:1: ( ruleEString )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1188:3: ruleEString
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getISARule());
            	        }
                    
             
            	        newCompositeNode(grammarAccess.getISAAccess().getClassificationAttributeAttributeCrossReference_11_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleISA2471);
            ruleEString();

            state._fsp--;

             
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_13=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleISA2483); 

                	newLeafNode(otherlv_13, grammarAccess.getISAAccess().getRightCurlyBracketKeyword_12());
                

            }


            }

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


    // $ANTLR start "entryRuleCategorisation"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1213:1: entryRuleCategorisation returns [EObject current=null] : iv_ruleCategorisation= ruleCategorisation EOF ;
    public final EObject entryRuleCategorisation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCategorisation = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1214:2: (iv_ruleCategorisation= ruleCategorisation EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1215:2: iv_ruleCategorisation= ruleCategorisation EOF
            {
             newCompositeNode(grammarAccess.getCategorisationRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleCategorisation_in_entryRuleCategorisation2519);
            iv_ruleCategorisation=ruleCategorisation();

            state._fsp--;

             current =iv_ruleCategorisation; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCategorisation2529); 

            }

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


    // $ANTLR start "ruleCategorisation"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1222:1: ruleCategorisation returns [EObject current=null] : (otherlv_0= 'Categorisation' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'categorisedEntity' ( ( ruleEString ) ) otherlv_5= 'categorisationEntities' ( (lv_categorisationEntities_6_0= ruleCategories ) ) otherlv_7= 'isPartial' ( (lv_isPartial_8_0= ruleEBoolean ) ) otherlv_9= '}' ) ;
    public final EObject ruleCategorisation() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        AntlrDatatypeRuleToken lv_name_1_0 = null;

        EObject lv_categorisationEntities_6_0 = null;

        AntlrDatatypeRuleToken lv_isPartial_8_0 = null;


         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1225:28: ( (otherlv_0= 'Categorisation' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'categorisedEntity' ( ( ruleEString ) ) otherlv_5= 'categorisationEntities' ( (lv_categorisationEntities_6_0= ruleCategories ) ) otherlv_7= 'isPartial' ( (lv_isPartial_8_0= ruleEBoolean ) ) otherlv_9= '}' ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1226:1: (otherlv_0= 'Categorisation' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'categorisedEntity' ( ( ruleEString ) ) otherlv_5= 'categorisationEntities' ( (lv_categorisationEntities_6_0= ruleCategories ) ) otherlv_7= 'isPartial' ( (lv_isPartial_8_0= ruleEBoolean ) ) otherlv_9= '}' )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1226:1: (otherlv_0= 'Categorisation' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'categorisedEntity' ( ( ruleEString ) ) otherlv_5= 'categorisationEntities' ( (lv_categorisationEntities_6_0= ruleCategories ) ) otherlv_7= 'isPartial' ( (lv_isPartial_8_0= ruleEBoolean ) ) otherlv_9= '}' )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1226:3: otherlv_0= 'Categorisation' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'categorisedEntity' ( ( ruleEString ) ) otherlv_5= 'categorisationEntities' ( (lv_categorisationEntities_6_0= ruleCategories ) ) otherlv_7= 'isPartial' ( (lv_isPartial_8_0= ruleEBoolean ) ) otherlv_9= '}'
            {
            otherlv_0=(Token)match(input,30,FollowSets000.FOLLOW_30_in_ruleCategorisation2566); 

                	newLeafNode(otherlv_0, grammarAccess.getCategorisationAccess().getCategorisationKeyword_0());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1230:1: ( (lv_name_1_0= ruleEString ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1231:1: (lv_name_1_0= ruleEString )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1231:1: (lv_name_1_0= ruleEString )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1232:3: lv_name_1_0= ruleEString
            {
             
            	        newCompositeNode(grammarAccess.getCategorisationAccess().getNameEStringParserRuleCall_1_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleCategorisation2587);
            lv_name_1_0=ruleEString();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getCategorisationRule());
            	        }
                   		set(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"EString");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_2=(Token)match(input,11,FollowSets000.FOLLOW_11_in_ruleCategorisation2599); 

                	newLeafNode(otherlv_2, grammarAccess.getCategorisationAccess().getLeftCurlyBracketKeyword_2());
                
            otherlv_3=(Token)match(input,31,FollowSets000.FOLLOW_31_in_ruleCategorisation2611); 

                	newLeafNode(otherlv_3, grammarAccess.getCategorisationAccess().getCategorisedEntityKeyword_3());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1256:1: ( ( ruleEString ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1257:1: ( ruleEString )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1257:1: ( ruleEString )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1258:3: ruleEString
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getCategorisationRule());
            	        }
                    
             
            	        newCompositeNode(grammarAccess.getCategorisationAccess().getCategorisedEntityEntityConceptCrossReference_4_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleCategorisation2634);
            ruleEString();

            state._fsp--;

             
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_5=(Token)match(input,32,FollowSets000.FOLLOW_32_in_ruleCategorisation2646); 

                	newLeafNode(otherlv_5, grammarAccess.getCategorisationAccess().getCategorisationEntitiesKeyword_5());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1275:1: ( (lv_categorisationEntities_6_0= ruleCategories ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1276:1: (lv_categorisationEntities_6_0= ruleCategories )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1276:1: (lv_categorisationEntities_6_0= ruleCategories )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1277:3: lv_categorisationEntities_6_0= ruleCategories
            {
             
            	        newCompositeNode(grammarAccess.getCategorisationAccess().getCategorisationEntitiesCategoriesParserRuleCall_6_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleCategories_in_ruleCategorisation2667);
            lv_categorisationEntities_6_0=ruleCategories();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getCategorisationRule());
            	        }
                   		set(
                   			current, 
                   			"categorisationEntities",
                    		lv_categorisationEntities_6_0, 
                    		"Categories");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_7=(Token)match(input,33,FollowSets000.FOLLOW_33_in_ruleCategorisation2679); 

                	newLeafNode(otherlv_7, grammarAccess.getCategorisationAccess().getIsPartialKeyword_7());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1297:1: ( (lv_isPartial_8_0= ruleEBoolean ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1298:1: (lv_isPartial_8_0= ruleEBoolean )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1298:1: (lv_isPartial_8_0= ruleEBoolean )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1299:3: lv_isPartial_8_0= ruleEBoolean
            {
             
            	        newCompositeNode(grammarAccess.getCategorisationAccess().getIsPartialEBooleanParserRuleCall_8_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEBoolean_in_ruleCategorisation2700);
            lv_isPartial_8_0=ruleEBoolean();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getCategorisationRule());
            	        }
                   		set(
                   			current, 
                   			"isPartial",
                    		true, 
                    		"EBoolean");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_9=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleCategorisation2712); 

                	newLeafNode(otherlv_9, grammarAccess.getCategorisationAccess().getRightCurlyBracketKeyword_9());
                

            }


            }

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


    // $ANTLR start "entryRuleIdentificationDependency"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1327:1: entryRuleIdentificationDependency returns [EObject current=null] : iv_ruleIdentificationDependency= ruleIdentificationDependency EOF ;
    public final EObject entryRuleIdentificationDependency() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleIdentificationDependency = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1328:2: (iv_ruleIdentificationDependency= ruleIdentificationDependency EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1329:2: iv_ruleIdentificationDependency= ruleIdentificationDependency EOF
            {
             newCompositeNode(grammarAccess.getIdentificationDependencyRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleIdentificationDependency_in_entryRuleIdentificationDependency2748);
            iv_ruleIdentificationDependency=ruleIdentificationDependency();

            state._fsp--;

             current =iv_ruleIdentificationDependency; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleIdentificationDependency2758); 

            }

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


    // $ANTLR start "ruleIdentificationDependency"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1336:1: ruleIdentificationDependency returns [EObject current=null] : (otherlv_0= 'IdentificationDependency' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'weakEntity' ( ( ruleEString ) ) otherlv_5= 'regularEntity' ( (lv_regularEntity_6_0= ruleRegularEntity ) ) otherlv_7= '}' ) ;
    public final EObject ruleIdentificationDependency() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        AntlrDatatypeRuleToken lv_name_1_0 = null;

        EObject lv_regularEntity_6_0 = null;


         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1339:28: ( (otherlv_0= 'IdentificationDependency' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'weakEntity' ( ( ruleEString ) ) otherlv_5= 'regularEntity' ( (lv_regularEntity_6_0= ruleRegularEntity ) ) otherlv_7= '}' ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1340:1: (otherlv_0= 'IdentificationDependency' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'weakEntity' ( ( ruleEString ) ) otherlv_5= 'regularEntity' ( (lv_regularEntity_6_0= ruleRegularEntity ) ) otherlv_7= '}' )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1340:1: (otherlv_0= 'IdentificationDependency' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'weakEntity' ( ( ruleEString ) ) otherlv_5= 'regularEntity' ( (lv_regularEntity_6_0= ruleRegularEntity ) ) otherlv_7= '}' )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1340:3: otherlv_0= 'IdentificationDependency' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'weakEntity' ( ( ruleEString ) ) otherlv_5= 'regularEntity' ( (lv_regularEntity_6_0= ruleRegularEntity ) ) otherlv_7= '}'
            {
            otherlv_0=(Token)match(input,34,FollowSets000.FOLLOW_34_in_ruleIdentificationDependency2795); 

                	newLeafNode(otherlv_0, grammarAccess.getIdentificationDependencyAccess().getIdentificationDependencyKeyword_0());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1344:1: ( (lv_name_1_0= ruleEString ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1345:1: (lv_name_1_0= ruleEString )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1345:1: (lv_name_1_0= ruleEString )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1346:3: lv_name_1_0= ruleEString
            {
             
            	        newCompositeNode(grammarAccess.getIdentificationDependencyAccess().getNameEStringParserRuleCall_1_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleIdentificationDependency2816);
            lv_name_1_0=ruleEString();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getIdentificationDependencyRule());
            	        }
                   		set(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"EString");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_2=(Token)match(input,11,FollowSets000.FOLLOW_11_in_ruleIdentificationDependency2828); 

                	newLeafNode(otherlv_2, grammarAccess.getIdentificationDependencyAccess().getLeftCurlyBracketKeyword_2());
                
            otherlv_3=(Token)match(input,35,FollowSets000.FOLLOW_35_in_ruleIdentificationDependency2840); 

                	newLeafNode(otherlv_3, grammarAccess.getIdentificationDependencyAccess().getWeakEntityKeyword_3());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1370:1: ( ( ruleEString ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1371:1: ( ruleEString )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1371:1: ( ruleEString )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1372:3: ruleEString
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getIdentificationDependencyRule());
            	        }
                    
             
            	        newCompositeNode(grammarAccess.getIdentificationDependencyAccess().getWeakEntityEntityCrossReference_4_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleIdentificationDependency2863);
            ruleEString();

            state._fsp--;

             
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_5=(Token)match(input,36,FollowSets000.FOLLOW_36_in_ruleIdentificationDependency2875); 

                	newLeafNode(otherlv_5, grammarAccess.getIdentificationDependencyAccess().getRegularEntityKeyword_5());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1389:1: ( (lv_regularEntity_6_0= ruleRegularEntity ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1390:1: (lv_regularEntity_6_0= ruleRegularEntity )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1390:1: (lv_regularEntity_6_0= ruleRegularEntity )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1391:3: lv_regularEntity_6_0= ruleRegularEntity
            {
             
            	        newCompositeNode(grammarAccess.getIdentificationDependencyAccess().getRegularEntityRegularEntityParserRuleCall_6_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleRegularEntity_in_ruleIdentificationDependency2896);
            lv_regularEntity_6_0=ruleRegularEntity();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getIdentificationDependencyRule());
            	        }
                   		set(
                   			current, 
                   			"regularEntity",
                    		lv_regularEntity_6_0, 
                    		"RegularEntity");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_7=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleIdentificationDependency2908); 

                	newLeafNode(otherlv_7, grammarAccess.getIdentificationDependencyAccess().getRightCurlyBracketKeyword_7());
                

            }


            }

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


    // $ANTLR start "entryRuleRegularEntity"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1419:1: entryRuleRegularEntity returns [EObject current=null] : iv_ruleRegularEntity= ruleRegularEntity EOF ;
    public final EObject entryRuleRegularEntity() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRegularEntity = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1420:2: (iv_ruleRegularEntity= ruleRegularEntity EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1421:2: iv_ruleRegularEntity= ruleRegularEntity EOF
            {
             newCompositeNode(grammarAccess.getRegularEntityRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleRegularEntity_in_entryRuleRegularEntity2944);
            iv_ruleRegularEntity=ruleRegularEntity();

            state._fsp--;

             current =iv_ruleRegularEntity; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleRegularEntity2954); 

            }

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


    // $ANTLR start "ruleRegularEntity"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1428:1: ruleRegularEntity returns [EObject current=null] : ( ( ( ruleEString ) ) otherlv_1= '(' ( (lv_min_2_0= ruleMinCardinality ) ) otherlv_3= ',' ( (lv_max_4_0= ruleMaxCardinality ) ) otherlv_5= ')' ( (lv_role_6_0= ruleEString ) )? ) ;
    public final EObject ruleRegularEntity() throws RecognitionException {
        EObject current = null;

        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        AntlrDatatypeRuleToken lv_min_2_0 = null;

        AntlrDatatypeRuleToken lv_max_4_0 = null;

        AntlrDatatypeRuleToken lv_role_6_0 = null;


         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1431:28: ( ( ( ( ruleEString ) ) otherlv_1= '(' ( (lv_min_2_0= ruleMinCardinality ) ) otherlv_3= ',' ( (lv_max_4_0= ruleMaxCardinality ) ) otherlv_5= ')' ( (lv_role_6_0= ruleEString ) )? ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1432:1: ( ( ( ruleEString ) ) otherlv_1= '(' ( (lv_min_2_0= ruleMinCardinality ) ) otherlv_3= ',' ( (lv_max_4_0= ruleMaxCardinality ) ) otherlv_5= ')' ( (lv_role_6_0= ruleEString ) )? )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1432:1: ( ( ( ruleEString ) ) otherlv_1= '(' ( (lv_min_2_0= ruleMinCardinality ) ) otherlv_3= ',' ( (lv_max_4_0= ruleMaxCardinality ) ) otherlv_5= ')' ( (lv_role_6_0= ruleEString ) )? )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1432:2: ( ( ruleEString ) ) otherlv_1= '(' ( (lv_min_2_0= ruleMinCardinality ) ) otherlv_3= ',' ( (lv_max_4_0= ruleMaxCardinality ) ) otherlv_5= ')' ( (lv_role_6_0= ruleEString ) )?
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1432:2: ( ( ruleEString ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1433:1: ( ruleEString )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1433:1: ( ruleEString )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1434:3: ruleEString
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getRegularEntityRule());
            	        }
                    
             
            	        newCompositeNode(grammarAccess.getRegularEntityAccess().getEntityEntityConceptCrossReference_0_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleRegularEntity3002);
            ruleEString();

            state._fsp--;

             
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_1=(Token)match(input,21,FollowSets000.FOLLOW_21_in_ruleRegularEntity3014); 

                	newLeafNode(otherlv_1, grammarAccess.getRegularEntityAccess().getLeftParenthesisKeyword_1());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1451:1: ( (lv_min_2_0= ruleMinCardinality ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1452:1: (lv_min_2_0= ruleMinCardinality )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1452:1: (lv_min_2_0= ruleMinCardinality )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1453:3: lv_min_2_0= ruleMinCardinality
            {
             
            	        newCompositeNode(grammarAccess.getRegularEntityAccess().getMinMinCardinalityParserRuleCall_2_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleMinCardinality_in_ruleRegularEntity3035);
            lv_min_2_0=ruleMinCardinality();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getRegularEntityRule());
            	        }
                   		set(
                   			current, 
                   			"min",
                    		lv_min_2_0, 
                    		"MinCardinality");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_3=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleRegularEntity3047); 

                	newLeafNode(otherlv_3, grammarAccess.getRegularEntityAccess().getCommaKeyword_3());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1473:1: ( (lv_max_4_0= ruleMaxCardinality ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1474:1: (lv_max_4_0= ruleMaxCardinality )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1474:1: (lv_max_4_0= ruleMaxCardinality )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1475:3: lv_max_4_0= ruleMaxCardinality
            {
             
            	        newCompositeNode(grammarAccess.getRegularEntityAccess().getMaxMaxCardinalityParserRuleCall_4_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleMaxCardinality_in_ruleRegularEntity3068);
            lv_max_4_0=ruleMaxCardinality();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getRegularEntityRule());
            	        }
                   		set(
                   			current, 
                   			"max",
                    		lv_max_4_0, 
                    		"MaxCardinality");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_5=(Token)match(input,22,FollowSets000.FOLLOW_22_in_ruleRegularEntity3080); 

                	newLeafNode(otherlv_5, grammarAccess.getRegularEntityAccess().getRightParenthesisKeyword_5());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1495:1: ( (lv_role_6_0= ruleEString ) )?
            int alt24=2;
            int LA24_0 = input.LA(1);

            if ( ((LA24_0>=RULE_STRING && LA24_0<=RULE_ID)) ) {
                alt24=1;
            }
            switch (alt24) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1496:1: (lv_role_6_0= ruleEString )
                    {
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1496:1: (lv_role_6_0= ruleEString )
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1497:3: lv_role_6_0= ruleEString
                    {
                     
                    	        newCompositeNode(grammarAccess.getRegularEntityAccess().getRoleEStringParserRuleCall_6_0()); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleRegularEntity3101);
                    lv_role_6_0=ruleEString();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getRegularEntityRule());
                    	        }
                           		set(
                           			current, 
                           			"role",
                            		lv_role_6_0, 
                            		"EString");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }
                    break;

            }


            }


            }

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


    // $ANTLR start "entryRuleMinCardinality"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1521:1: entryRuleMinCardinality returns [String current=null] : iv_ruleMinCardinality= ruleMinCardinality EOF ;
    public final String entryRuleMinCardinality() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleMinCardinality = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1522:2: (iv_ruleMinCardinality= ruleMinCardinality EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1523:2: iv_ruleMinCardinality= ruleMinCardinality EOF
            {
             newCompositeNode(grammarAccess.getMinCardinalityRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleMinCardinality_in_entryRuleMinCardinality3139);
            iv_ruleMinCardinality=ruleMinCardinality();

            state._fsp--;

             current =iv_ruleMinCardinality.getText(); 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleMinCardinality3150); 

            }

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


    // $ANTLR start "ruleMinCardinality"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1530:1: ruleMinCardinality returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'zero' | kw= 'one' ) ;
    public final AntlrDatatypeRuleToken ruleMinCardinality() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1533:28: ( (kw= 'zero' | kw= 'one' ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1534:1: (kw= 'zero' | kw= 'one' )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1534:1: (kw= 'zero' | kw= 'one' )
            int alt25=2;
            int LA25_0 = input.LA(1);

            if ( (LA25_0==37) ) {
                alt25=1;
            }
            else if ( (LA25_0==38) ) {
                alt25=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 25, 0, input);

                throw nvae;
            }
            switch (alt25) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1535:2: kw= 'zero'
                    {
                    kw=(Token)match(input,37,FollowSets000.FOLLOW_37_in_ruleMinCardinality3188); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getMinCardinalityAccess().getZeroKeyword_0()); 
                        

                    }
                    break;
                case 2 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1542:2: kw= 'one'
                    {
                    kw=(Token)match(input,38,FollowSets000.FOLLOW_38_in_ruleMinCardinality3207); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getMinCardinalityAccess().getOneKeyword_1()); 
                        

                    }
                    break;

            }


            }

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


    // $ANTLR start "entryRuleMaxCardinality"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1555:1: entryRuleMaxCardinality returns [String current=null] : iv_ruleMaxCardinality= ruleMaxCardinality EOF ;
    public final String entryRuleMaxCardinality() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleMaxCardinality = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1556:2: (iv_ruleMaxCardinality= ruleMaxCardinality EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1557:2: iv_ruleMaxCardinality= ruleMaxCardinality EOF
            {
             newCompositeNode(grammarAccess.getMaxCardinalityRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleMaxCardinality_in_entryRuleMaxCardinality3248);
            iv_ruleMaxCardinality=ruleMaxCardinality();

            state._fsp--;

             current =iv_ruleMaxCardinality.getText(); 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleMaxCardinality3259); 

            }

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


    // $ANTLR start "ruleMaxCardinality"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1564:1: ruleMaxCardinality returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'one' | kw= 'many' ) ;
    public final AntlrDatatypeRuleToken ruleMaxCardinality() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1567:28: ( (kw= 'one' | kw= 'many' ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1568:1: (kw= 'one' | kw= 'many' )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1568:1: (kw= 'one' | kw= 'many' )
            int alt26=2;
            int LA26_0 = input.LA(1);

            if ( (LA26_0==38) ) {
                alt26=1;
            }
            else if ( (LA26_0==39) ) {
                alt26=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 26, 0, input);

                throw nvae;
            }
            switch (alt26) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1569:2: kw= 'one'
                    {
                    kw=(Token)match(input,38,FollowSets000.FOLLOW_38_in_ruleMaxCardinality3297); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getMaxCardinalityAccess().getOneKeyword_0()); 
                        

                    }
                    break;
                case 2 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1576:2: kw= 'many'
                    {
                    kw=(Token)match(input,39,FollowSets000.FOLLOW_39_in_ruleMaxCardinality3316); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getMaxCardinalityAccess().getManyKeyword_1()); 
                        

                    }
                    break;

            }


            }

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


    // $ANTLR start "entryRuleCategories"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1589:1: entryRuleCategories returns [EObject current=null] : iv_ruleCategories= ruleCategories EOF ;
    public final EObject entryRuleCategories() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleCategories = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1590:2: (iv_ruleCategories= ruleCategories EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1591:2: iv_ruleCategories= ruleCategories EOF
            {
             newCompositeNode(grammarAccess.getCategoriesRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleCategories_in_entryRuleCategories3356);
            iv_ruleCategories=ruleCategories();

            state._fsp--;

             current =iv_ruleCategories; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCategories3366); 

            }

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


    // $ANTLR start "ruleCategories"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1598:1: ruleCategories returns [EObject current=null] : (otherlv_0= '(' ( ( ruleEString ) ) (otherlv_2= ',' ( ( ruleEString ) ) )* otherlv_4= ')' otherlv_5= '(' ( (lv_min_6_0= ruleMinCardinality ) ) otherlv_7= ',' ( (lv_max_8_0= ruleMaxCardinality ) ) otherlv_9= ')' ) ;
    public final EObject ruleCategories() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_2=null;
        Token otherlv_4=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        AntlrDatatypeRuleToken lv_min_6_0 = null;

        AntlrDatatypeRuleToken lv_max_8_0 = null;


         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1601:28: ( (otherlv_0= '(' ( ( ruleEString ) ) (otherlv_2= ',' ( ( ruleEString ) ) )* otherlv_4= ')' otherlv_5= '(' ( (lv_min_6_0= ruleMinCardinality ) ) otherlv_7= ',' ( (lv_max_8_0= ruleMaxCardinality ) ) otherlv_9= ')' ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1602:1: (otherlv_0= '(' ( ( ruleEString ) ) (otherlv_2= ',' ( ( ruleEString ) ) )* otherlv_4= ')' otherlv_5= '(' ( (lv_min_6_0= ruleMinCardinality ) ) otherlv_7= ',' ( (lv_max_8_0= ruleMaxCardinality ) ) otherlv_9= ')' )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1602:1: (otherlv_0= '(' ( ( ruleEString ) ) (otherlv_2= ',' ( ( ruleEString ) ) )* otherlv_4= ')' otherlv_5= '(' ( (lv_min_6_0= ruleMinCardinality ) ) otherlv_7= ',' ( (lv_max_8_0= ruleMaxCardinality ) ) otherlv_9= ')' )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1602:3: otherlv_0= '(' ( ( ruleEString ) ) (otherlv_2= ',' ( ( ruleEString ) ) )* otherlv_4= ')' otherlv_5= '(' ( (lv_min_6_0= ruleMinCardinality ) ) otherlv_7= ',' ( (lv_max_8_0= ruleMaxCardinality ) ) otherlv_9= ')'
            {
            otherlv_0=(Token)match(input,21,FollowSets000.FOLLOW_21_in_ruleCategories3403); 

                	newLeafNode(otherlv_0, grammarAccess.getCategoriesAccess().getLeftParenthesisKeyword_0());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1606:1: ( ( ruleEString ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1607:1: ( ruleEString )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1607:1: ( ruleEString )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1608:3: ruleEString
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getCategoriesRule());
            	        }
                    
             
            	        newCompositeNode(grammarAccess.getCategoriesAccess().getEntitiesEntityConceptCrossReference_1_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleCategories3426);
            ruleEString();

            state._fsp--;

             
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1621:2: (otherlv_2= ',' ( ( ruleEString ) ) )*
            loop27:
            do {
                int alt27=2;
                int LA27_0 = input.LA(1);

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


                switch (alt27) {
            	case 1 :
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1621:4: otherlv_2= ',' ( ( ruleEString ) )
            	    {
            	    otherlv_2=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleCategories3439); 

            	        	newLeafNode(otherlv_2, grammarAccess.getCategoriesAccess().getCommaKeyword_2_0());
            	        
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1625:1: ( ( ruleEString ) )
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1626:1: ( ruleEString )
            	    {
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1626:1: ( ruleEString )
            	    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1627:3: ruleEString
            	    {

            	    			if (current==null) {
            	    	            current = createModelElement(grammarAccess.getCategoriesRule());
            	    	        }
            	            
            	     
            	    	        newCompositeNode(grammarAccess.getCategoriesAccess().getEntitiesEntityConceptCrossReference_2_1_0()); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleCategories3462);
            	    ruleEString();

            	    state._fsp--;

            	     
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }


            	    }
            	    break;

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

            otherlv_4=(Token)match(input,22,FollowSets000.FOLLOW_22_in_ruleCategories3476); 

                	newLeafNode(otherlv_4, grammarAccess.getCategoriesAccess().getRightParenthesisKeyword_3());
                
            otherlv_5=(Token)match(input,21,FollowSets000.FOLLOW_21_in_ruleCategories3488); 

                	newLeafNode(otherlv_5, grammarAccess.getCategoriesAccess().getLeftParenthesisKeyword_4());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1648:1: ( (lv_min_6_0= ruleMinCardinality ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1649:1: (lv_min_6_0= ruleMinCardinality )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1649:1: (lv_min_6_0= ruleMinCardinality )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1650:3: lv_min_6_0= ruleMinCardinality
            {
             
            	        newCompositeNode(grammarAccess.getCategoriesAccess().getMinMinCardinalityParserRuleCall_5_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleMinCardinality_in_ruleCategories3509);
            lv_min_6_0=ruleMinCardinality();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getCategoriesRule());
            	        }
                   		set(
                   			current, 
                   			"min",
                    		lv_min_6_0, 
                    		"MinCardinality");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_7=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleCategories3521); 

                	newLeafNode(otherlv_7, grammarAccess.getCategoriesAccess().getCommaKeyword_6());
                
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1670:1: ( (lv_max_8_0= ruleMaxCardinality ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1671:1: (lv_max_8_0= ruleMaxCardinality )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1671:1: (lv_max_8_0= ruleMaxCardinality )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1672:3: lv_max_8_0= ruleMaxCardinality
            {
             
            	        newCompositeNode(grammarAccess.getCategoriesAccess().getMaxMaxCardinalityParserRuleCall_7_0()); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleMaxCardinality_in_ruleCategories3542);
            lv_max_8_0=ruleMaxCardinality();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getCategoriesRule());
            	        }
                   		set(
                   			current, 
                   			"max",
                    		lv_max_8_0, 
                    		"MaxCardinality");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }

            otherlv_9=(Token)match(input,22,FollowSets000.FOLLOW_22_in_ruleCategories3554); 

                	newLeafNode(otherlv_9, grammarAccess.getCategoriesAccess().getRightParenthesisKeyword_8());
                

            }


            }

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


    // $ANTLR start "entryRulePrimitiveDomain"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1700:1: entryRulePrimitiveDomain returns [String current=null] : iv_rulePrimitiveDomain= rulePrimitiveDomain EOF ;
    public final String entryRulePrimitiveDomain() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_rulePrimitiveDomain = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1701:2: (iv_rulePrimitiveDomain= rulePrimitiveDomain EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1702:2: iv_rulePrimitiveDomain= rulePrimitiveDomain EOF
            {
             newCompositeNode(grammarAccess.getPrimitiveDomainRule()); 
            pushFollow(FollowSets000.FOLLOW_rulePrimitiveDomain_in_entryRulePrimitiveDomain3591);
            iv_rulePrimitiveDomain=rulePrimitiveDomain();

            state._fsp--;

             current =iv_rulePrimitiveDomain.getText(); 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePrimitiveDomain3602); 

            }

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


    // $ANTLR start "rulePrimitiveDomain"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1709:1: rulePrimitiveDomain returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'integer' | kw= 'string' | kw= 'real' | kw= 'boolean' | kw= 'date' | kw= 'time' ) ;
    public final AntlrDatatypeRuleToken rulePrimitiveDomain() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1712:28: ( (kw= 'integer' | kw= 'string' | kw= 'real' | kw= 'boolean' | kw= 'date' | kw= 'time' ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1713:1: (kw= 'integer' | kw= 'string' | kw= 'real' | kw= 'boolean' | kw= 'date' | kw= 'time' )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1713:1: (kw= 'integer' | kw= 'string' | kw= 'real' | kw= 'boolean' | kw= 'date' | kw= 'time' )
            int alt28=6;
            switch ( input.LA(1) ) {
            case 40:
                {
                alt28=1;
                }
                break;
            case 41:
                {
                alt28=2;
                }
                break;
            case 42:
                {
                alt28=3;
                }
                break;
            case 43:
                {
                alt28=4;
                }
                break;
            case 44:
                {
                alt28=5;
                }
                break;
            case 45:
                {
                alt28=6;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 28, 0, input);

                throw nvae;
            }

            switch (alt28) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1714:2: kw= 'integer'
                    {
                    kw=(Token)match(input,40,FollowSets000.FOLLOW_40_in_rulePrimitiveDomain3640); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getPrimitiveDomainAccess().getIntegerKeyword_0()); 
                        

                    }
                    break;
                case 2 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1721:2: kw= 'string'
                    {
                    kw=(Token)match(input,41,FollowSets000.FOLLOW_41_in_rulePrimitiveDomain3659); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getPrimitiveDomainAccess().getStringKeyword_1()); 
                        

                    }
                    break;
                case 3 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1728:2: kw= 'real'
                    {
                    kw=(Token)match(input,42,FollowSets000.FOLLOW_42_in_rulePrimitiveDomain3678); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getPrimitiveDomainAccess().getRealKeyword_2()); 
                        

                    }
                    break;
                case 4 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1735:2: kw= 'boolean'
                    {
                    kw=(Token)match(input,43,FollowSets000.FOLLOW_43_in_rulePrimitiveDomain3697); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getPrimitiveDomainAccess().getBooleanKeyword_3()); 
                        

                    }
                    break;
                case 5 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1742:2: kw= 'date'
                    {
                    kw=(Token)match(input,44,FollowSets000.FOLLOW_44_in_rulePrimitiveDomain3716); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getPrimitiveDomainAccess().getDateKeyword_4()); 
                        

                    }
                    break;
                case 6 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1749:2: kw= 'time'
                    {
                    kw=(Token)match(input,45,FollowSets000.FOLLOW_45_in_rulePrimitiveDomain3735); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getPrimitiveDomainAccess().getTimeKeyword_5()); 
                        

                    }
                    break;

            }


            }

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


    // $ANTLR start "entryRuleEBoolean"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1762:1: entryRuleEBoolean returns [String current=null] : iv_ruleEBoolean= ruleEBoolean EOF ;
    public final String entryRuleEBoolean() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleEBoolean = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1763:2: (iv_ruleEBoolean= ruleEBoolean EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1764:2: iv_ruleEBoolean= ruleEBoolean EOF
            {
             newCompositeNode(grammarAccess.getEBooleanRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleEBoolean_in_entryRuleEBoolean3776);
            iv_ruleEBoolean=ruleEBoolean();

            state._fsp--;

             current =iv_ruleEBoolean.getText(); 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEBoolean3787); 

            }

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


    // $ANTLR start "ruleEBoolean"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1771:1: ruleEBoolean returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'true' | kw= 'false' ) ;
    public final AntlrDatatypeRuleToken ruleEBoolean() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;

         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1774:28: ( (kw= 'true' | kw= 'false' ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1775:1: (kw= 'true' | kw= 'false' )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1775:1: (kw= 'true' | kw= 'false' )
            int alt29=2;
            int LA29_0 = input.LA(1);

            if ( (LA29_0==46) ) {
                alt29=1;
            }
            else if ( (LA29_0==47) ) {
                alt29=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 29, 0, input);

                throw nvae;
            }
            switch (alt29) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1776:2: kw= 'true'
                    {
                    kw=(Token)match(input,46,FollowSets000.FOLLOW_46_in_ruleEBoolean3825); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getEBooleanAccess().getTrueKeyword_0()); 
                        

                    }
                    break;
                case 2 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1783:2: kw= 'false'
                    {
                    kw=(Token)match(input,47,FollowSets000.FOLLOW_47_in_ruleEBoolean3844); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getEBooleanAccess().getFalseKeyword_1()); 
                        

                    }
                    break;

            }


            }

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


    // $ANTLR start "entryRuleEInt"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1796:1: entryRuleEInt returns [String current=null] : iv_ruleEInt= ruleEInt EOF ;
    public final String entryRuleEInt() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleEInt = null;


        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1797:2: (iv_ruleEInt= ruleEInt EOF )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1798:2: iv_ruleEInt= ruleEInt EOF
            {
             newCompositeNode(grammarAccess.getEIntRule()); 
            pushFollow(FollowSets000.FOLLOW_ruleEInt_in_entryRuleEInt3885);
            iv_ruleEInt=ruleEInt();

            state._fsp--;

             current =iv_ruleEInt.getText(); 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEInt3896); 

            }

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


    // $ANTLR start "ruleEInt"
    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1805:1: ruleEInt returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= '-' )? this_INT_1= RULE_INT ) ;
    public final AntlrDatatypeRuleToken ruleEInt() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        Token this_INT_1=null;

         enterRule(); 
            
        try {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1808:28: ( ( (kw= '-' )? this_INT_1= RULE_INT ) )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1809:1: ( (kw= '-' )? this_INT_1= RULE_INT )
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1809:1: ( (kw= '-' )? this_INT_1= RULE_INT )
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1809:2: (kw= '-' )? this_INT_1= RULE_INT
            {
            // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1809:2: (kw= '-' )?
            int alt30=2;
            int LA30_0 = input.LA(1);

            if ( (LA30_0==48) ) {
                alt30=1;
            }
            switch (alt30) {
                case 1 :
                    // ../mist.erdsl/src-gen/org/xtext/example/domij/parser/antlr/internal/InternalErDsl.g:1810:2: kw= '-'
                    {
                    kw=(Token)match(input,48,FollowSets000.FOLLOW_48_in_ruleEInt3935); 

                            current.merge(kw);
                            newLeafNode(kw, grammarAccess.getEIntAccess().getHyphenMinusKeyword_0()); 
                        

                    }
                    break;

            }

            this_INT_1=(Token)match(input,RULE_INT,FollowSets000.FOLLOW_RULE_INT_in_ruleEInt3952); 

            		current.merge(this_INT_1);
                
             
                newLeafNode(this_INT_1, grammarAccess.getEIntAccess().getINTTerminalRuleCall_1()); 
                

            }


            }

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

    // Delegated rules


 

    
    private static class FollowSets000 {
        public static final BitSet FOLLOW_ruleERModel_in_entryRuleERModel75 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleERModel85 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEString_in_ruleERModel131 = new BitSet(new long[]{0x0000000000000800L});
        public static final BitSet FOLLOW_11_in_ruleERModel143 = new BitSet(new long[]{0x000000000003D000L});
        public static final BitSet FOLLOW_12_in_ruleERModel156 = new BitSet(new long[]{0x0000000000000800L});
        public static final BitSet FOLLOW_11_in_ruleERModel168 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleDomain_in_ruleERModel189 = new BitSet(new long[]{0x0000000000006000L});
        public static final BitSet FOLLOW_13_in_ruleERModel202 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleDomain_in_ruleERModel223 = new BitSet(new long[]{0x0000000000006000L});
        public static final BitSet FOLLOW_14_in_ruleERModel237 = new BitSet(new long[]{0x000000000003C000L});
        public static final BitSet FOLLOW_15_in_ruleERModel252 = new BitSet(new long[]{0x0000000000000800L});
        public static final BitSet FOLLOW_11_in_ruleERModel264 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEntity_in_ruleERModel285 = new BitSet(new long[]{0x0000000000006000L});
        public static final BitSet FOLLOW_13_in_ruleERModel298 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEntity_in_ruleERModel319 = new BitSet(new long[]{0x0000000000006000L});
        public static final BitSet FOLLOW_14_in_ruleERModel333 = new BitSet(new long[]{0x0000000000034000L});
        public static final BitSet FOLLOW_16_in_ruleERModel348 = new BitSet(new long[]{0x0000000000000800L});
        public static final BitSet FOLLOW_11_in_ruleERModel360 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleGerund_in_ruleERModel381 = new BitSet(new long[]{0x0000000000006000L});
        public static final BitSet FOLLOW_13_in_ruleERModel394 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleGerund_in_ruleERModel415 = new BitSet(new long[]{0x0000000000006000L});
        public static final BitSet FOLLOW_14_in_ruleERModel429 = new BitSet(new long[]{0x0000000000024000L});
        public static final BitSet FOLLOW_17_in_ruleERModel444 = new BitSet(new long[]{0x0000000000000800L});
        public static final BitSet FOLLOW_11_in_ruleERModel456 = new BitSet(new long[]{0x0000000444000030L});
        public static final BitSet FOLLOW_ruleRelationshipConcept_in_ruleERModel477 = new BitSet(new long[]{0x0000000000006000L});
        public static final BitSet FOLLOW_13_in_ruleERModel490 = new BitSet(new long[]{0x0000000444000030L});
        public static final BitSet FOLLOW_ruleRelationshipConcept_in_ruleERModel511 = new BitSet(new long[]{0x0000000000006000L});
        public static final BitSet FOLLOW_14_in_ruleERModel525 = new BitSet(new long[]{0x0000000000004000L});
        public static final BitSet FOLLOW_14_in_ruleERModel539 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleRelationshipConcept_in_entryRuleRelationshipConcept575 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleRelationshipConcept585 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleRelationship_in_ruleRelationshipConcept632 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleISA_in_ruleRelationshipConcept659 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleCategorisation_in_ruleRelationshipConcept686 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleIdentificationDependency_in_ruleRelationshipConcept713 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEString_in_entryRuleEString751 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleEString762 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_RULE_STRING_in_ruleEString802 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleEString828 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEntity_in_entryRuleEntity873 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleEntity883 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEString_in_ruleEntity929 = new BitSet(new long[]{0x0000000000000800L});
        public static final BitSet FOLLOW_11_in_ruleEntity941 = new BitSet(new long[]{0x00000000001C4000L});
        public static final BitSet FOLLOW_18_in_ruleEntity954 = new BitSet(new long[]{0x0000000000000800L});
        public static final BitSet FOLLOW_11_in_ruleEntity966 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleAttribute_in_ruleEntity987 = new BitSet(new long[]{0x0000000000006000L});
        public static final BitSet FOLLOW_13_in_ruleEntity1000 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleAttribute_in_ruleEntity1021 = new BitSet(new long[]{0x0000000000006000L});
        public static final BitSet FOLLOW_14_in_ruleEntity1035 = new BitSet(new long[]{0x0000000000184000L});
        public static final BitSet FOLLOW_19_in_ruleEntity1050 = new BitSet(new long[]{0x0000000000000800L});
        public static final BitSet FOLLOW_11_in_ruleEntity1062 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleKey_in_ruleEntity1083 = new BitSet(new long[]{0x0000000000006000L});
        public static final BitSet FOLLOW_13_in_ruleEntity1096 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleKey_in_ruleEntity1117 = new BitSet(new long[]{0x0000000000006000L});
        public static final BitSet FOLLOW_14_in_ruleEntity1131 = new BitSet(new long[]{0x0000000000104000L});
        public static final BitSet FOLLOW_20_in_ruleEntity1146 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleEntity1169 = new BitSet(new long[]{0x0000000000004000L});
        public static final BitSet FOLLOW_14_in_ruleEntity1183 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleGerund_in_entryRuleGerund1219 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleGerund1229 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleRelationship_in_ruleGerund1274 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleAttribute_in_entryRuleAttribute1309 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleAttribute1319 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEString_in_ruleAttribute1374 = new BitSet(new long[]{0x0000000000000032L});
        public static final BitSet FOLLOW_ruleAttributeDomain_in_ruleAttribute1395 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleAttributeDomain_in_entryRuleAttributeDomain1432 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleAttributeDomain1442 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEString_in_ruleAttributeDomain1490 = new BitSet(new long[]{0x0000000000A00002L});
        public static final BitSet FOLLOW_21_in_ruleAttributeDomain1503 = new BitSet(new long[]{0x0001000000000040L});
        public static final BitSet FOLLOW_ruleEInt_in_ruleAttributeDomain1524 = new BitSet(new long[]{0x0000000000400000L});
        public static final BitSet FOLLOW_22_in_ruleAttributeDomain1536 = new BitSet(new long[]{0x0000000000800002L});
        public static final BitSet FOLLOW_23_in_ruleAttributeDomain1551 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleAttributeDomain1572 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleKey_in_entryRuleKey1610 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleKey1620 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEString_in_ruleKey1666 = new BitSet(new long[]{0x0000000000200000L});
        public static final BitSet FOLLOW_21_in_ruleKey1678 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleKey1701 = new BitSet(new long[]{0x0000000000402000L});
        public static final BitSet FOLLOW_13_in_ruleKey1714 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleKey1737 = new BitSet(new long[]{0x0000000000402000L});
        public static final BitSet FOLLOW_22_in_ruleKey1751 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleDomain_in_entryRuleDomain1787 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleDomain1797 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEString_in_ruleDomain1852 = new BitSet(new long[]{0x0000000001000000L});
        public static final BitSet FOLLOW_24_in_ruleDomain1864 = new BitSet(new long[]{0x00003F0000000000L});
        public static final BitSet FOLLOW_rulePrimitiveDomain_in_ruleDomain1885 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleRelationship_in_entryRuleRelationship1921 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleRelationship1931 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEString_in_ruleRelationship1977 = new BitSet(new long[]{0x0000000000000800L});
        public static final BitSet FOLLOW_11_in_ruleRelationship1989 = new BitSet(new long[]{0x0000000002000000L});
        public static final BitSet FOLLOW_25_in_ruleRelationship2001 = new BitSet(new long[]{0x0000000000000800L});
        public static final BitSet FOLLOW_11_in_ruleRelationship2013 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleRegularEntity_in_ruleRelationship2034 = new BitSet(new long[]{0x0000000000006000L});
        public static final BitSet FOLLOW_13_in_ruleRelationship2047 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleRegularEntity_in_ruleRelationship2068 = new BitSet(new long[]{0x0000000000006000L});
        public static final BitSet FOLLOW_14_in_ruleRelationship2082 = new BitSet(new long[]{0x0000000000044000L});
        public static final BitSet FOLLOW_18_in_ruleRelationship2095 = new BitSet(new long[]{0x0000000000000800L});
        public static final BitSet FOLLOW_11_in_ruleRelationship2107 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleAttribute_in_ruleRelationship2128 = new BitSet(new long[]{0x0000000000006000L});
        public static final BitSet FOLLOW_13_in_ruleRelationship2141 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleAttribute_in_ruleRelationship2162 = new BitSet(new long[]{0x0000000000006000L});
        public static final BitSet FOLLOW_14_in_ruleRelationship2176 = new BitSet(new long[]{0x0000000000004000L});
        public static final BitSet FOLLOW_14_in_ruleRelationship2190 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleISA_in_entryRuleISA2226 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleISA2236 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_26_in_ruleISA2273 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleISA2294 = new BitSet(new long[]{0x0000000000000800L});
        public static final BitSet FOLLOW_11_in_ruleISA2306 = new BitSet(new long[]{0x0000000008000000L});
        public static final BitSet FOLLOW_27_in_ruleISA2318 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleRegularEntity_in_ruleISA2339 = new BitSet(new long[]{0x0000000010000000L});
        public static final BitSet FOLLOW_28_in_ruleISA2351 = new BitSet(new long[]{0x0000000000200000L});
        public static final BitSet FOLLOW_21_in_ruleISA2363 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleISA2386 = new BitSet(new long[]{0x0000000000402000L});
        public static final BitSet FOLLOW_13_in_ruleISA2399 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleISA2422 = new BitSet(new long[]{0x0000000000402000L});
        public static final BitSet FOLLOW_22_in_ruleISA2436 = new BitSet(new long[]{0x0000000020000000L});
        public static final BitSet FOLLOW_29_in_ruleISA2448 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleISA2471 = new BitSet(new long[]{0x0000000000004000L});
        public static final BitSet FOLLOW_14_in_ruleISA2483 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleCategorisation_in_entryRuleCategorisation2519 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleCategorisation2529 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_30_in_ruleCategorisation2566 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleCategorisation2587 = new BitSet(new long[]{0x0000000000000800L});
        public static final BitSet FOLLOW_11_in_ruleCategorisation2599 = new BitSet(new long[]{0x0000000080000000L});
        public static final BitSet FOLLOW_31_in_ruleCategorisation2611 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleCategorisation2634 = new BitSet(new long[]{0x0000000100000000L});
        public static final BitSet FOLLOW_32_in_ruleCategorisation2646 = new BitSet(new long[]{0x0000000000200000L});
        public static final BitSet FOLLOW_ruleCategories_in_ruleCategorisation2667 = new BitSet(new long[]{0x0000000200000000L});
        public static final BitSet FOLLOW_33_in_ruleCategorisation2679 = new BitSet(new long[]{0x0000C00000000000L});
        public static final BitSet FOLLOW_ruleEBoolean_in_ruleCategorisation2700 = new BitSet(new long[]{0x0000000000004000L});
        public static final BitSet FOLLOW_14_in_ruleCategorisation2712 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleIdentificationDependency_in_entryRuleIdentificationDependency2748 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleIdentificationDependency2758 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_34_in_ruleIdentificationDependency2795 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleIdentificationDependency2816 = new BitSet(new long[]{0x0000000000000800L});
        public static final BitSet FOLLOW_11_in_ruleIdentificationDependency2828 = new BitSet(new long[]{0x0000000800000000L});
        public static final BitSet FOLLOW_35_in_ruleIdentificationDependency2840 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleIdentificationDependency2863 = new BitSet(new long[]{0x0000001000000000L});
        public static final BitSet FOLLOW_36_in_ruleIdentificationDependency2875 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleRegularEntity_in_ruleIdentificationDependency2896 = new BitSet(new long[]{0x0000000000004000L});
        public static final BitSet FOLLOW_14_in_ruleIdentificationDependency2908 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleRegularEntity_in_entryRuleRegularEntity2944 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleRegularEntity2954 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEString_in_ruleRegularEntity3002 = new BitSet(new long[]{0x0000000000200000L});
        public static final BitSet FOLLOW_21_in_ruleRegularEntity3014 = new BitSet(new long[]{0x0000006000000000L});
        public static final BitSet FOLLOW_ruleMinCardinality_in_ruleRegularEntity3035 = new BitSet(new long[]{0x0000000000002000L});
        public static final BitSet FOLLOW_13_in_ruleRegularEntity3047 = new BitSet(new long[]{0x000000C000000000L});
        public static final BitSet FOLLOW_ruleMaxCardinality_in_ruleRegularEntity3068 = new BitSet(new long[]{0x0000000000400000L});
        public static final BitSet FOLLOW_22_in_ruleRegularEntity3080 = new BitSet(new long[]{0x0000000000000032L});
        public static final BitSet FOLLOW_ruleEString_in_ruleRegularEntity3101 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleMinCardinality_in_entryRuleMinCardinality3139 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleMinCardinality3150 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_37_in_ruleMinCardinality3188 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_38_in_ruleMinCardinality3207 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleMaxCardinality_in_entryRuleMaxCardinality3248 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleMaxCardinality3259 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_38_in_ruleMaxCardinality3297 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_39_in_ruleMaxCardinality3316 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleCategories_in_entryRuleCategories3356 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleCategories3366 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_21_in_ruleCategories3403 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleCategories3426 = new BitSet(new long[]{0x0000000000402000L});
        public static final BitSet FOLLOW_13_in_ruleCategories3439 = new BitSet(new long[]{0x0000000000000030L});
        public static final BitSet FOLLOW_ruleEString_in_ruleCategories3462 = new BitSet(new long[]{0x0000000000402000L});
        public static final BitSet FOLLOW_22_in_ruleCategories3476 = new BitSet(new long[]{0x0000000000200000L});
        public static final BitSet FOLLOW_21_in_ruleCategories3488 = new BitSet(new long[]{0x0000006000000000L});
        public static final BitSet FOLLOW_ruleMinCardinality_in_ruleCategories3509 = new BitSet(new long[]{0x0000000000002000L});
        public static final BitSet FOLLOW_13_in_ruleCategories3521 = new BitSet(new long[]{0x000000C000000000L});
        public static final BitSet FOLLOW_ruleMaxCardinality_in_ruleCategories3542 = new BitSet(new long[]{0x0000000000400000L});
        public static final BitSet FOLLOW_22_in_ruleCategories3554 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_rulePrimitiveDomain_in_entryRulePrimitiveDomain3591 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRulePrimitiveDomain3602 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_40_in_rulePrimitiveDomain3640 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_41_in_rulePrimitiveDomain3659 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_42_in_rulePrimitiveDomain3678 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_43_in_rulePrimitiveDomain3697 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_44_in_rulePrimitiveDomain3716 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_45_in_rulePrimitiveDomain3735 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEBoolean_in_entryRuleEBoolean3776 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleEBoolean3787 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_46_in_ruleEBoolean3825 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_47_in_ruleEBoolean3844 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEInt_in_entryRuleEInt3885 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleEInt3896 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_48_in_ruleEInt3935 = new BitSet(new long[]{0x0000000000000040L});
        public static final BitSet FOLLOW_RULE_INT_in_ruleEInt3952 = new BitSet(new long[]{0x0000000000000002L});
    }


}