/*
* generated by Xtext
*/
package org.xtext.example.domij.services;

import com.google.inject.Singleton;
import com.google.inject.Inject;

import java.util.List;

import org.eclipse.xtext.*;
import org.eclipse.xtext.service.GrammarProvider;
import org.eclipse.xtext.service.AbstractElementFinder.*;

import org.eclipse.xtext.common.services.TerminalsGrammarAccess;

@Singleton
public class ErDslGrammarAccess extends AbstractGrammarElementFinder {
	
	
	public class ERModelElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ERModel");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cNameEStringParserRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cDomainsKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_2_1 = (Keyword)cGroup_2.eContents().get(1);
		private final Assignment cDomainsAssignment_2_2 = (Assignment)cGroup_2.eContents().get(2);
		private final RuleCall cDomainsDomainParserRuleCall_2_2_0 = (RuleCall)cDomainsAssignment_2_2.eContents().get(0);
		private final Group cGroup_2_3 = (Group)cGroup_2.eContents().get(3);
		private final Keyword cCommaKeyword_2_3_0 = (Keyword)cGroup_2_3.eContents().get(0);
		private final Assignment cDomainsAssignment_2_3_1 = (Assignment)cGroup_2_3.eContents().get(1);
		private final RuleCall cDomainsDomainParserRuleCall_2_3_1_0 = (RuleCall)cDomainsAssignment_2_3_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_2_4 = (Keyword)cGroup_2.eContents().get(4);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Keyword cEntitiesKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_3_1 = (Keyword)cGroup_3.eContents().get(1);
		private final Assignment cEntitiesAssignment_3_2 = (Assignment)cGroup_3.eContents().get(2);
		private final RuleCall cEntitiesEntityParserRuleCall_3_2_0 = (RuleCall)cEntitiesAssignment_3_2.eContents().get(0);
		private final Group cGroup_3_3 = (Group)cGroup_3.eContents().get(3);
		private final Keyword cCommaKeyword_3_3_0 = (Keyword)cGroup_3_3.eContents().get(0);
		private final Assignment cEntitiesAssignment_3_3_1 = (Assignment)cGroup_3_3.eContents().get(1);
		private final RuleCall cEntitiesEntityParserRuleCall_3_3_1_0 = (RuleCall)cEntitiesAssignment_3_3_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_3_4 = (Keyword)cGroup_3.eContents().get(4);
		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
		private final Keyword cGerundsKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_4_1 = (Keyword)cGroup_4.eContents().get(1);
		private final Assignment cGerundsAssignment_4_2 = (Assignment)cGroup_4.eContents().get(2);
		private final RuleCall cGerundsGerundParserRuleCall_4_2_0 = (RuleCall)cGerundsAssignment_4_2.eContents().get(0);
		private final Group cGroup_4_3 = (Group)cGroup_4.eContents().get(3);
		private final Keyword cCommaKeyword_4_3_0 = (Keyword)cGroup_4_3.eContents().get(0);
		private final Assignment cGerundsAssignment_4_3_1 = (Assignment)cGroup_4_3.eContents().get(1);
		private final RuleCall cGerundsGerundParserRuleCall_4_3_1_0 = (RuleCall)cGerundsAssignment_4_3_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_4_4 = (Keyword)cGroup_4.eContents().get(4);
		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
		private final Keyword cRelationshipsKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_5_1 = (Keyword)cGroup_5.eContents().get(1);
		private final Assignment cRelationshipsAssignment_5_2 = (Assignment)cGroup_5.eContents().get(2);
		private final RuleCall cRelationshipsRelationshipConceptParserRuleCall_5_2_0 = (RuleCall)cRelationshipsAssignment_5_2.eContents().get(0);
		private final Group cGroup_5_3 = (Group)cGroup_5.eContents().get(3);
		private final Keyword cCommaKeyword_5_3_0 = (Keyword)cGroup_5_3.eContents().get(0);
		private final Assignment cRelationshipsAssignment_5_3_1 = (Assignment)cGroup_5_3.eContents().get(1);
		private final RuleCall cRelationshipsRelationshipConceptParserRuleCall_5_3_1_0 = (RuleCall)cRelationshipsAssignment_5_3_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_5_4 = (Keyword)cGroup_5.eContents().get(4);
		private final Keyword cRightCurlyBracketKeyword_6 = (Keyword)cGroup.eContents().get(6);
		
		//ERModel:
		//	name=EString //'ERModel'
		//	"{" ("domains" "{" domains+=Domain ("," domains+=Domain)* "}")? ("entities" "{" entities+=Entity (","
		//	entities+=Entity)* "}")? ("gerunds" "{" gerunds+=Gerund ("," gerunds+=Gerund)* "}")? ("relationships" "{"
		//	relationships+=RelationshipConcept ("," relationships+=RelationshipConcept)* "}")? "}";
		public ParserRule getRule() { return rule; }

		//name=EString //'ERModel'
		//"{" ("domains" "{" domains+=Domain ("," domains+=Domain)* "}")? ("entities" "{" entities+=Entity ("," entities+=Entity)*
		//"}")? ("gerunds" "{" gerunds+=Gerund ("," gerunds+=Gerund)* "}")? ("relationships" "{"
		//relationships+=RelationshipConcept ("," relationships+=RelationshipConcept)* "}")? "}"
		public Group getGroup() { return cGroup; }

		//name=EString
		public Assignment getNameAssignment_0() { return cNameAssignment_0; }

		//EString
		public RuleCall getNameEStringParserRuleCall_0_0() { return cNameEStringParserRuleCall_0_0; }

		////'ERModel'
		//"{"
		public Keyword getLeftCurlyBracketKeyword_1() { return cLeftCurlyBracketKeyword_1; }

		//("domains" "{" domains+=Domain ("," domains+=Domain)* "}")?
		public Group getGroup_2() { return cGroup_2; }

		//"domains"
		public Keyword getDomainsKeyword_2_0() { return cDomainsKeyword_2_0; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_2_1() { return cLeftCurlyBracketKeyword_2_1; }

		//domains+=Domain
		public Assignment getDomainsAssignment_2_2() { return cDomainsAssignment_2_2; }

		//Domain
		public RuleCall getDomainsDomainParserRuleCall_2_2_0() { return cDomainsDomainParserRuleCall_2_2_0; }

		//("," domains+=Domain)*
		public Group getGroup_2_3() { return cGroup_2_3; }

		//","
		public Keyword getCommaKeyword_2_3_0() { return cCommaKeyword_2_3_0; }

		//domains+=Domain
		public Assignment getDomainsAssignment_2_3_1() { return cDomainsAssignment_2_3_1; }

		//Domain
		public RuleCall getDomainsDomainParserRuleCall_2_3_1_0() { return cDomainsDomainParserRuleCall_2_3_1_0; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_2_4() { return cRightCurlyBracketKeyword_2_4; }

		//("entities" "{" entities+=Entity ("," entities+=Entity)* "}")?
		public Group getGroup_3() { return cGroup_3; }

		//"entities"
		public Keyword getEntitiesKeyword_3_0() { return cEntitiesKeyword_3_0; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_3_1() { return cLeftCurlyBracketKeyword_3_1; }

		//entities+=Entity
		public Assignment getEntitiesAssignment_3_2() { return cEntitiesAssignment_3_2; }

		//Entity
		public RuleCall getEntitiesEntityParserRuleCall_3_2_0() { return cEntitiesEntityParserRuleCall_3_2_0; }

		//("," entities+=Entity)*
		public Group getGroup_3_3() { return cGroup_3_3; }

		//","
		public Keyword getCommaKeyword_3_3_0() { return cCommaKeyword_3_3_0; }

		//entities+=Entity
		public Assignment getEntitiesAssignment_3_3_1() { return cEntitiesAssignment_3_3_1; }

		//Entity
		public RuleCall getEntitiesEntityParserRuleCall_3_3_1_0() { return cEntitiesEntityParserRuleCall_3_3_1_0; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_3_4() { return cRightCurlyBracketKeyword_3_4; }

		//("gerunds" "{" gerunds+=Gerund ("," gerunds+=Gerund)* "}")?
		public Group getGroup_4() { return cGroup_4; }

		//"gerunds"
		public Keyword getGerundsKeyword_4_0() { return cGerundsKeyword_4_0; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_4_1() { return cLeftCurlyBracketKeyword_4_1; }

		//gerunds+=Gerund
		public Assignment getGerundsAssignment_4_2() { return cGerundsAssignment_4_2; }

		//Gerund
		public RuleCall getGerundsGerundParserRuleCall_4_2_0() { return cGerundsGerundParserRuleCall_4_2_0; }

		//("," gerunds+=Gerund)*
		public Group getGroup_4_3() { return cGroup_4_3; }

		//","
		public Keyword getCommaKeyword_4_3_0() { return cCommaKeyword_4_3_0; }

		//gerunds+=Gerund
		public Assignment getGerundsAssignment_4_3_1() { return cGerundsAssignment_4_3_1; }

		//Gerund
		public RuleCall getGerundsGerundParserRuleCall_4_3_1_0() { return cGerundsGerundParserRuleCall_4_3_1_0; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_4_4() { return cRightCurlyBracketKeyword_4_4; }

		//("relationships" "{" relationships+=RelationshipConcept ("," relationships+=RelationshipConcept)* "}")?
		public Group getGroup_5() { return cGroup_5; }

		//"relationships"
		public Keyword getRelationshipsKeyword_5_0() { return cRelationshipsKeyword_5_0; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_5_1() { return cLeftCurlyBracketKeyword_5_1; }

		//relationships+=RelationshipConcept
		public Assignment getRelationshipsAssignment_5_2() { return cRelationshipsAssignment_5_2; }

		//RelationshipConcept
		public RuleCall getRelationshipsRelationshipConceptParserRuleCall_5_2_0() { return cRelationshipsRelationshipConceptParserRuleCall_5_2_0; }

		//("," relationships+=RelationshipConcept)*
		public Group getGroup_5_3() { return cGroup_5_3; }

		//","
		public Keyword getCommaKeyword_5_3_0() { return cCommaKeyword_5_3_0; }

		//relationships+=RelationshipConcept
		public Assignment getRelationshipsAssignment_5_3_1() { return cRelationshipsAssignment_5_3_1; }

		//RelationshipConcept
		public RuleCall getRelationshipsRelationshipConceptParserRuleCall_5_3_1_0() { return cRelationshipsRelationshipConceptParserRuleCall_5_3_1_0; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_5_4() { return cRightCurlyBracketKeyword_5_4; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_6() { return cRightCurlyBracketKeyword_6; }
	}

	public class RelationshipConceptElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RelationshipConcept");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cRelationshipParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cISAParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cCategorisationParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cIdentificationDependencyParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		
		//RelationshipConcept:
		//	Relationship | ISA | Categorisation | IdentificationDependency;
		public ParserRule getRule() { return rule; }

		//Relationship | ISA | Categorisation | IdentificationDependency
		public Alternatives getAlternatives() { return cAlternatives; }

		//Relationship
		public RuleCall getRelationshipParserRuleCall_0() { return cRelationshipParserRuleCall_0; }

		//ISA
		public RuleCall getISAParserRuleCall_1() { return cISAParserRuleCall_1; }

		//Categorisation
		public RuleCall getCategorisationParserRuleCall_2() { return cCategorisationParserRuleCall_2; }

		//IdentificationDependency
		public RuleCall getIdentificationDependencyParserRuleCall_3() { return cIdentificationDependencyParserRuleCall_3; }
	}

	public class EntityConceptElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "EntityConcept");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cEntityParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cGerundParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//EntityConcept:
		//	Entity | Gerund;
		public ParserRule getRule() { return rule; }

		//Entity | Gerund
		public Alternatives getAlternatives() { return cAlternatives; }

		//Entity
		public RuleCall getEntityParserRuleCall_0() { return cEntityParserRuleCall_0; }

		//Gerund
		public RuleCall getGerundParserRuleCall_1() { return cGerundParserRuleCall_1; }
	}

	public class EStringElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "EString");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cSTRINGTerminalRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cIDTerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//EString returns ecore::EString:
		//	STRING | ID;
		public ParserRule getRule() { return rule; }

		//STRING | ID
		public Alternatives getAlternatives() { return cAlternatives; }

		//STRING
		public RuleCall getSTRINGTerminalRuleCall_0() { return cSTRINGTerminalRuleCall_0; }

		//ID
		public RuleCall getIDTerminalRuleCall_1() { return cIDTerminalRuleCall_1; }
	}

	public class EntityElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Entity");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cNameEStringParserRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cAttributeSetKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_2_1 = (Keyword)cGroup_2.eContents().get(1);
		private final Assignment cEntityAttributesAssignment_2_2 = (Assignment)cGroup_2.eContents().get(2);
		private final RuleCall cEntityAttributesAttributeParserRuleCall_2_2_0 = (RuleCall)cEntityAttributesAssignment_2_2.eContents().get(0);
		private final Group cGroup_2_3 = (Group)cGroup_2.eContents().get(3);
		private final Keyword cCommaKeyword_2_3_0 = (Keyword)cGroup_2_3.eContents().get(0);
		private final Assignment cEntityAttributesAssignment_2_3_1 = (Assignment)cGroup_2_3.eContents().get(1);
		private final RuleCall cEntityAttributesAttributeParserRuleCall_2_3_1_0 = (RuleCall)cEntityAttributesAssignment_2_3_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_2_4 = (Keyword)cGroup_2.eContents().get(4);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Keyword cKeySetKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_3_1 = (Keyword)cGroup_3.eContents().get(1);
		private final Assignment cKeySetAssignment_3_2 = (Assignment)cGroup_3.eContents().get(2);
		private final RuleCall cKeySetKeyParserRuleCall_3_2_0 = (RuleCall)cKeySetAssignment_3_2.eContents().get(0);
		private final Group cGroup_3_3 = (Group)cGroup_3.eContents().get(3);
		private final Keyword cCommaKeyword_3_3_0 = (Keyword)cGroup_3_3.eContents().get(0);
		private final Assignment cKeySetAssignment_3_3_1 = (Assignment)cGroup_3_3.eContents().get(1);
		private final RuleCall cKeySetKeyParserRuleCall_3_3_1_0 = (RuleCall)cKeySetAssignment_3_3_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_3_4 = (Keyword)cGroup_3.eContents().get(4);
		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
		private final Keyword cPrimaryKeyKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
		private final Assignment cPrimaryKeyAssignment_4_1 = (Assignment)cGroup_4.eContents().get(1);
		private final CrossReference cPrimaryKeyKeyCrossReference_4_1_0 = (CrossReference)cPrimaryKeyAssignment_4_1.eContents().get(0);
		private final RuleCall cPrimaryKeyKeyEStringParserRuleCall_4_1_0_1 = (RuleCall)cPrimaryKeyKeyCrossReference_4_1_0.eContents().get(1);
		private final Keyword cRightCurlyBracketKeyword_5 = (Keyword)cGroup.eContents().get(5);
		
		//Entity: //'Entity'
		//	name=EString "{" ("attributeSet" "{" entityAttributes+=Attribute ("," entityAttributes+=Attribute)* "}")? ("keySet" "{"
		//	keySet+=Key ("," keySet+=Key)* "}")? ("primaryKey" primaryKey=[Key|EString])? "}";
		public ParserRule getRule() { return rule; }

		////'Entity'
		//name=EString "{" ("attributeSet" "{" entityAttributes+=Attribute ("," entityAttributes+=Attribute)* "}")? ("keySet" "{"
		//keySet+=Key ("," keySet+=Key)* "}")? ("primaryKey" primaryKey=[Key|EString])? "}"
		public Group getGroup() { return cGroup; }

		////'Entity'
		//name=EString
		public Assignment getNameAssignment_0() { return cNameAssignment_0; }

		//EString
		public RuleCall getNameEStringParserRuleCall_0_0() { return cNameEStringParserRuleCall_0_0; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_1() { return cLeftCurlyBracketKeyword_1; }

		//("attributeSet" "{" entityAttributes+=Attribute ("," entityAttributes+=Attribute)* "}")?
		public Group getGroup_2() { return cGroup_2; }

		//"attributeSet"
		public Keyword getAttributeSetKeyword_2_0() { return cAttributeSetKeyword_2_0; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_2_1() { return cLeftCurlyBracketKeyword_2_1; }

		//entityAttributes+=Attribute
		public Assignment getEntityAttributesAssignment_2_2() { return cEntityAttributesAssignment_2_2; }

		//Attribute
		public RuleCall getEntityAttributesAttributeParserRuleCall_2_2_0() { return cEntityAttributesAttributeParserRuleCall_2_2_0; }

		//("," entityAttributes+=Attribute)*
		public Group getGroup_2_3() { return cGroup_2_3; }

		//","
		public Keyword getCommaKeyword_2_3_0() { return cCommaKeyword_2_3_0; }

		//entityAttributes+=Attribute
		public Assignment getEntityAttributesAssignment_2_3_1() { return cEntityAttributesAssignment_2_3_1; }

		//Attribute
		public RuleCall getEntityAttributesAttributeParserRuleCall_2_3_1_0() { return cEntityAttributesAttributeParserRuleCall_2_3_1_0; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_2_4() { return cRightCurlyBracketKeyword_2_4; }

		//("keySet" "{" keySet+=Key ("," keySet+=Key)* "}")?
		public Group getGroup_3() { return cGroup_3; }

		//"keySet"
		public Keyword getKeySetKeyword_3_0() { return cKeySetKeyword_3_0; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_3_1() { return cLeftCurlyBracketKeyword_3_1; }

		//keySet+=Key
		public Assignment getKeySetAssignment_3_2() { return cKeySetAssignment_3_2; }

		//Key
		public RuleCall getKeySetKeyParserRuleCall_3_2_0() { return cKeySetKeyParserRuleCall_3_2_0; }

		//("," keySet+=Key)*
		public Group getGroup_3_3() { return cGroup_3_3; }

		//","
		public Keyword getCommaKeyword_3_3_0() { return cCommaKeyword_3_3_0; }

		//keySet+=Key
		public Assignment getKeySetAssignment_3_3_1() { return cKeySetAssignment_3_3_1; }

		//Key
		public RuleCall getKeySetKeyParserRuleCall_3_3_1_0() { return cKeySetKeyParserRuleCall_3_3_1_0; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_3_4() { return cRightCurlyBracketKeyword_3_4; }

		//("primaryKey" primaryKey=[Key|EString])?
		public Group getGroup_4() { return cGroup_4; }

		//"primaryKey"
		public Keyword getPrimaryKeyKeyword_4_0() { return cPrimaryKeyKeyword_4_0; }

		//primaryKey=[Key|EString]
		public Assignment getPrimaryKeyAssignment_4_1() { return cPrimaryKeyAssignment_4_1; }

		//[Key|EString]
		public CrossReference getPrimaryKeyKeyCrossReference_4_1_0() { return cPrimaryKeyKeyCrossReference_4_1_0; }

		//EString
		public RuleCall getPrimaryKeyKeyEStringParserRuleCall_4_1_0_1() { return cPrimaryKeyKeyEStringParserRuleCall_4_1_0_1; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_5() { return cRightCurlyBracketKeyword_5; }
	}

	public class GerundElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Gerund");
		private final Assignment cRelationshipAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cRelationshipRelationshipParserRuleCall_0 = (RuleCall)cRelationshipAssignment.eContents().get(0);
		
		/// *'}'* / Gerund: //'Gerund'
		////name=EString
		////'{'
		//	relationship=Relationship;
		public ParserRule getRule() { return rule; }

		////'Gerund'
		////name=EString
		////'{'
		//relationship=Relationship
		public Assignment getRelationshipAssignment() { return cRelationshipAssignment; }

		//Relationship
		public RuleCall getRelationshipRelationshipParserRuleCall_0() { return cRelationshipRelationshipParserRuleCall_0; }
	}

	public class AttributeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Attribute");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cAttributeAction_0 = (Action)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Assignment cAttributeDomainAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cAttributeDomainAttributeDomainParserRuleCall_2_0 = (RuleCall)cAttributeDomainAssignment_2.eContents().get(0);
		
		/// *'}'* / Attribute:
		//	{Attribute} //'Attribute'
		//	name=EString //'{'
		//	attributeDomain=AttributeDomain?;
		public ParserRule getRule() { return rule; }

		//{Attribute} //'Attribute'
		//name=EString //'{'
		//attributeDomain=AttributeDomain?
		public Group getGroup() { return cGroup; }

		//{Attribute}
		public Action getAttributeAction_0() { return cAttributeAction_0; }

		////'Attribute'
		//name=EString
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }

		//EString
		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }

		//attributeDomain=AttributeDomain?
		public Assignment getAttributeDomainAssignment_2() { return cAttributeDomainAssignment_2; }

		//AttributeDomain
		public RuleCall getAttributeDomainAttributeDomainParserRuleCall_2_0() { return cAttributeDomainAttributeDomainParserRuleCall_2_0; }
	}

	public class AttributeDomainElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "AttributeDomain");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cDomainAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final CrossReference cDomainDomainCrossReference_0_0 = (CrossReference)cDomainAssignment_0.eContents().get(0);
		private final RuleCall cDomainDomainEStringParserRuleCall_0_0_1 = (RuleCall)cDomainDomainCrossReference_0_0.eContents().get(1);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Assignment cLengthAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cLengthEIntParserRuleCall_1_1_0 = (RuleCall)cLengthAssignment_1_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_1_2 = (Keyword)cGroup_1.eContents().get(2);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cDefaultKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cDefaultAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cDefaultEStringParserRuleCall_2_1_0 = (RuleCall)cDefaultAssignment_2_1.eContents().get(0);
		
		/// *'}'* / AttributeDomain: //'AttributeDomain'
		////'{'
		//	domain=[Domain|EString] ("(" length=EInt ")")? ("default" default=EString)?;
		public ParserRule getRule() { return rule; }

		////'AttributeDomain'
		////'{'
		//domain=[Domain|EString] ("(" length=EInt ")")? ("default" default=EString)?
		public Group getGroup() { return cGroup; }

		////'AttributeDomain'
		////'{'
		//domain=[Domain|EString]
		public Assignment getDomainAssignment_0() { return cDomainAssignment_0; }

		//[Domain|EString]
		public CrossReference getDomainDomainCrossReference_0_0() { return cDomainDomainCrossReference_0_0; }

		//EString
		public RuleCall getDomainDomainEStringParserRuleCall_0_0_1() { return cDomainDomainEStringParserRuleCall_0_0_1; }

		//("(" length=EInt ")")?
		public Group getGroup_1() { return cGroup_1; }

		//"("
		public Keyword getLeftParenthesisKeyword_1_0() { return cLeftParenthesisKeyword_1_0; }

		//length=EInt
		public Assignment getLengthAssignment_1_1() { return cLengthAssignment_1_1; }

		//EInt
		public RuleCall getLengthEIntParserRuleCall_1_1_0() { return cLengthEIntParserRuleCall_1_1_0; }

		//")"
		public Keyword getRightParenthesisKeyword_1_2() { return cRightParenthesisKeyword_1_2; }

		//("default" default=EString)?
		public Group getGroup_2() { return cGroup_2; }

		//"default"
		public Keyword getDefaultKeyword_2_0() { return cDefaultKeyword_2_0; }

		//default=EString
		public Assignment getDefaultAssignment_2_1() { return cDefaultAssignment_2_1; }

		//EString
		public RuleCall getDefaultEStringParserRuleCall_2_1_0() { return cDefaultEStringParserRuleCall_2_1_0; }
	}

	public class KeyElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Key");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cNameEStringParserRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cKeyAttributesAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final CrossReference cKeyAttributesAttributeCrossReference_2_0 = (CrossReference)cKeyAttributesAssignment_2.eContents().get(0);
		private final RuleCall cKeyAttributesAttributeEStringParserRuleCall_2_0_1 = (RuleCall)cKeyAttributesAttributeCrossReference_2_0.eContents().get(1);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Keyword cCommaKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final Assignment cKeyAttributesAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
		private final CrossReference cKeyAttributesAttributeCrossReference_3_1_0 = (CrossReference)cKeyAttributesAssignment_3_1.eContents().get(0);
		private final RuleCall cKeyAttributesAttributeEStringParserRuleCall_3_1_0_1 = (RuleCall)cKeyAttributesAttributeCrossReference_3_1_0.eContents().get(1);
		private final Keyword cRightParenthesisKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		/// *'}'* / Key: //'Key'
		//	name=EString //'{'
		//	/ *'keyAttributes' * / "(" keyAttributes+=[Attribute|EString] ("," keyAttributes+=[Attribute|EString])* ")";
		public ParserRule getRule() { return rule; }

		////'Key'
		//name=EString //'{'
		/// *'keyAttributes' * / "(" keyAttributes+=[Attribute|EString] ("," keyAttributes+=[Attribute|EString])* ")"
		public Group getGroup() { return cGroup; }

		////'Key'
		//name=EString
		public Assignment getNameAssignment_0() { return cNameAssignment_0; }

		//EString
		public RuleCall getNameEStringParserRuleCall_0_0() { return cNameEStringParserRuleCall_0_0; }

		////'{'
		/// *'keyAttributes' * / "("
		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }

		//keyAttributes+=[Attribute|EString]
		public Assignment getKeyAttributesAssignment_2() { return cKeyAttributesAssignment_2; }

		//[Attribute|EString]
		public CrossReference getKeyAttributesAttributeCrossReference_2_0() { return cKeyAttributesAttributeCrossReference_2_0; }

		//EString
		public RuleCall getKeyAttributesAttributeEStringParserRuleCall_2_0_1() { return cKeyAttributesAttributeEStringParserRuleCall_2_0_1; }

		//("," keyAttributes+=[Attribute|EString])*
		public Group getGroup_3() { return cGroup_3; }

		//","
		public Keyword getCommaKeyword_3_0() { return cCommaKeyword_3_0; }

		//keyAttributes+=[Attribute|EString]
		public Assignment getKeyAttributesAssignment_3_1() { return cKeyAttributesAssignment_3_1; }

		//[Attribute|EString]
		public CrossReference getKeyAttributesAttributeCrossReference_3_1_0() { return cKeyAttributesAttributeCrossReference_3_1_0; }

		//EString
		public RuleCall getKeyAttributesAttributeEStringParserRuleCall_3_1_0_1() { return cKeyAttributesAttributeEStringParserRuleCall_3_1_0_1; }

		//")"
		public Keyword getRightParenthesisKeyword_4() { return cRightParenthesisKeyword_4; }
	}

	public class DomainElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Domain");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cDomainAction_0 = (Action)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Keyword cExtendsKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cPrimitiveDomainAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cPrimitiveDomainPrimitiveDomainParserRuleCall_3_0 = (RuleCall)cPrimitiveDomainAssignment_3.eContents().get(0);
		
		//Domain:
		//	{Domain} //'Domain'
		//	name=EString "extends" primitiveDomain=PrimitiveDomain;
		public ParserRule getRule() { return rule; }

		//{Domain} //'Domain'
		//name=EString "extends" primitiveDomain=PrimitiveDomain
		public Group getGroup() { return cGroup; }

		//{Domain}
		public Action getDomainAction_0() { return cDomainAction_0; }

		////'Domain'
		//name=EString
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }

		//EString
		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }

		//"extends"
		public Keyword getExtendsKeyword_2() { return cExtendsKeyword_2; }

		//primitiveDomain=PrimitiveDomain
		public Assignment getPrimitiveDomainAssignment_3() { return cPrimitiveDomainAssignment_3; }

		//PrimitiveDomain
		public RuleCall getPrimitiveDomainPrimitiveDomainParserRuleCall_3_0() { return cPrimitiveDomainPrimitiveDomainParserRuleCall_3_0; }
	}

	public class RelationshipElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Relationship");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cNameEStringParserRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Keyword cEntitiesInRelationshipKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Keyword cLeftCurlyBracketKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cEntitiesAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cEntitiesRegularEntityParserRuleCall_4_0 = (RuleCall)cEntitiesAssignment_4.eContents().get(0);
		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
		private final Keyword cCommaKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
		private final Assignment cEntitiesAssignment_5_1 = (Assignment)cGroup_5.eContents().get(1);
		private final RuleCall cEntitiesRegularEntityParserRuleCall_5_1_0 = (RuleCall)cEntitiesAssignment_5_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_6 = (Keyword)cGroup.eContents().get(6);
		private final Group cGroup_7 = (Group)cGroup.eContents().get(7);
		private final Keyword cAttributeSetKeyword_7_0 = (Keyword)cGroup_7.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_7_1 = (Keyword)cGroup_7.eContents().get(1);
		private final Assignment cRelationshipAttributesAssignment_7_2 = (Assignment)cGroup_7.eContents().get(2);
		private final RuleCall cRelationshipAttributesAttributeParserRuleCall_7_2_0 = (RuleCall)cRelationshipAttributesAssignment_7_2.eContents().get(0);
		private final Group cGroup_7_3 = (Group)cGroup_7.eContents().get(3);
		private final Keyword cCommaKeyword_7_3_0 = (Keyword)cGroup_7_3.eContents().get(0);
		private final Assignment cRelationshipAttributesAssignment_7_3_1 = (Assignment)cGroup_7_3.eContents().get(1);
		private final RuleCall cRelationshipAttributesAttributeParserRuleCall_7_3_1_0 = (RuleCall)cRelationshipAttributesAssignment_7_3_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_7_4 = (Keyword)cGroup_7.eContents().get(4);
		private final Keyword cRightCurlyBracketKeyword_8 = (Keyword)cGroup.eContents().get(8);
		
		//Relationship: //'Relationship'
		//	name=EString "{" "entitiesInRelationship" "{" entities+=RegularEntity ("," entities+=RegularEntity)* "}"
		//	("attributeSet" "{" relationshipAttributes+=Attribute ("," relationshipAttributes+=Attribute)* "}")? "}";
		public ParserRule getRule() { return rule; }

		////'Relationship'
		//name=EString "{" "entitiesInRelationship" "{" entities+=RegularEntity ("," entities+=RegularEntity)* "}" ("attributeSet"
		//"{" relationshipAttributes+=Attribute ("," relationshipAttributes+=Attribute)* "}")? "}"
		public Group getGroup() { return cGroup; }

		////'Relationship'
		//name=EString
		public Assignment getNameAssignment_0() { return cNameAssignment_0; }

		//EString
		public RuleCall getNameEStringParserRuleCall_0_0() { return cNameEStringParserRuleCall_0_0; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_1() { return cLeftCurlyBracketKeyword_1; }

		//"entitiesInRelationship"
		public Keyword getEntitiesInRelationshipKeyword_2() { return cEntitiesInRelationshipKeyword_2; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_3() { return cLeftCurlyBracketKeyword_3; }

		//entities+=RegularEntity
		public Assignment getEntitiesAssignment_4() { return cEntitiesAssignment_4; }

		//RegularEntity
		public RuleCall getEntitiesRegularEntityParserRuleCall_4_0() { return cEntitiesRegularEntityParserRuleCall_4_0; }

		//("," entities+=RegularEntity)*
		public Group getGroup_5() { return cGroup_5; }

		//","
		public Keyword getCommaKeyword_5_0() { return cCommaKeyword_5_0; }

		//entities+=RegularEntity
		public Assignment getEntitiesAssignment_5_1() { return cEntitiesAssignment_5_1; }

		//RegularEntity
		public RuleCall getEntitiesRegularEntityParserRuleCall_5_1_0() { return cEntitiesRegularEntityParserRuleCall_5_1_0; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_6() { return cRightCurlyBracketKeyword_6; }

		//("attributeSet" "{" relationshipAttributes+=Attribute ("," relationshipAttributes+=Attribute)* "}")?
		public Group getGroup_7() { return cGroup_7; }

		//"attributeSet"
		public Keyword getAttributeSetKeyword_7_0() { return cAttributeSetKeyword_7_0; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_7_1() { return cLeftCurlyBracketKeyword_7_1; }

		//relationshipAttributes+=Attribute
		public Assignment getRelationshipAttributesAssignment_7_2() { return cRelationshipAttributesAssignment_7_2; }

		//Attribute
		public RuleCall getRelationshipAttributesAttributeParserRuleCall_7_2_0() { return cRelationshipAttributesAttributeParserRuleCall_7_2_0; }

		//("," relationshipAttributes+=Attribute)*
		public Group getGroup_7_3() { return cGroup_7_3; }

		//","
		public Keyword getCommaKeyword_7_3_0() { return cCommaKeyword_7_3_0; }

		//relationshipAttributes+=Attribute
		public Assignment getRelationshipAttributesAssignment_7_3_1() { return cRelationshipAttributesAssignment_7_3_1; }

		//Attribute
		public RuleCall getRelationshipAttributesAttributeParserRuleCall_7_3_1_0() { return cRelationshipAttributesAttributeParserRuleCall_7_3_1_0; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_7_4() { return cRightCurlyBracketKeyword_7_4; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_8() { return cRightCurlyBracketKeyword_8; }
	}

	public class ISAElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ISA");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cISAKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Keyword cSupertypeKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cSupertypeAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cSupertypeRegularEntityParserRuleCall_4_0 = (RuleCall)cSupertypeAssignment_4.eContents().get(0);
		private final Keyword cSubtypesKeyword_5 = (Keyword)cGroup.eContents().get(5);
		private final Keyword cLeftParenthesisKeyword_6 = (Keyword)cGroup.eContents().get(6);
		private final Assignment cSubtypesAssignment_7 = (Assignment)cGroup.eContents().get(7);
		private final CrossReference cSubtypesEntityCrossReference_7_0 = (CrossReference)cSubtypesAssignment_7.eContents().get(0);
		private final RuleCall cSubtypesEntityEStringParserRuleCall_7_0_1 = (RuleCall)cSubtypesEntityCrossReference_7_0.eContents().get(1);
		private final Group cGroup_8 = (Group)cGroup.eContents().get(8);
		private final Keyword cCommaKeyword_8_0 = (Keyword)cGroup_8.eContents().get(0);
		private final Assignment cSubtypesAssignment_8_1 = (Assignment)cGroup_8.eContents().get(1);
		private final CrossReference cSubtypesEntityCrossReference_8_1_0 = (CrossReference)cSubtypesAssignment_8_1.eContents().get(0);
		private final RuleCall cSubtypesEntityEStringParserRuleCall_8_1_0_1 = (RuleCall)cSubtypesEntityCrossReference_8_1_0.eContents().get(1);
		private final Keyword cRightParenthesisKeyword_9 = (Keyword)cGroup.eContents().get(9);
		private final Keyword cClassificationAttributeKeyword_10 = (Keyword)cGroup.eContents().get(10);
		private final Assignment cClassificationAttributeAssignment_11 = (Assignment)cGroup.eContents().get(11);
		private final CrossReference cClassificationAttributeAttributeCrossReference_11_0 = (CrossReference)cClassificationAttributeAssignment_11.eContents().get(0);
		private final RuleCall cClassificationAttributeAttributeEStringParserRuleCall_11_0_1 = (RuleCall)cClassificationAttributeAttributeCrossReference_11_0.eContents().get(1);
		private final Keyword cRightCurlyBracketKeyword_12 = (Keyword)cGroup.eContents().get(12);
		
		//ISA:
		//	"ISA" name=EString "{" "supertype" supertype=RegularEntity "subtypes" "(" subtypes+=[Entity|EString] (","
		//	subtypes+=[Entity|EString])* ")" "classificationAttribute" classificationAttribute=[Attribute|EString] "}";
		public ParserRule getRule() { return rule; }

		//"ISA" name=EString "{" "supertype" supertype=RegularEntity "subtypes" "(" subtypes+=[Entity|EString] (","
		//subtypes+=[Entity|EString])* ")" "classificationAttribute" classificationAttribute=[Attribute|EString] "}"
		public Group getGroup() { return cGroup; }

		//"ISA"
		public Keyword getISAKeyword_0() { return cISAKeyword_0; }

		//name=EString
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }

		//EString
		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }

		//"supertype"
		public Keyword getSupertypeKeyword_3() { return cSupertypeKeyword_3; }

		//supertype=RegularEntity
		public Assignment getSupertypeAssignment_4() { return cSupertypeAssignment_4; }

		//RegularEntity
		public RuleCall getSupertypeRegularEntityParserRuleCall_4_0() { return cSupertypeRegularEntityParserRuleCall_4_0; }

		//"subtypes"
		public Keyword getSubtypesKeyword_5() { return cSubtypesKeyword_5; }

		//"("
		public Keyword getLeftParenthesisKeyword_6() { return cLeftParenthesisKeyword_6; }

		//subtypes+=[Entity|EString]
		public Assignment getSubtypesAssignment_7() { return cSubtypesAssignment_7; }

		//[Entity|EString]
		public CrossReference getSubtypesEntityCrossReference_7_0() { return cSubtypesEntityCrossReference_7_0; }

		//EString
		public RuleCall getSubtypesEntityEStringParserRuleCall_7_0_1() { return cSubtypesEntityEStringParserRuleCall_7_0_1; }

		//("," subtypes+=[Entity|EString])*
		public Group getGroup_8() { return cGroup_8; }

		//","
		public Keyword getCommaKeyword_8_0() { return cCommaKeyword_8_0; }

		//subtypes+=[Entity|EString]
		public Assignment getSubtypesAssignment_8_1() { return cSubtypesAssignment_8_1; }

		//[Entity|EString]
		public CrossReference getSubtypesEntityCrossReference_8_1_0() { return cSubtypesEntityCrossReference_8_1_0; }

		//EString
		public RuleCall getSubtypesEntityEStringParserRuleCall_8_1_0_1() { return cSubtypesEntityEStringParserRuleCall_8_1_0_1; }

		//")"
		public Keyword getRightParenthesisKeyword_9() { return cRightParenthesisKeyword_9; }

		//"classificationAttribute"
		public Keyword getClassificationAttributeKeyword_10() { return cClassificationAttributeKeyword_10; }

		//classificationAttribute=[Attribute|EString]
		public Assignment getClassificationAttributeAssignment_11() { return cClassificationAttributeAssignment_11; }

		//[Attribute|EString]
		public CrossReference getClassificationAttributeAttributeCrossReference_11_0() { return cClassificationAttributeAttributeCrossReference_11_0; }

		//EString
		public RuleCall getClassificationAttributeAttributeEStringParserRuleCall_11_0_1() { return cClassificationAttributeAttributeEStringParserRuleCall_11_0_1; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_12() { return cRightCurlyBracketKeyword_12; }
	}

	public class CategorisationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Categorisation");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cCategorisationKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Keyword cCategorisedEntityKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cCategorisedEntityAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final CrossReference cCategorisedEntityEntityConceptCrossReference_4_0 = (CrossReference)cCategorisedEntityAssignment_4.eContents().get(0);
		private final RuleCall cCategorisedEntityEntityConceptEStringParserRuleCall_4_0_1 = (RuleCall)cCategorisedEntityEntityConceptCrossReference_4_0.eContents().get(1);
		private final Keyword cCategorisationEntitiesKeyword_5 = (Keyword)cGroup.eContents().get(5);
		private final Assignment cCategorisationEntitiesAssignment_6 = (Assignment)cGroup.eContents().get(6);
		private final RuleCall cCategorisationEntitiesCategoriesParserRuleCall_6_0 = (RuleCall)cCategorisationEntitiesAssignment_6.eContents().get(0);
		private final Keyword cIsPartialKeyword_7 = (Keyword)cGroup.eContents().get(7);
		private final Assignment cIsPartialAssignment_8 = (Assignment)cGroup.eContents().get(8);
		private final RuleCall cIsPartialEBooleanParserRuleCall_8_0 = (RuleCall)cIsPartialAssignment_8.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_9 = (Keyword)cGroup.eContents().get(9);
		
		//Categorisation:
		//	"Categorisation" name=EString "{" "categorisedEntity" categorisedEntity=[EntityConcept|EString]
		//	"categorisationEntities" categorisationEntities=Categories "isPartial" isPartial?=EBoolean "}";
		public ParserRule getRule() { return rule; }

		//"Categorisation" name=EString "{" "categorisedEntity" categorisedEntity=[EntityConcept|EString] "categorisationEntities"
		//categorisationEntities=Categories "isPartial" isPartial?=EBoolean "}"
		public Group getGroup() { return cGroup; }

		//"Categorisation"
		public Keyword getCategorisationKeyword_0() { return cCategorisationKeyword_0; }

		//name=EString
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }

		//EString
		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }

		//"categorisedEntity"
		public Keyword getCategorisedEntityKeyword_3() { return cCategorisedEntityKeyword_3; }

		//categorisedEntity=[EntityConcept|EString]
		public Assignment getCategorisedEntityAssignment_4() { return cCategorisedEntityAssignment_4; }

		//[EntityConcept|EString]
		public CrossReference getCategorisedEntityEntityConceptCrossReference_4_0() { return cCategorisedEntityEntityConceptCrossReference_4_0; }

		//EString
		public RuleCall getCategorisedEntityEntityConceptEStringParserRuleCall_4_0_1() { return cCategorisedEntityEntityConceptEStringParserRuleCall_4_0_1; }

		//"categorisationEntities"
		public Keyword getCategorisationEntitiesKeyword_5() { return cCategorisationEntitiesKeyword_5; }

		//categorisationEntities=Categories
		public Assignment getCategorisationEntitiesAssignment_6() { return cCategorisationEntitiesAssignment_6; }

		//Categories
		public RuleCall getCategorisationEntitiesCategoriesParserRuleCall_6_0() { return cCategorisationEntitiesCategoriesParserRuleCall_6_0; }

		//"isPartial"
		public Keyword getIsPartialKeyword_7() { return cIsPartialKeyword_7; }

		//isPartial?=EBoolean
		public Assignment getIsPartialAssignment_8() { return cIsPartialAssignment_8; }

		//EBoolean
		public RuleCall getIsPartialEBooleanParserRuleCall_8_0() { return cIsPartialEBooleanParserRuleCall_8_0; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_9() { return cRightCurlyBracketKeyword_9; }
	}

	public class IdentificationDependencyElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "IdentificationDependency");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cIdentificationDependencyKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Keyword cWeakEntityKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cWeakEntityAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final CrossReference cWeakEntityEntityCrossReference_4_0 = (CrossReference)cWeakEntityAssignment_4.eContents().get(0);
		private final RuleCall cWeakEntityEntityEStringParserRuleCall_4_0_1 = (RuleCall)cWeakEntityEntityCrossReference_4_0.eContents().get(1);
		private final Keyword cRegularEntityKeyword_5 = (Keyword)cGroup.eContents().get(5);
		private final Assignment cRegularEntityAssignment_6 = (Assignment)cGroup.eContents().get(6);
		private final RuleCall cRegularEntityRegularEntityParserRuleCall_6_0 = (RuleCall)cRegularEntityAssignment_6.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_7 = (Keyword)cGroup.eContents().get(7);
		
		//IdentificationDependency:
		//	"IdentificationDependency" name=EString "{" "weakEntity" weakEntity=[Entity|EString] "regularEntity"
		//	regularEntity=RegularEntity "}";
		public ParserRule getRule() { return rule; }

		//"IdentificationDependency" name=EString "{" "weakEntity" weakEntity=[Entity|EString] "regularEntity"
		//regularEntity=RegularEntity "}"
		public Group getGroup() { return cGroup; }

		//"IdentificationDependency"
		public Keyword getIdentificationDependencyKeyword_0() { return cIdentificationDependencyKeyword_0; }

		//name=EString
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }

		//EString
		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }

		//"weakEntity"
		public Keyword getWeakEntityKeyword_3() { return cWeakEntityKeyword_3; }

		//weakEntity=[Entity|EString]
		public Assignment getWeakEntityAssignment_4() { return cWeakEntityAssignment_4; }

		//[Entity|EString]
		public CrossReference getWeakEntityEntityCrossReference_4_0() { return cWeakEntityEntityCrossReference_4_0; }

		//EString
		public RuleCall getWeakEntityEntityEStringParserRuleCall_4_0_1() { return cWeakEntityEntityEStringParserRuleCall_4_0_1; }

		//"regularEntity"
		public Keyword getRegularEntityKeyword_5() { return cRegularEntityKeyword_5; }

		//regularEntity=RegularEntity
		public Assignment getRegularEntityAssignment_6() { return cRegularEntityAssignment_6; }

		//RegularEntity
		public RuleCall getRegularEntityRegularEntityParserRuleCall_6_0() { return cRegularEntityRegularEntityParserRuleCall_6_0; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_7() { return cRightCurlyBracketKeyword_7; }
	}

	public class RegularEntityElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RegularEntity");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cEntityAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final CrossReference cEntityEntityConceptCrossReference_0_0 = (CrossReference)cEntityAssignment_0.eContents().get(0);
		private final RuleCall cEntityEntityConceptEStringParserRuleCall_0_0_1 = (RuleCall)cEntityEntityConceptCrossReference_0_0.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cMinAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cMinMinCardinalityParserRuleCall_2_0 = (RuleCall)cMinAssignment_2.eContents().get(0);
		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cMaxAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cMaxMaxCardinalityParserRuleCall_4_0 = (RuleCall)cMaxAssignment_4.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
		private final Assignment cRoleAssignment_6 = (Assignment)cGroup.eContents().get(6);
		private final RuleCall cRoleEStringParserRuleCall_6_0 = (RuleCall)cRoleAssignment_6.eContents().get(0);
		
		/// *'}'* / RegularEntity: //'RegularEntity'
		////'{'
		/// *'entity'* / entity=[EntityConcept|EString] / *'cardinality'* / "(" / *'min'* / min=MinCardinality "," / *'max'* /
		//	max=MaxCardinality ")" / *'role'* / role=EString?;
		public ParserRule getRule() { return rule; }

		////'RegularEntity'
		////'{'
		/// *'entity'* / entity=[EntityConcept|EString] / *'cardinality'* / "(" / *'min'* / min=MinCardinality "," / *'max'* /
		//max=MaxCardinality ")" / *'role'* / role=EString?
		public Group getGroup() { return cGroup; }

		////'RegularEntity'
		////'{'
		/// *'entity'* / entity=[EntityConcept|EString]
		public Assignment getEntityAssignment_0() { return cEntityAssignment_0; }

		//[EntityConcept|EString]
		public CrossReference getEntityEntityConceptCrossReference_0_0() { return cEntityEntityConceptCrossReference_0_0; }

		//EString
		public RuleCall getEntityEntityConceptEStringParserRuleCall_0_0_1() { return cEntityEntityConceptEStringParserRuleCall_0_0_1; }

		/// *'cardinality'* / "("
		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }

		/// *'min'* / min=MinCardinality
		public Assignment getMinAssignment_2() { return cMinAssignment_2; }

		//MinCardinality
		public RuleCall getMinMinCardinalityParserRuleCall_2_0() { return cMinMinCardinalityParserRuleCall_2_0; }

		//","
		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }

		/// *'max'* / max=MaxCardinality
		public Assignment getMaxAssignment_4() { return cMaxAssignment_4; }

		//MaxCardinality
		public RuleCall getMaxMaxCardinalityParserRuleCall_4_0() { return cMaxMaxCardinalityParserRuleCall_4_0; }

		//")"
		public Keyword getRightParenthesisKeyword_5() { return cRightParenthesisKeyword_5; }

		/// *'role'* / role=EString?
		public Assignment getRoleAssignment_6() { return cRoleAssignment_6; }

		//EString
		public RuleCall getRoleEStringParserRuleCall_6_0() { return cRoleEStringParserRuleCall_6_0; }
	}

	public class MinCardinalityElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MinCardinality");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Keyword cZeroKeyword_0 = (Keyword)cAlternatives.eContents().get(0);
		private final Keyword cOneKeyword_1 = (Keyword)cAlternatives.eContents().get(1);
		
		/// * TODO: implement this rule and an appropriate IValueConverter * / MinCardinality:
		//	"zero" | "one";
		public ParserRule getRule() { return rule; }

		//"zero" | "one"
		public Alternatives getAlternatives() { return cAlternatives; }

		//"zero"
		public Keyword getZeroKeyword_0() { return cZeroKeyword_0; }

		//"one"
		public Keyword getOneKeyword_1() { return cOneKeyword_1; }
	}

	public class MaxCardinalityElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MaxCardinality");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Keyword cOneKeyword_0 = (Keyword)cAlternatives.eContents().get(0);
		private final Keyword cManyKeyword_1 = (Keyword)cAlternatives.eContents().get(1);
		
		/// * TODO: implement this rule and an appropriate IValueConverter * / MaxCardinality:
		//	"one" | "many";
		public ParserRule getRule() { return rule; }

		//"one" | "many"
		public Alternatives getAlternatives() { return cAlternatives; }

		//"one"
		public Keyword getOneKeyword_0() { return cOneKeyword_0; }

		//"many"
		public Keyword getManyKeyword_1() { return cManyKeyword_1; }
	}

	public class CategoriesElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Categories");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cEntitiesAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final CrossReference cEntitiesEntityConceptCrossReference_1_0 = (CrossReference)cEntitiesAssignment_1.eContents().get(0);
		private final RuleCall cEntitiesEntityConceptEStringParserRuleCall_1_0_1 = (RuleCall)cEntitiesEntityConceptCrossReference_1_0.eContents().get(1);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cCommaKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cEntitiesAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final CrossReference cEntitiesEntityConceptCrossReference_2_1_0 = (CrossReference)cEntitiesAssignment_2_1.eContents().get(0);
		private final RuleCall cEntitiesEntityConceptEStringParserRuleCall_2_1_0_1 = (RuleCall)cEntitiesEntityConceptCrossReference_2_1_0.eContents().get(1);
		private final Keyword cRightParenthesisKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Keyword cLeftParenthesisKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Assignment cMinAssignment_5 = (Assignment)cGroup.eContents().get(5);
		private final RuleCall cMinMinCardinalityParserRuleCall_5_0 = (RuleCall)cMinAssignment_5.eContents().get(0);
		private final Keyword cCommaKeyword_6 = (Keyword)cGroup.eContents().get(6);
		private final Assignment cMaxAssignment_7 = (Assignment)cGroup.eContents().get(7);
		private final RuleCall cMaxMaxCardinalityParserRuleCall_7_0 = (RuleCall)cMaxAssignment_7.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_8 = (Keyword)cGroup.eContents().get(8);
		
		/// *'}'* / Categories: //'Categories'
		////'{'
		/// *'entities' * / "(" entities+=[EntityConcept|EString] ("," entities+=[EntityConcept|EString])* ")" "(" / *'min'* /
		//	min=MinCardinality "," / *'max'* / max=MaxCardinality ")";
		public ParserRule getRule() { return rule; }

		////'Categories'
		////'{'
		/// *'entities' * / "(" entities+=[EntityConcept|EString] ("," entities+=[EntityConcept|EString])* ")" "(" / *'min'* /
		//min=MinCardinality "," / *'max'* / max=MaxCardinality ")"
		public Group getGroup() { return cGroup; }

		////'Categories'
		////'{'
		/// *'entities' * / "("
		public Keyword getLeftParenthesisKeyword_0() { return cLeftParenthesisKeyword_0; }

		//entities+=[EntityConcept|EString]
		public Assignment getEntitiesAssignment_1() { return cEntitiesAssignment_1; }

		//[EntityConcept|EString]
		public CrossReference getEntitiesEntityConceptCrossReference_1_0() { return cEntitiesEntityConceptCrossReference_1_0; }

		//EString
		public RuleCall getEntitiesEntityConceptEStringParserRuleCall_1_0_1() { return cEntitiesEntityConceptEStringParserRuleCall_1_0_1; }

		//("," entities+=[EntityConcept|EString])*
		public Group getGroup_2() { return cGroup_2; }

		//","
		public Keyword getCommaKeyword_2_0() { return cCommaKeyword_2_0; }

		//entities+=[EntityConcept|EString]
		public Assignment getEntitiesAssignment_2_1() { return cEntitiesAssignment_2_1; }

		//[EntityConcept|EString]
		public CrossReference getEntitiesEntityConceptCrossReference_2_1_0() { return cEntitiesEntityConceptCrossReference_2_1_0; }

		//EString
		public RuleCall getEntitiesEntityConceptEStringParserRuleCall_2_1_0_1() { return cEntitiesEntityConceptEStringParserRuleCall_2_1_0_1; }

		//")"
		public Keyword getRightParenthesisKeyword_3() { return cRightParenthesisKeyword_3; }

		//"("
		public Keyword getLeftParenthesisKeyword_4() { return cLeftParenthesisKeyword_4; }

		/// *'min'* / min=MinCardinality
		public Assignment getMinAssignment_5() { return cMinAssignment_5; }

		//MinCardinality
		public RuleCall getMinMinCardinalityParserRuleCall_5_0() { return cMinMinCardinalityParserRuleCall_5_0; }

		//","
		public Keyword getCommaKeyword_6() { return cCommaKeyword_6; }

		/// *'max'* / max=MaxCardinality
		public Assignment getMaxAssignment_7() { return cMaxAssignment_7; }

		//MaxCardinality
		public RuleCall getMaxMaxCardinalityParserRuleCall_7_0() { return cMaxMaxCardinalityParserRuleCall_7_0; }

		//")"
		public Keyword getRightParenthesisKeyword_8() { return cRightParenthesisKeyword_8; }
	}

	public class PrimitiveDomainElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "PrimitiveDomain");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Keyword cIntegerKeyword_0 = (Keyword)cAlternatives.eContents().get(0);
		private final Keyword cStringKeyword_1 = (Keyword)cAlternatives.eContents().get(1);
		private final Keyword cRealKeyword_2 = (Keyword)cAlternatives.eContents().get(2);
		private final Keyword cBooleanKeyword_3 = (Keyword)cAlternatives.eContents().get(3);
		private final Keyword cDateKeyword_4 = (Keyword)cAlternatives.eContents().get(4);
		private final Keyword cTimeKeyword_5 = (Keyword)cAlternatives.eContents().get(5);
		
		//PrimitiveDomain:
		//	"integer" | "string" | "real" | "boolean" | "date" | "time";
		public ParserRule getRule() { return rule; }

		//"integer" | "string" | "real" | "boolean" | "date" | "time"
		public Alternatives getAlternatives() { return cAlternatives; }

		//"integer"
		public Keyword getIntegerKeyword_0() { return cIntegerKeyword_0; }

		//"string"
		public Keyword getStringKeyword_1() { return cStringKeyword_1; }

		//"real"
		public Keyword getRealKeyword_2() { return cRealKeyword_2; }

		//"boolean"
		public Keyword getBooleanKeyword_3() { return cBooleanKeyword_3; }

		//"date"
		public Keyword getDateKeyword_4() { return cDateKeyword_4; }

		//"time"
		public Keyword getTimeKeyword_5() { return cTimeKeyword_5; }
	}

	public class EBooleanElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "EBoolean");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Keyword cTrueKeyword_0 = (Keyword)cAlternatives.eContents().get(0);
		private final Keyword cFalseKeyword_1 = (Keyword)cAlternatives.eContents().get(1);
		
		//EBoolean returns ecore::EBoolean:
		//	"true" | "false";
		public ParserRule getRule() { return rule; }

		//"true" | "false"
		public Alternatives getAlternatives() { return cAlternatives; }

		//"true"
		public Keyword getTrueKeyword_0() { return cTrueKeyword_0; }

		//"false"
		public Keyword getFalseKeyword_1() { return cFalseKeyword_1; }
	}

	public class EIntElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "EInt");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cHyphenMinusKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final RuleCall cINTTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
		
		//EInt returns ecore::EInt:
		//	"-"? INT;
		public ParserRule getRule() { return rule; }

		//"-"? INT
		public Group getGroup() { return cGroup; }

		//"-"?
		public Keyword getHyphenMinusKeyword_0() { return cHyphenMinusKeyword_0; }

		//INT
		public RuleCall getINTTerminalRuleCall_1() { return cINTTerminalRuleCall_1; }
	}
	
	
	private final ERModelElements pERModel;
	private final RelationshipConceptElements pRelationshipConcept;
	private final EntityConceptElements pEntityConcept;
	private final EStringElements pEString;
	private final EntityElements pEntity;
	private final GerundElements pGerund;
	private final AttributeElements pAttribute;
	private final AttributeDomainElements pAttributeDomain;
	private final KeyElements pKey;
	private final DomainElements pDomain;
	private final RelationshipElements pRelationship;
	private final ISAElements pISA;
	private final CategorisationElements pCategorisation;
	private final IdentificationDependencyElements pIdentificationDependency;
	private final RegularEntityElements pRegularEntity;
	private final MinCardinalityElements pMinCardinality;
	private final MaxCardinalityElements pMaxCardinality;
	private final CategoriesElements pCategories;
	private final PrimitiveDomainElements pPrimitiveDomain;
	private final EBooleanElements pEBoolean;
	private final EIntElements pEInt;
	
	private final Grammar grammar;

	private final TerminalsGrammarAccess gaTerminals;

	@Inject
	public ErDslGrammarAccess(GrammarProvider grammarProvider,
		TerminalsGrammarAccess gaTerminals) {
		this.grammar = internalFindGrammar(grammarProvider);
		this.gaTerminals = gaTerminals;
		this.pERModel = new ERModelElements();
		this.pRelationshipConcept = new RelationshipConceptElements();
		this.pEntityConcept = new EntityConceptElements();
		this.pEString = new EStringElements();
		this.pEntity = new EntityElements();
		this.pGerund = new GerundElements();
		this.pAttribute = new AttributeElements();
		this.pAttributeDomain = new AttributeDomainElements();
		this.pKey = new KeyElements();
		this.pDomain = new DomainElements();
		this.pRelationship = new RelationshipElements();
		this.pISA = new ISAElements();
		this.pCategorisation = new CategorisationElements();
		this.pIdentificationDependency = new IdentificationDependencyElements();
		this.pRegularEntity = new RegularEntityElements();
		this.pMinCardinality = new MinCardinalityElements();
		this.pMaxCardinality = new MaxCardinalityElements();
		this.pCategories = new CategoriesElements();
		this.pPrimitiveDomain = new PrimitiveDomainElements();
		this.pEBoolean = new EBooleanElements();
		this.pEInt = new EIntElements();
	}
	
	protected Grammar internalFindGrammar(GrammarProvider grammarProvider) {
		Grammar grammar = grammarProvider.getGrammar(this);
		while (grammar != null) {
			if ("org.xtext.example.domij.ErDsl".equals(grammar.getName())) {
				return grammar;
			}
			List<Grammar> grammars = grammar.getUsedGrammars();
			if (!grammars.isEmpty()) {
				grammar = grammars.iterator().next();
			} else {
				return null;
			}
		}
		return grammar;
	}
	
	
	public Grammar getGrammar() {
		return grammar;
	}
	

	public TerminalsGrammarAccess getTerminalsGrammarAccess() {
		return gaTerminals;
	}

	
	//ERModel:
	//	name=EString //'ERModel'
	//	"{" ("domains" "{" domains+=Domain ("," domains+=Domain)* "}")? ("entities" "{" entities+=Entity (","
	//	entities+=Entity)* "}")? ("gerunds" "{" gerunds+=Gerund ("," gerunds+=Gerund)* "}")? ("relationships" "{"
	//	relationships+=RelationshipConcept ("," relationships+=RelationshipConcept)* "}")? "}";
	public ERModelElements getERModelAccess() {
		return pERModel;
	}
	
	public ParserRule getERModelRule() {
		return getERModelAccess().getRule();
	}

	//RelationshipConcept:
	//	Relationship | ISA | Categorisation | IdentificationDependency;
	public RelationshipConceptElements getRelationshipConceptAccess() {
		return pRelationshipConcept;
	}
	
	public ParserRule getRelationshipConceptRule() {
		return getRelationshipConceptAccess().getRule();
	}

	//EntityConcept:
	//	Entity | Gerund;
	public EntityConceptElements getEntityConceptAccess() {
		return pEntityConcept;
	}
	
	public ParserRule getEntityConceptRule() {
		return getEntityConceptAccess().getRule();
	}

	//EString returns ecore::EString:
	//	STRING | ID;
	public EStringElements getEStringAccess() {
		return pEString;
	}
	
	public ParserRule getEStringRule() {
		return getEStringAccess().getRule();
	}

	//Entity: //'Entity'
	//	name=EString "{" ("attributeSet" "{" entityAttributes+=Attribute ("," entityAttributes+=Attribute)* "}")? ("keySet" "{"
	//	keySet+=Key ("," keySet+=Key)* "}")? ("primaryKey" primaryKey=[Key|EString])? "}";
	public EntityElements getEntityAccess() {
		return pEntity;
	}
	
	public ParserRule getEntityRule() {
		return getEntityAccess().getRule();
	}

	/// *'}'* / Gerund: //'Gerund'
	////name=EString
	////'{'
	//	relationship=Relationship;
	public GerundElements getGerundAccess() {
		return pGerund;
	}
	
	public ParserRule getGerundRule() {
		return getGerundAccess().getRule();
	}

	/// *'}'* / Attribute:
	//	{Attribute} //'Attribute'
	//	name=EString //'{'
	//	attributeDomain=AttributeDomain?;
	public AttributeElements getAttributeAccess() {
		return pAttribute;
	}
	
	public ParserRule getAttributeRule() {
		return getAttributeAccess().getRule();
	}

	/// *'}'* / AttributeDomain: //'AttributeDomain'
	////'{'
	//	domain=[Domain|EString] ("(" length=EInt ")")? ("default" default=EString)?;
	public AttributeDomainElements getAttributeDomainAccess() {
		return pAttributeDomain;
	}
	
	public ParserRule getAttributeDomainRule() {
		return getAttributeDomainAccess().getRule();
	}

	/// *'}'* / Key: //'Key'
	//	name=EString //'{'
	//	/ *'keyAttributes' * / "(" keyAttributes+=[Attribute|EString] ("," keyAttributes+=[Attribute|EString])* ")";
	public KeyElements getKeyAccess() {
		return pKey;
	}
	
	public ParserRule getKeyRule() {
		return getKeyAccess().getRule();
	}

	//Domain:
	//	{Domain} //'Domain'
	//	name=EString "extends" primitiveDomain=PrimitiveDomain;
	public DomainElements getDomainAccess() {
		return pDomain;
	}
	
	public ParserRule getDomainRule() {
		return getDomainAccess().getRule();
	}

	//Relationship: //'Relationship'
	//	name=EString "{" "entitiesInRelationship" "{" entities+=RegularEntity ("," entities+=RegularEntity)* "}"
	//	("attributeSet" "{" relationshipAttributes+=Attribute ("," relationshipAttributes+=Attribute)* "}")? "}";
	public RelationshipElements getRelationshipAccess() {
		return pRelationship;
	}
	
	public ParserRule getRelationshipRule() {
		return getRelationshipAccess().getRule();
	}

	//ISA:
	//	"ISA" name=EString "{" "supertype" supertype=RegularEntity "subtypes" "(" subtypes+=[Entity|EString] (","
	//	subtypes+=[Entity|EString])* ")" "classificationAttribute" classificationAttribute=[Attribute|EString] "}";
	public ISAElements getISAAccess() {
		return pISA;
	}
	
	public ParserRule getISARule() {
		return getISAAccess().getRule();
	}

	//Categorisation:
	//	"Categorisation" name=EString "{" "categorisedEntity" categorisedEntity=[EntityConcept|EString]
	//	"categorisationEntities" categorisationEntities=Categories "isPartial" isPartial?=EBoolean "}";
	public CategorisationElements getCategorisationAccess() {
		return pCategorisation;
	}
	
	public ParserRule getCategorisationRule() {
		return getCategorisationAccess().getRule();
	}

	//IdentificationDependency:
	//	"IdentificationDependency" name=EString "{" "weakEntity" weakEntity=[Entity|EString] "regularEntity"
	//	regularEntity=RegularEntity "}";
	public IdentificationDependencyElements getIdentificationDependencyAccess() {
		return pIdentificationDependency;
	}
	
	public ParserRule getIdentificationDependencyRule() {
		return getIdentificationDependencyAccess().getRule();
	}

	/// *'}'* / RegularEntity: //'RegularEntity'
	////'{'
	/// *'entity'* / entity=[EntityConcept|EString] / *'cardinality'* / "(" / *'min'* / min=MinCardinality "," / *'max'* /
	//	max=MaxCardinality ")" / *'role'* / role=EString?;
	public RegularEntityElements getRegularEntityAccess() {
		return pRegularEntity;
	}
	
	public ParserRule getRegularEntityRule() {
		return getRegularEntityAccess().getRule();
	}

	/// * TODO: implement this rule and an appropriate IValueConverter * / MinCardinality:
	//	"zero" | "one";
	public MinCardinalityElements getMinCardinalityAccess() {
		return pMinCardinality;
	}
	
	public ParserRule getMinCardinalityRule() {
		return getMinCardinalityAccess().getRule();
	}

	/// * TODO: implement this rule and an appropriate IValueConverter * / MaxCardinality:
	//	"one" | "many";
	public MaxCardinalityElements getMaxCardinalityAccess() {
		return pMaxCardinality;
	}
	
	public ParserRule getMaxCardinalityRule() {
		return getMaxCardinalityAccess().getRule();
	}

	/// *'}'* / Categories: //'Categories'
	////'{'
	/// *'entities' * / "(" entities+=[EntityConcept|EString] ("," entities+=[EntityConcept|EString])* ")" "(" / *'min'* /
	//	min=MinCardinality "," / *'max'* / max=MaxCardinality ")";
	public CategoriesElements getCategoriesAccess() {
		return pCategories;
	}
	
	public ParserRule getCategoriesRule() {
		return getCategoriesAccess().getRule();
	}

	//PrimitiveDomain:
	//	"integer" | "string" | "real" | "boolean" | "date" | "time";
	public PrimitiveDomainElements getPrimitiveDomainAccess() {
		return pPrimitiveDomain;
	}
	
	public ParserRule getPrimitiveDomainRule() {
		return getPrimitiveDomainAccess().getRule();
	}

	//EBoolean returns ecore::EBoolean:
	//	"true" | "false";
	public EBooleanElements getEBooleanAccess() {
		return pEBoolean;
	}
	
	public ParserRule getEBooleanRule() {
		return getEBooleanAccess().getRule();
	}

	//EInt returns ecore::EInt:
	//	"-"? INT;
	public EIntElements getEIntAccess() {
		return pEInt;
	}
	
	public ParserRule getEIntRule() {
		return getEIntAccess().getRule();
	}

	//terminal ID:
	//	"^"? ("a".."z" | "A".."Z" | "_") ("a".."z" | "A".."Z" | "_" | "0".."9")*;
	public TerminalRule getIDRule() {
		return gaTerminals.getIDRule();
	} 

	//terminal INT returns ecore::EInt:
	//	"0".."9"+;
	public TerminalRule getINTRule() {
		return gaTerminals.getINTRule();
	} 

	//terminal STRING:
	//	"\"" ("\\" . / * 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' * / | !("\\" | "\""))* "\"" | "\'" ("\\" .
	//	/ * 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' * / | !("\\" | "\'"))* "\'";
	public TerminalRule getSTRINGRule() {
		return gaTerminals.getSTRINGRule();
	} 

	//terminal ML_COMMENT:
	//	"/ *"->"* /";
	public TerminalRule getML_COMMENTRule() {
		return gaTerminals.getML_COMMENTRule();
	} 

	//terminal SL_COMMENT:
	//	"//" !("\n" | "\r")* ("\r"? "\n")?;
	public TerminalRule getSL_COMMENTRule() {
		return gaTerminals.getSL_COMMENTRule();
	} 

	//terminal WS:
	//	(" " | "\t" | "\r" | "\n")+;
	public TerminalRule getWSRule() {
		return gaTerminals.getWSRule();
	} 

	//terminal ANY_OTHER:
	//	.;
	public TerminalRule getANY_OTHERRule() {
		return gaTerminals.getANY_OTHERRule();
	} 
}
