/*
* generated by Xtext
*/
package de.ugoe.cs.swe.bnftools.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.*;


@Singleton
public class EbnfGrammarAccess extends AbstractGrammarElementFinder {
	
	
	public class EtsiBnfElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "EtsiBnf");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Keyword cGrammarKeyword_0_0 = (Keyword)cGroup_0.eContents().get(0);
		private final Assignment cNameAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_0_1_0 = (RuleCall)cNameAssignment_0_1.eContents().get(0);
		private final Group cGroup_0_2 = (Group)cGroup_0.eContents().get(2);
		private final Assignment cTypeAssignment_0_2_0 = (Assignment)cGroup_0_2.eContents().get(0);
		private final Keyword cTypeBnfKeyword_0_2_0_0 = (Keyword)cTypeAssignment_0_2_0.eContents().get(0);
		private final Keyword cSemicolonKeyword_0_2_1 = (Keyword)cGroup_0_2.eContents().get(1);
		private final Assignment cImportSectionAssignment_0_2_2 = (Assignment)cGroup_0_2.eContents().get(2);
		private final RuleCall cImportSectionImportSectionParserRuleCall_0_2_2_0 = (RuleCall)cImportSectionAssignment_0_2_2.eContents().get(0);
		private final Assignment cBnfEntryAssignment_0_2_3 = (Assignment)cGroup_0_2.eContents().get(3);
		private final RuleCall cBnfEntryBnfEntryParserRuleCall_0_2_3_0 = (RuleCall)cBnfEntryAssignment_0_2_3.eContents().get(0);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Assignment cTypeAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
		private final Keyword cTypeDeltaKeyword_1_0_0 = (Keyword)cTypeAssignment_1_0.eContents().get(0);
		private final Keyword cSemicolonKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cImportSectionAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cImportSectionImportSectionParserRuleCall_1_2_0 = (RuleCall)cImportSectionAssignment_1_2.eContents().get(0);
		private final Assignment cDeltaEntryAssignment_1_3 = (Assignment)cGroup_1.eContents().get(3);
		private final RuleCall cDeltaEntryDeltaEntryParserRuleCall_1_3_0 = (RuleCall)cDeltaEntryAssignment_1_3.eContents().get(0);
		private final Group cGroup_2 = (Group)cAlternatives.eContents().get(2);
		private final Assignment cTypeAssignment_2_0 = (Assignment)cGroup_2.eContents().get(0);
		private final Keyword cTypeMergeKeyword_2_0_0 = (Keyword)cTypeAssignment_2_0.eContents().get(0);
		private final Keyword cSemicolonKeyword_2_1 = (Keyword)cGroup_2.eContents().get(1);
		private final Assignment cImportSectionAssignment_2_2 = (Assignment)cGroup_2.eContents().get(2);
		private final RuleCall cImportSectionImportSectionParserRuleCall_2_2_0 = (RuleCall)cImportSectionAssignment_2_2.eContents().get(0);
		private final Assignment cMergeEntryAssignment_2_3 = (Assignment)cGroup_2.eContents().get(3);
		private final RuleCall cMergeEntryMergeEntryParserRuleCall_2_3_0 = (RuleCall)cMergeEntryAssignment_2_3.eContents().get(0);
		
		//// -----------------------------------------------------------------------------------------------
		//// Parser Rules
		//// -----------------------------------------------------------------------------------------------
		//EtsiBnf:
		//	"grammar" name=ID (type="/bnf"? ";" importSection=ImportSection? bnfEntry+=BnfEntry+) | type="/delta" ";"
		//	importSection=ImportSection? deltaEntry+=DeltaEntry* | type="/merge" ";" importSection=ImportSection?
		//	mergeEntry+=MergeEntry*;
		public ParserRule getRule() { return rule; }

		//"grammar" name=ID (type="/bnf"? ";" importSection=ImportSection? bnfEntry+=BnfEntry+) | type="/delta" ";"
		//importSection=ImportSection? deltaEntry+=DeltaEntry* | type="/merge" ";" importSection=ImportSection?
		//mergeEntry+=MergeEntry*
		public Alternatives getAlternatives() { return cAlternatives; }

		//"grammar" name=ID (type="/bnf"? ";" importSection=ImportSection? bnfEntry+=BnfEntry+)
		public Group getGroup_0() { return cGroup_0; }

		//"grammar"
		public Keyword getGrammarKeyword_0_0() { return cGrammarKeyword_0_0; }

		//name=ID
		public Assignment getNameAssignment_0_1() { return cNameAssignment_0_1; }

		//ID
		public RuleCall getNameIDTerminalRuleCall_0_1_0() { return cNameIDTerminalRuleCall_0_1_0; }

		//type="/bnf"? ";" importSection=ImportSection? bnfEntry+=BnfEntry+
		public Group getGroup_0_2() { return cGroup_0_2; }

		//type="/bnf"?
		public Assignment getTypeAssignment_0_2_0() { return cTypeAssignment_0_2_0; }

		//"/bnf"
		public Keyword getTypeBnfKeyword_0_2_0_0() { return cTypeBnfKeyword_0_2_0_0; }

		//";"
		public Keyword getSemicolonKeyword_0_2_1() { return cSemicolonKeyword_0_2_1; }

		//importSection=ImportSection?
		public Assignment getImportSectionAssignment_0_2_2() { return cImportSectionAssignment_0_2_2; }

		//ImportSection
		public RuleCall getImportSectionImportSectionParserRuleCall_0_2_2_0() { return cImportSectionImportSectionParserRuleCall_0_2_2_0; }

		//bnfEntry+=BnfEntry+
		public Assignment getBnfEntryAssignment_0_2_3() { return cBnfEntryAssignment_0_2_3; }

		//BnfEntry
		public RuleCall getBnfEntryBnfEntryParserRuleCall_0_2_3_0() { return cBnfEntryBnfEntryParserRuleCall_0_2_3_0; }

		//type="/delta" ";" importSection=ImportSection? deltaEntry+=DeltaEntry*
		public Group getGroup_1() { return cGroup_1; }

		//type="/delta"
		public Assignment getTypeAssignment_1_0() { return cTypeAssignment_1_0; }

		//"/delta"
		public Keyword getTypeDeltaKeyword_1_0_0() { return cTypeDeltaKeyword_1_0_0; }

		//";"
		public Keyword getSemicolonKeyword_1_1() { return cSemicolonKeyword_1_1; }

		//importSection=ImportSection?
		public Assignment getImportSectionAssignment_1_2() { return cImportSectionAssignment_1_2; }

		//ImportSection
		public RuleCall getImportSectionImportSectionParserRuleCall_1_2_0() { return cImportSectionImportSectionParserRuleCall_1_2_0; }

		//deltaEntry+=DeltaEntry*
		public Assignment getDeltaEntryAssignment_1_3() { return cDeltaEntryAssignment_1_3; }

		//DeltaEntry
		public RuleCall getDeltaEntryDeltaEntryParserRuleCall_1_3_0() { return cDeltaEntryDeltaEntryParserRuleCall_1_3_0; }

		//type="/merge" ";" importSection=ImportSection? mergeEntry+=MergeEntry*
		public Group getGroup_2() { return cGroup_2; }

		//type="/merge"
		public Assignment getTypeAssignment_2_0() { return cTypeAssignment_2_0; }

		//"/merge"
		public Keyword getTypeMergeKeyword_2_0_0() { return cTypeMergeKeyword_2_0_0; }

		//";"
		public Keyword getSemicolonKeyword_2_1() { return cSemicolonKeyword_2_1; }

		//importSection=ImportSection?
		public Assignment getImportSectionAssignment_2_2() { return cImportSectionAssignment_2_2; }

		//ImportSection
		public RuleCall getImportSectionImportSectionParserRuleCall_2_2_0() { return cImportSectionImportSectionParserRuleCall_2_2_0; }

		//mergeEntry+=MergeEntry*
		public Assignment getMergeEntryAssignment_2_3() { return cMergeEntryAssignment_2_3; }

		//MergeEntry
		public RuleCall getMergeEntryMergeEntryParserRuleCall_2_3_0() { return cMergeEntryMergeEntryParserRuleCall_2_3_0; }
	}

	public class ImportSectionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ImportSection");
		private final Assignment cImportsAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cImportsImportParserRuleCall_0 = (RuleCall)cImportsAssignment.eContents().get(0);
		
		//ImportSection:
		//	imports+=Import+;
		public ParserRule getRule() { return rule; }

		//imports+=Import+
		public Assignment getImportsAssignment() { return cImportsAssignment; }

		//Import
		public RuleCall getImportsImportParserRuleCall_0() { return cImportsImportParserRuleCall_0; }
	}

	public class BnfEntryElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "BnfEntry");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Assignment cSectionheaderAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
		private final RuleCall cSectionheaderSectionHeadingParserRuleCall_0_0 = (RuleCall)cSectionheaderAssignment_0.eContents().get(0);
		private final Assignment cRuleAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
		private final RuleCall cRuleRuleParserRuleCall_1_0 = (RuleCall)cRuleAssignment_1.eContents().get(0);
		
		//BnfEntry:
		//	sectionheader=SectionHeading | rule=Rule;
		public ParserRule getRule() { return rule; }

		//sectionheader=SectionHeading | rule=Rule
		public Alternatives getAlternatives() { return cAlternatives; }

		//sectionheader=SectionHeading
		public Assignment getSectionheaderAssignment_0() { return cSectionheaderAssignment_0; }

		//SectionHeading
		public RuleCall getSectionheaderSectionHeadingParserRuleCall_0_0() { return cSectionheaderSectionHeadingParserRuleCall_0_0; }

		//rule=Rule
		public Assignment getRuleAssignment_1() { return cRuleAssignment_1; }

		//Rule
		public RuleCall getRuleRuleParserRuleCall_1_0() { return cRuleRuleParserRuleCall_1_0; }
	}

	public class DeltaEntryElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "DeltaEntry");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Assignment cRuleAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
		private final RuleCall cRuleRuleParserRuleCall_0_0 = (RuleCall)cRuleAssignment_0.eContents().get(0);
		private final Assignment cSectionheaderAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
		private final RuleCall cSectionheaderSectionHeadingParserRuleCall_1_0 = (RuleCall)cSectionheaderAssignment_1.eContents().get(0);
		private final Assignment cExtRuleAssignment_2 = (Assignment)cAlternatives.eContents().get(2);
		private final RuleCall cExtRuleExtRuleParserRuleCall_2_0 = (RuleCall)cExtRuleAssignment_2.eContents().get(0);
		
		//DeltaEntry:
		//	rule=Rule | sectionheader=SectionHeading | extRule=ExtRule;
		public ParserRule getRule() { return rule; }

		//rule=Rule | sectionheader=SectionHeading | extRule=ExtRule
		public Alternatives getAlternatives() { return cAlternatives; }

		//rule=Rule
		public Assignment getRuleAssignment_0() { return cRuleAssignment_0; }

		//Rule
		public RuleCall getRuleRuleParserRuleCall_0_0() { return cRuleRuleParserRuleCall_0_0; }

		//sectionheader=SectionHeading
		public Assignment getSectionheaderAssignment_1() { return cSectionheaderAssignment_1; }

		//SectionHeading
		public RuleCall getSectionheaderSectionHeadingParserRuleCall_1_0() { return cSectionheaderSectionHeadingParserRuleCall_1_0; }

		//extRule=ExtRule
		public Assignment getExtRuleAssignment_2() { return cExtRuleAssignment_2; }

		//ExtRule
		public RuleCall getExtRuleExtRuleParserRuleCall_2_0() { return cExtRuleExtRuleParserRuleCall_2_0; }
	}

	public class MergeEntryElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MergeEntry");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Assignment cSectionheaderAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
		private final RuleCall cSectionheaderSectionHeadingParserRuleCall_0_0 = (RuleCall)cSectionheaderAssignment_0.eContents().get(0);
		private final Assignment cMergeRuleAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
		private final RuleCall cMergeRuleMergeRuleParserRuleCall_1_0 = (RuleCall)cMergeRuleAssignment_1.eContents().get(0);
		
		//MergeEntry:
		//	sectionheader=SectionHeading | mergeRule=MergeRule;
		public ParserRule getRule() { return rule; }

		//sectionheader=SectionHeading | mergeRule=MergeRule
		public Alternatives getAlternatives() { return cAlternatives; }

		//sectionheader=SectionHeading
		public Assignment getSectionheaderAssignment_0() { return cSectionheaderAssignment_0; }

		//SectionHeading
		public RuleCall getSectionheaderSectionHeadingParserRuleCall_0_0() { return cSectionheaderSectionHeadingParserRuleCall_0_0; }

		//mergeRule=MergeRule
		public Assignment getMergeRuleAssignment_1() { return cMergeRuleAssignment_1; }

		//MergeRule
		public RuleCall getMergeRuleMergeRuleParserRuleCall_1_0() { return cMergeRuleMergeRuleParserRuleCall_1_0; }
	}

	public class SectionHeadingElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "SectionHeading");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cSectionHeadingAction_0 = (Action)cGroup.eContents().get(0);
		private final Assignment cSectionHeaderAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cSectionHeaderSECTIONHEADERTerminalRuleCall_1_0 = (RuleCall)cSectionHeaderAssignment_1.eContents().get(0);
		
		//SectionHeading:
		//	{SectionHeading} sectionHeader=SECTIONHEADER;
		public ParserRule getRule() { return rule; }

		//{SectionHeading} sectionHeader=SECTIONHEADER
		public Group getGroup() { return cGroup; }

		//{SectionHeading}
		public Action getSectionHeadingAction_0() { return cSectionHeadingAction_0; }

		//sectionHeader=SECTIONHEADER
		public Assignment getSectionHeaderAssignment_1() { return cSectionHeaderAssignment_1; }

		//SECTIONHEADER
		public RuleCall getSectionHeaderSECTIONHEADERTerminalRuleCall_1_0() { return cSectionHeaderSECTIONHEADERTerminalRuleCall_1_0; }
	}

	public class ImportElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Import");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cImportKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cImportURIAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cImportURISTRINGTerminalRuleCall_1_0 = (RuleCall)cImportURIAssignment_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cSolidusKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Alternatives cAlternatives_2_1 = (Alternatives)cGroup_2.eContents().get(1);
		private final Assignment cGrammarTypeAssignment_2_1_0 = (Assignment)cAlternatives_2_1.eContents().get(0);
		private final Keyword cGrammarTypeCoreKeyword_2_1_0_0 = (Keyword)cGrammarTypeAssignment_2_1_0.eContents().get(0);
		private final Assignment cGrammarTypeAssignment_2_1_1 = (Assignment)cAlternatives_2_1.eContents().get(1);
		private final Keyword cGrammarTypePackageKeyword_2_1_1_0 = (Keyword)cGrammarTypeAssignment_2_1_1.eContents().get(0);
		private final Assignment cGrammarTypeAssignment_2_1_2 = (Assignment)cAlternatives_2_1.eContents().get(2);
		private final Keyword cGrammarTypeUpdateKeyword_2_1_2_0 = (Keyword)cGrammarTypeAssignment_2_1_2.eContents().get(0);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Keyword cLabelKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final Assignment cLabelAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
		private final RuleCall cLabelIDTerminalRuleCall_3_1_0 = (RuleCall)cLabelAssignment_3_1.eContents().get(0);
		private final Keyword cSemicolonKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		//Import:
		//	"import" importURI=STRING ("/" (grammarType="core" | grammarType="package" | grammarType="update"))? ("label:"
		//	label=ID)? ";";
		public ParserRule getRule() { return rule; }

		//"import" importURI=STRING ("/" (grammarType="core" | grammarType="package" | grammarType="update"))? ("label:"
		//label=ID)? ";"
		public Group getGroup() { return cGroup; }

		//"import"
		public Keyword getImportKeyword_0() { return cImportKeyword_0; }

		//importURI=STRING
		public Assignment getImportURIAssignment_1() { return cImportURIAssignment_1; }

		//STRING
		public RuleCall getImportURISTRINGTerminalRuleCall_1_0() { return cImportURISTRINGTerminalRuleCall_1_0; }

		//("/" (grammarType="core" | grammarType="package" | grammarType="update"))?
		public Group getGroup_2() { return cGroup_2; }

		//"/"
		public Keyword getSolidusKeyword_2_0() { return cSolidusKeyword_2_0; }

		//grammarType="core" | grammarType="package" | grammarType="update"
		public Alternatives getAlternatives_2_1() { return cAlternatives_2_1; }

		//grammarType="core"
		public Assignment getGrammarTypeAssignment_2_1_0() { return cGrammarTypeAssignment_2_1_0; }

		//"core"
		public Keyword getGrammarTypeCoreKeyword_2_1_0_0() { return cGrammarTypeCoreKeyword_2_1_0_0; }

		//grammarType="package"
		public Assignment getGrammarTypeAssignment_2_1_1() { return cGrammarTypeAssignment_2_1_1; }

		//"package"
		public Keyword getGrammarTypePackageKeyword_2_1_1_0() { return cGrammarTypePackageKeyword_2_1_1_0; }

		//grammarType="update"
		public Assignment getGrammarTypeAssignment_2_1_2() { return cGrammarTypeAssignment_2_1_2; }

		//"update"
		public Keyword getGrammarTypeUpdateKeyword_2_1_2_0() { return cGrammarTypeUpdateKeyword_2_1_2_0; }

		//("label:" label=ID)?
		public Group getGroup_3() { return cGroup_3; }

		//"label:"
		public Keyword getLabelKeyword_3_0() { return cLabelKeyword_3_0; }

		//label=ID
		public Assignment getLabelAssignment_3_1() { return cLabelAssignment_3_1; }

		//ID
		public RuleCall getLabelIDTerminalRuleCall_3_1_0() { return cLabelIDTerminalRuleCall_3_1_0; }

		//";"
		public Keyword getSemicolonKeyword_4() { return cSemicolonKeyword_4; }
	}

	public class RuleElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Rule");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cGroup.eContents().get(0);
		private final Assignment cRulenumberAssignment_0_0 = (Assignment)cGroup_0.eContents().get(0);
		private final RuleCall cRulenumberINTTerminalRuleCall_0_0_0 = (RuleCall)cRulenumberAssignment_0_0.eContents().get(0);
		private final Assignment cRulevariantAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
		private final RuleCall cRulevariantIDTerminalRuleCall_0_1_0 = (RuleCall)cRulevariantAssignment_0_1.eContents().get(0);
		private final Keyword cFullStopKeyword_0_2 = (Keyword)cGroup_0.eContents().get(2);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Keyword cColonColonEqualsSignKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cDefinitionListAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cDefinitionListDefinitionListParserRuleCall_3_0 = (RuleCall)cDefinitionListAssignment_3.eContents().get(0);
		private final Keyword cSemicolonKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		//Rule:
		//	(rulenumber=INT rulevariant=ID? ".")? name=ID "::=" definitionList=DefinitionList? ";"?;
		public ParserRule getRule() { return rule; }

		//(rulenumber=INT rulevariant=ID? ".")? name=ID "::=" definitionList=DefinitionList? ";"?
		public Group getGroup() { return cGroup; }

		//(rulenumber=INT rulevariant=ID? ".")?
		public Group getGroup_0() { return cGroup_0; }

		//rulenumber=INT
		public Assignment getRulenumberAssignment_0_0() { return cRulenumberAssignment_0_0; }

		//INT
		public RuleCall getRulenumberINTTerminalRuleCall_0_0_0() { return cRulenumberINTTerminalRuleCall_0_0_0; }

		//rulevariant=ID?
		public Assignment getRulevariantAssignment_0_1() { return cRulevariantAssignment_0_1; }

		//ID
		public RuleCall getRulevariantIDTerminalRuleCall_0_1_0() { return cRulevariantIDTerminalRuleCall_0_1_0; }

		//"."
		public Keyword getFullStopKeyword_0_2() { return cFullStopKeyword_0_2; }

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

		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }

		//"::="
		public Keyword getColonColonEqualsSignKeyword_2() { return cColonColonEqualsSignKeyword_2; }

		//definitionList=DefinitionList?
		public Assignment getDefinitionListAssignment_3() { return cDefinitionListAssignment_3; }

		//DefinitionList
		public RuleCall getDefinitionListDefinitionListParserRuleCall_3_0() { return cDefinitionListDefinitionListParserRuleCall_3_0; }

		//";"?
		public Keyword getSemicolonKeyword_4() { return cSemicolonKeyword_4; }
	}

	public class ExtRuleElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ExtRule");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cGroup.eContents().get(0);
		private final Assignment cRulenumberAssignment_0_0 = (Assignment)cGroup_0.eContents().get(0);
		private final RuleCall cRulenumberINTTerminalRuleCall_0_0_0 = (RuleCall)cRulenumberAssignment_0_0.eContents().get(0);
		private final Assignment cRulevariantAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
		private final RuleCall cRulevariantIDTerminalRuleCall_0_1_0 = (RuleCall)cRulevariantAssignment_0_1.eContents().get(0);
		private final Keyword cFullStopKeyword_0_2 = (Keyword)cGroup_0.eContents().get(2);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cLeftParenthesisKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cRuleextAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cRuleextINTTerminalRuleCall_2_1_0 = (RuleCall)cRuleextAssignment_2_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
		private final Keyword cLessThanSignHyphenMinusKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Alternatives cAlternatives_4 = (Alternatives)cGroup.eContents().get(4);
		private final Assignment cElementsAssignment_4_0 = (Assignment)cAlternatives_4.eContents().get(0);
		private final RuleCall cElementsAtomParserRuleCall_4_0_0 = (RuleCall)cElementsAssignment_4_0.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_4_1 = (Keyword)cAlternatives_4.eContents().get(1);
		private final Keyword cRightSquareBracketKeyword_4_2 = (Keyword)cAlternatives_4.eContents().get(2);
		private final Keyword cRightCurlyBracketKeyword_4_3 = (Keyword)cAlternatives_4.eContents().get(3);
		private final Keyword cVerticalLineKeyword_4_4 = (Keyword)cAlternatives_4.eContents().get(4);
		private final Keyword cLeftParenthesisKeyword_4_5 = (Keyword)cAlternatives_4.eContents().get(5);
		private final Keyword cLeftSquareBracketKeyword_4_6 = (Keyword)cAlternatives_4.eContents().get(6);
		private final Keyword cLeftCurlyBracketKeyword_4_7 = (Keyword)cAlternatives_4.eContents().get(7);
		private final Keyword cAsteriskKeyword_4_8 = (Keyword)cAlternatives_4.eContents().get(8);
		private final Keyword cPlusSignKeyword_4_9 = (Keyword)cAlternatives_4.eContents().get(9);
		private final Keyword cSemicolonKeyword_5 = (Keyword)cGroup.eContents().get(5);
		
		//ExtRule:
		//	(rulenumber=INT rulevariant=ID? ".")? name=ID ("(" ruleext=INT ")") "<-" (elements+=Atom | ")" | "]" | "}" | "|" |
		//	"(" | "[" | "{" | "*" | "+")* ";"?;
		public ParserRule getRule() { return rule; }

		//(rulenumber=INT rulevariant=ID? ".")? name=ID ("(" ruleext=INT ")") "<-" (elements+=Atom | ")" | "]" | "}" | "|" | "(" |
		//"[" | "{" | "*" | "+")* ";"?
		public Group getGroup() { return cGroup; }

		//(rulenumber=INT rulevariant=ID? ".")?
		public Group getGroup_0() { return cGroup_0; }

		//rulenumber=INT
		public Assignment getRulenumberAssignment_0_0() { return cRulenumberAssignment_0_0; }

		//INT
		public RuleCall getRulenumberINTTerminalRuleCall_0_0_0() { return cRulenumberINTTerminalRuleCall_0_0_0; }

		//rulevariant=ID?
		public Assignment getRulevariantAssignment_0_1() { return cRulevariantAssignment_0_1; }

		//ID
		public RuleCall getRulevariantIDTerminalRuleCall_0_1_0() { return cRulevariantIDTerminalRuleCall_0_1_0; }

		//"."
		public Keyword getFullStopKeyword_0_2() { return cFullStopKeyword_0_2; }

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

		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }

		//"(" ruleext=INT ")"
		public Group getGroup_2() { return cGroup_2; }

		//"("
		public Keyword getLeftParenthesisKeyword_2_0() { return cLeftParenthesisKeyword_2_0; }

		//ruleext=INT
		public Assignment getRuleextAssignment_2_1() { return cRuleextAssignment_2_1; }

		//INT
		public RuleCall getRuleextINTTerminalRuleCall_2_1_0() { return cRuleextINTTerminalRuleCall_2_1_0; }

		//")"
		public Keyword getRightParenthesisKeyword_2_2() { return cRightParenthesisKeyword_2_2; }

		//"<-"
		public Keyword getLessThanSignHyphenMinusKeyword_3() { return cLessThanSignHyphenMinusKeyword_3; }

		//(elements+=Atom | ")" | "]" | "}" | "|" | "(" | "[" | "{" | "*" | "+")*
		public Alternatives getAlternatives_4() { return cAlternatives_4; }

		//elements+=Atom
		public Assignment getElementsAssignment_4_0() { return cElementsAssignment_4_0; }

		//Atom
		public RuleCall getElementsAtomParserRuleCall_4_0_0() { return cElementsAtomParserRuleCall_4_0_0; }

		//")"
		public Keyword getRightParenthesisKeyword_4_1() { return cRightParenthesisKeyword_4_1; }

		//"]"
		public Keyword getRightSquareBracketKeyword_4_2() { return cRightSquareBracketKeyword_4_2; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_4_3() { return cRightCurlyBracketKeyword_4_3; }

		//"|"
		public Keyword getVerticalLineKeyword_4_4() { return cVerticalLineKeyword_4_4; }

		//"("
		public Keyword getLeftParenthesisKeyword_4_5() { return cLeftParenthesisKeyword_4_5; }

		//"["
		public Keyword getLeftSquareBracketKeyword_4_6() { return cLeftSquareBracketKeyword_4_6; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_4_7() { return cLeftCurlyBracketKeyword_4_7; }

		//"*"
		public Keyword getAsteriskKeyword_4_8() { return cAsteriskKeyword_4_8; }

		//"+"
		public Keyword getPlusSignKeyword_4_9() { return cPlusSignKeyword_4_9; }

		//";"?
		public Keyword getSemicolonKeyword_5() { return cSemicolonKeyword_5; }
	}

	public class MergeRuleElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MergeRule");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cGlobalCombinatorParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cRuleCombinatorParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cHookCombinatorParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		
		//MergeRule:
		//	GlobalCombinator | RuleCombinator | HookCombinator;
		public ParserRule getRule() { return rule; }

		//GlobalCombinator | RuleCombinator | HookCombinator
		public Alternatives getAlternatives() { return cAlternatives; }

		//GlobalCombinator
		public RuleCall getGlobalCombinatorParserRuleCall_0() { return cGlobalCombinatorParserRuleCall_0; }

		//RuleCombinator
		public RuleCall getRuleCombinatorParserRuleCall_1() { return cRuleCombinatorParserRuleCall_1; }

		//HookCombinator
		public RuleCall getHookCombinatorParserRuleCall_2() { return cHookCombinatorParserRuleCall_2; }
	}

	public class GlobalCombinatorElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "GlobalCombinator");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cGroup.eContents().get(0);
		private final Keyword cGlobalKeyword_0_0 = (Keyword)cGroup_0.eContents().get(0);
		private final Keyword cCombinatorKeyword_0_1 = (Keyword)cGroup_0.eContents().get(1);
		private final Assignment cLogicAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cLogicLOGICTerminalRuleCall_1_0 = (RuleCall)cLogicAssignment_1.eContents().get(0);
		private final Keyword cSemicolonKeyword_2 = (Keyword)cGroup.eContents().get(2);
		
		//GlobalCombinator:
		//	("global" "combinator:") logic=LOGIC ";"?;
		public ParserRule getRule() { return rule; }

		//("global" "combinator:") logic=LOGIC ";"?
		public Group getGroup() { return cGroup; }

		//"global" "combinator:"
		public Group getGroup_0() { return cGroup_0; }

		//"global"
		public Keyword getGlobalKeyword_0_0() { return cGlobalKeyword_0_0; }

		//"combinator:"
		public Keyword getCombinatorKeyword_0_1() { return cCombinatorKeyword_0_1; }

		//logic=LOGIC
		public Assignment getLogicAssignment_1() { return cLogicAssignment_1; }

		//LOGIC
		public RuleCall getLogicLOGICTerminalRuleCall_1_0() { return cLogicLOGICTerminalRuleCall_1_0; }

		//";"?
		public Keyword getSemicolonKeyword_2() { return cSemicolonKeyword_2; }
	}

	public class RuleCombinatorElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RuleCombinator");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cGroup.eContents().get(0);
		private final Keyword cRuleKeyword_0_0 = (Keyword)cGroup_0.eContents().get(0);
		private final Keyword cCombinatorKeyword_0_1 = (Keyword)cGroup_0.eContents().get(1);
		private final Assignment cNameAssignment_0_2 = (Assignment)cGroup_0.eContents().get(2);
		private final RuleCall cNameIDTerminalRuleCall_0_2_0 = (RuleCall)cNameAssignment_0_2.eContents().get(0);
		private final Assignment cLogicAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cLogicLOGICTerminalRuleCall_1_0 = (RuleCall)cLogicAssignment_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cLeftParenthesisKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cLABELAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cLABELSTRINGTerminalRuleCall_2_1_0 = (RuleCall)cLABELAssignment_2_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
		private final Keyword cSemicolonKeyword_3 = (Keyword)cGroup.eContents().get(3);
		
		//RuleCombinator:
		//	("rule" "combinator:" name=ID) logic=LOGIC ("(" LABEL+=STRING ")")* ";"?;
		public ParserRule getRule() { return rule; }

		//("rule" "combinator:" name=ID) logic=LOGIC ("(" LABEL+=STRING ")")* ";"?
		public Group getGroup() { return cGroup; }

		//"rule" "combinator:" name=ID
		public Group getGroup_0() { return cGroup_0; }

		//"rule"
		public Keyword getRuleKeyword_0_0() { return cRuleKeyword_0_0; }

		//"combinator:"
		public Keyword getCombinatorKeyword_0_1() { return cCombinatorKeyword_0_1; }

		//name=ID
		public Assignment getNameAssignment_0_2() { return cNameAssignment_0_2; }

		//ID
		public RuleCall getNameIDTerminalRuleCall_0_2_0() { return cNameIDTerminalRuleCall_0_2_0; }

		//logic=LOGIC
		public Assignment getLogicAssignment_1() { return cLogicAssignment_1; }

		//LOGIC
		public RuleCall getLogicLOGICTerminalRuleCall_1_0() { return cLogicLOGICTerminalRuleCall_1_0; }

		//("(" LABEL+=STRING ")")*
		public Group getGroup_2() { return cGroup_2; }

		//"("
		public Keyword getLeftParenthesisKeyword_2_0() { return cLeftParenthesisKeyword_2_0; }

		//LABEL+=STRING
		public Assignment getLABELAssignment_2_1() { return cLABELAssignment_2_1; }

		//STRING
		public RuleCall getLABELSTRINGTerminalRuleCall_2_1_0() { return cLABELSTRINGTerminalRuleCall_2_1_0; }

		//")"
		public Keyword getRightParenthesisKeyword_2_2() { return cRightParenthesisKeyword_2_2; }

		//";"?
		public Keyword getSemicolonKeyword_3() { return cSemicolonKeyword_3; }
	}

	public class HookCombinatorElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "HookCombinator");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cHookKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Keyword cCombinatorKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cNameAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cNameIDTerminalRuleCall_2_0 = (RuleCall)cNameAssignment_2.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cRuleextAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cRuleextINTTerminalRuleCall_4_0 = (RuleCall)cRuleextAssignment_4.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
		private final Assignment cLogicAssignment_6 = (Assignment)cGroup.eContents().get(6);
		private final RuleCall cLogicLOGICTerminalRuleCall_6_0 = (RuleCall)cLogicAssignment_6.eContents().get(0);
		private final Group cGroup_7 = (Group)cGroup.eContents().get(7);
		private final Keyword cLeftParenthesisKeyword_7_0 = (Keyword)cGroup_7.eContents().get(0);
		private final Assignment cLABELAssignment_7_1 = (Assignment)cGroup_7.eContents().get(1);
		private final RuleCall cLABELSTRINGTerminalRuleCall_7_1_0 = (RuleCall)cLABELAssignment_7_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_7_2 = (Keyword)cGroup_7.eContents().get(2);
		private final Keyword cSemicolonKeyword_8 = (Keyword)cGroup.eContents().get(8);
		
		//HookCombinator:
		//	"hook" "combinator:" name=ID "(" ruleext=INT ")" logic=LOGIC? ("(" LABEL+=STRING ")")+ ";"?;
		public ParserRule getRule() { return rule; }

		//"hook" "combinator:" name=ID "(" ruleext=INT ")" logic=LOGIC? ("(" LABEL+=STRING ")")+ ";"?
		public Group getGroup() { return cGroup; }

		//"hook"
		public Keyword getHookKeyword_0() { return cHookKeyword_0; }

		//"combinator:"
		public Keyword getCombinatorKeyword_1() { return cCombinatorKeyword_1; }

		//name=ID
		public Assignment getNameAssignment_2() { return cNameAssignment_2; }

		//ID
		public RuleCall getNameIDTerminalRuleCall_2_0() { return cNameIDTerminalRuleCall_2_0; }

		//"("
		public Keyword getLeftParenthesisKeyword_3() { return cLeftParenthesisKeyword_3; }

		//ruleext=INT
		public Assignment getRuleextAssignment_4() { return cRuleextAssignment_4; }

		//INT
		public RuleCall getRuleextINTTerminalRuleCall_4_0() { return cRuleextINTTerminalRuleCall_4_0; }

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

		//logic=LOGIC?
		public Assignment getLogicAssignment_6() { return cLogicAssignment_6; }

		//LOGIC
		public RuleCall getLogicLOGICTerminalRuleCall_6_0() { return cLogicLOGICTerminalRuleCall_6_0; }

		//("(" LABEL+=STRING ")")+
		public Group getGroup_7() { return cGroup_7; }

		//"("
		public Keyword getLeftParenthesisKeyword_7_0() { return cLeftParenthesisKeyword_7_0; }

		//LABEL+=STRING
		public Assignment getLABELAssignment_7_1() { return cLABELAssignment_7_1; }

		//STRING
		public RuleCall getLABELSTRINGTerminalRuleCall_7_1_0() { return cLABELSTRINGTerminalRuleCall_7_1_0; }

		//")"
		public Keyword getRightParenthesisKeyword_7_2() { return cRightParenthesisKeyword_7_2; }

		//";"?
		public Keyword getSemicolonKeyword_8() { return cSemicolonKeyword_8; }
	}

	public class DefinitionListElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "DefinitionList");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cSingleDefinitionAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cSingleDefinitionSingleDefinitionParserRuleCall_0_0 = (RuleCall)cSingleDefinitionAssignment_0.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cVerticalLineKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Assignment cSingleDefinitionAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cSingleDefinitionSingleDefinitionParserRuleCall_1_1_0 = (RuleCall)cSingleDefinitionAssignment_1_1.eContents().get(0);
		
		//DefinitionList:
		//	singleDefinition+=SingleDefinition ("|" singleDefinition+=SingleDefinition)*;
		public ParserRule getRule() { return rule; }

		//singleDefinition+=SingleDefinition ("|" singleDefinition+=SingleDefinition)*
		public Group getGroup() { return cGroup; }

		//singleDefinition+=SingleDefinition
		public Assignment getSingleDefinitionAssignment_0() { return cSingleDefinitionAssignment_0; }

		//SingleDefinition
		public RuleCall getSingleDefinitionSingleDefinitionParserRuleCall_0_0() { return cSingleDefinitionSingleDefinitionParserRuleCall_0_0; }

		//("|" singleDefinition+=SingleDefinition)*
		public Group getGroup_1() { return cGroup_1; }

		//"|"
		public Keyword getVerticalLineKeyword_1_0() { return cVerticalLineKeyword_1_0; }

		//singleDefinition+=SingleDefinition
		public Assignment getSingleDefinitionAssignment_1_1() { return cSingleDefinitionAssignment_1_1; }

		//SingleDefinition
		public RuleCall getSingleDefinitionSingleDefinitionParserRuleCall_1_1_0() { return cSingleDefinitionSingleDefinitionParserRuleCall_1_1_0; }
	}

	public class SingleDefinitionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "SingleDefinition");
		private final Assignment cTermsAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cTermsTermParserRuleCall_0 = (RuleCall)cTermsAssignment.eContents().get(0);
		
		//SingleDefinition:
		//	terms+=Term+;
		public ParserRule getRule() { return rule; }

		//terms+=Term+
		public Assignment getTermsAssignment() { return cTermsAssignment; }

		//Term
		public RuleCall getTermsTermParserRuleCall_0() { return cTermsTermParserRuleCall_0; }
	}

	public class TermElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Term");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Assignment cTermAtomAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
		private final RuleCall cTermAtomAtomParserRuleCall_0_0 = (RuleCall)cTermAtomAssignment_0.eContents().get(0);
		private final Assignment cTermGroupedSequenceAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
		private final RuleCall cTermGroupedSequenceGroupedSequenceParserRuleCall_1_0 = (RuleCall)cTermGroupedSequenceAssignment_1.eContents().get(0);
		private final Assignment cTermOptionalSequenceAssignment_2 = (Assignment)cAlternatives.eContents().get(2);
		private final RuleCall cTermOptionalSequenceOptionalSequenceParserRuleCall_2_0 = (RuleCall)cTermOptionalSequenceAssignment_2.eContents().get(0);
		private final Assignment cTermRepeatedSequenceAssignment_3 = (Assignment)cAlternatives.eContents().get(3);
		private final RuleCall cTermRepeatedSequenceRepeatedSequenceParserRuleCall_3_0 = (RuleCall)cTermRepeatedSequenceAssignment_3.eContents().get(0);
		
		//Term:
		//	termAtom=Atom | termGroupedSequence=GroupedSequence | termOptionalSequence=OptionalSequence |
		//	termRepeatedSequence=RepeatedSequence;
		public ParserRule getRule() { return rule; }

		//termAtom=Atom | termGroupedSequence=GroupedSequence | termOptionalSequence=OptionalSequence |
		//termRepeatedSequence=RepeatedSequence
		public Alternatives getAlternatives() { return cAlternatives; }

		//termAtom=Atom
		public Assignment getTermAtomAssignment_0() { return cTermAtomAssignment_0; }

		//Atom
		public RuleCall getTermAtomAtomParserRuleCall_0_0() { return cTermAtomAtomParserRuleCall_0_0; }

		//termGroupedSequence=GroupedSequence
		public Assignment getTermGroupedSequenceAssignment_1() { return cTermGroupedSequenceAssignment_1; }

		//GroupedSequence
		public RuleCall getTermGroupedSequenceGroupedSequenceParserRuleCall_1_0() { return cTermGroupedSequenceGroupedSequenceParserRuleCall_1_0; }

		//termOptionalSequence=OptionalSequence
		public Assignment getTermOptionalSequenceAssignment_2() { return cTermOptionalSequenceAssignment_2; }

		//OptionalSequence
		public RuleCall getTermOptionalSequenceOptionalSequenceParserRuleCall_2_0() { return cTermOptionalSequenceOptionalSequenceParserRuleCall_2_0; }

		//termRepeatedSequence=RepeatedSequence
		public Assignment getTermRepeatedSequenceAssignment_3() { return cTermRepeatedSequenceAssignment_3; }

		//RepeatedSequence
		public RuleCall getTermRepeatedSequenceRepeatedSequenceParserRuleCall_3_0() { return cTermRepeatedSequenceRepeatedSequenceParserRuleCall_3_0; }
	}

	public class AtomElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Atom");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Assignment cAtomStringRuleAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
		private final RuleCall cAtomStringRuleStringRuleParserRuleCall_0_0 = (RuleCall)cAtomStringRuleAssignment_0.eContents().get(0);
		private final Assignment cAtomRuleReferenceAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
		private final RuleCall cAtomRuleReferenceRuleReferenceParserRuleCall_1_0 = (RuleCall)cAtomRuleReferenceAssignment_1.eContents().get(0);
		
		//Atom:
		//	atomStringRule=StringRule | atomRuleReference=RuleReference;
		public ParserRule getRule() { return rule; }

		//atomStringRule=StringRule | atomRuleReference=RuleReference
		public Alternatives getAlternatives() { return cAlternatives; }

		//atomStringRule=StringRule
		public Assignment getAtomStringRuleAssignment_0() { return cAtomStringRuleAssignment_0; }

		//StringRule
		public RuleCall getAtomStringRuleStringRuleParserRuleCall_0_0() { return cAtomStringRuleStringRuleParserRuleCall_0_0; }

		//atomRuleReference=RuleReference
		public Assignment getAtomRuleReferenceAssignment_1() { return cAtomRuleReferenceAssignment_1; }

		//RuleReference
		public RuleCall getAtomRuleReferenceRuleReferenceParserRuleCall_1_0() { return cAtomRuleReferenceRuleReferenceParserRuleCall_1_0; }
	}

	public class RuleReferenceElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RuleReference");
		private final Assignment cRulerefAssignment = (Assignment)rule.eContents().get(1);
		private final CrossReference cRulerefRuleCrossReference_0 = (CrossReference)cRulerefAssignment.eContents().get(0);
		private final RuleCall cRulerefRuleIDTerminalRuleCall_0_1 = (RuleCall)cRulerefRuleCrossReference_0.eContents().get(1);
		
		//RuleReference:
		//	ruleref=[Rule];
		public ParserRule getRule() { return rule; }

		//ruleref=[Rule]
		public Assignment getRulerefAssignment() { return cRulerefAssignment; }

		//[Rule]
		public CrossReference getRulerefRuleCrossReference_0() { return cRulerefRuleCrossReference_0; }

		//ID
		public RuleCall getRulerefRuleIDTerminalRuleCall_0_1() { return cRulerefRuleIDTerminalRuleCall_0_1; }
	}

	public class StringRuleElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "StringRule");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Assignment cLiteralAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
		private final RuleCall cLiteralSTRINGTerminalRuleCall_0_0 = (RuleCall)cLiteralAssignment_0.eContents().get(0);
		private final Assignment cColonAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
		private final RuleCall cColonCOLONTerminalRuleCall_1_0 = (RuleCall)cColonAssignment_1.eContents().get(0);
		
		//StringRule:
		//	literal=STRING | colon=COLON;
		public ParserRule getRule() { return rule; }

		//literal=STRING | colon=COLON
		public Alternatives getAlternatives() { return cAlternatives; }

		//literal=STRING
		public Assignment getLiteralAssignment_0() { return cLiteralAssignment_0; }

		//STRING
		public RuleCall getLiteralSTRINGTerminalRuleCall_0_0() { return cLiteralSTRINGTerminalRuleCall_0_0; }

		//colon=COLON
		public Assignment getColonAssignment_1() { return cColonAssignment_1; }

		//COLON
		public RuleCall getColonCOLONTerminalRuleCall_1_0() { return cColonCOLONTerminalRuleCall_1_0; }
	}

	public class GroupedSequenceElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "GroupedSequence");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cDefinitionListAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cDefinitionListDefinitionListParserRuleCall_1_0 = (RuleCall)cDefinitionListAssignment_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_2 = (Keyword)cGroup.eContents().get(2);
		
		//GroupedSequence:
		//	"(" definitionList+=DefinitionList ")";
		public ParserRule getRule() { return rule; }

		//"(" definitionList+=DefinitionList ")"
		public Group getGroup() { return cGroup; }

		//"("
		public Keyword getLeftParenthesisKeyword_0() { return cLeftParenthesisKeyword_0; }

		//definitionList+=DefinitionList
		public Assignment getDefinitionListAssignment_1() { return cDefinitionListAssignment_1; }

		//DefinitionList
		public RuleCall getDefinitionListDefinitionListParserRuleCall_1_0() { return cDefinitionListDefinitionListParserRuleCall_1_0; }

		//")"
		public Keyword getRightParenthesisKeyword_2() { return cRightParenthesisKeyword_2; }
	}

	public class OptionalSequenceElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "OptionalSequence");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLeftSquareBracketKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cDefinitionListAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cDefinitionListDefinitionListParserRuleCall_1_0 = (RuleCall)cDefinitionListAssignment_1.eContents().get(0);
		private final Keyword cRightSquareBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		
		//OptionalSequence:
		//	"[" definitionList+=DefinitionList "]";
		public ParserRule getRule() { return rule; }

		//"[" definitionList+=DefinitionList "]"
		public Group getGroup() { return cGroup; }

		//"["
		public Keyword getLeftSquareBracketKeyword_0() { return cLeftSquareBracketKeyword_0; }

		//definitionList+=DefinitionList
		public Assignment getDefinitionListAssignment_1() { return cDefinitionListAssignment_1; }

		//DefinitionList
		public RuleCall getDefinitionListDefinitionListParserRuleCall_1_0() { return cDefinitionListDefinitionListParserRuleCall_1_0; }

		//"]"
		public Keyword getRightSquareBracketKeyword_2() { return cRightSquareBracketKeyword_2; }
	}

	public class RepeatedSequenceElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RepeatedSequence");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLeftCurlyBracketKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cDefinitionsAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cDefinitionsDefinitionListParserRuleCall_1_0 = (RuleCall)cDefinitionsAssignment_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cMorethanonceAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final Keyword cMorethanoncePlusSignKeyword_3_0 = (Keyword)cMorethanonceAssignment_3.eContents().get(0);
		
		//RepeatedSequence:
		//	"{" definitions+=DefinitionList "}" morethanonce?="+"?;
		public ParserRule getRule() { return rule; }

		//"{" definitions+=DefinitionList "}" morethanonce?="+"?
		public Group getGroup() { return cGroup; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_0() { return cLeftCurlyBracketKeyword_0; }

		//definitions+=DefinitionList
		public Assignment getDefinitionsAssignment_1() { return cDefinitionsAssignment_1; }

		//DefinitionList
		public RuleCall getDefinitionsDefinitionListParserRuleCall_1_0() { return cDefinitionsDefinitionListParserRuleCall_1_0; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_2() { return cRightCurlyBracketKeyword_2; }

		//morethanonce?="+"?
		public Assignment getMorethanonceAssignment_3() { return cMorethanonceAssignment_3; }

		//"+"
		public Keyword getMorethanoncePlusSignKeyword_3_0() { return cMorethanoncePlusSignKeyword_3_0; }
	}
	
	
	private EtsiBnfElements pEtsiBnf;
	private ImportSectionElements pImportSection;
	private BnfEntryElements pBnfEntry;
	private DeltaEntryElements pDeltaEntry;
	private MergeEntryElements pMergeEntry;
	private SectionHeadingElements pSectionHeading;
	private ImportElements pImport;
	private RuleElements pRule;
	private ExtRuleElements pExtRule;
	private MergeRuleElements pMergeRule;
	private GlobalCombinatorElements pGlobalCombinator;
	private RuleCombinatorElements pRuleCombinator;
	private HookCombinatorElements pHookCombinator;
	private DefinitionListElements pDefinitionList;
	private SingleDefinitionElements pSingleDefinition;
	private TermElements pTerm;
	private AtomElements pAtom;
	private RuleReferenceElements pRuleReference;
	private StringRuleElements pStringRule;
	private GroupedSequenceElements pGroupedSequence;
	private OptionalSequenceElements pOptionalSequence;
	private RepeatedSequenceElements pRepeatedSequence;
	private TerminalRule tID;
	private TerminalRule tINT;
	private TerminalRule tWS;
	private TerminalRule tCOLON;
	private TerminalRule tSTRING;
	private TerminalRule tSECTIONHEADER;
	private TerminalRule tSL_COMMENT;
	private TerminalRule tML_COMMENT;
	private TerminalRule tLOGIC;
	
	private final Grammar grammar;

	@Inject
	public EbnfGrammarAccess(GrammarProvider grammarProvider) {
		this.grammar = internalFindGrammar(grammarProvider);
	}
	
	protected Grammar internalFindGrammar(GrammarProvider grammarProvider) {
		Grammar grammar = grammarProvider.getGrammar(this);
		while (grammar != null) {
			if ("de.ugoe.cs.swe.bnftools.Ebnf".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;
	}
	

	
	//// -----------------------------------------------------------------------------------------------
	//// Parser Rules
	//// -----------------------------------------------------------------------------------------------
	//EtsiBnf:
	//	"grammar" name=ID (type="/bnf"? ";" importSection=ImportSection? bnfEntry+=BnfEntry+) | type="/delta" ";"
	//	importSection=ImportSection? deltaEntry+=DeltaEntry* | type="/merge" ";" importSection=ImportSection?
	//	mergeEntry+=MergeEntry*;
	public EtsiBnfElements getEtsiBnfAccess() {
		return (pEtsiBnf != null) ? pEtsiBnf : (pEtsiBnf = new EtsiBnfElements());
	}
	
	public ParserRule getEtsiBnfRule() {
		return getEtsiBnfAccess().getRule();
	}

	//ImportSection:
	//	imports+=Import+;
	public ImportSectionElements getImportSectionAccess() {
		return (pImportSection != null) ? pImportSection : (pImportSection = new ImportSectionElements());
	}
	
	public ParserRule getImportSectionRule() {
		return getImportSectionAccess().getRule();
	}

	//BnfEntry:
	//	sectionheader=SectionHeading | rule=Rule;
	public BnfEntryElements getBnfEntryAccess() {
		return (pBnfEntry != null) ? pBnfEntry : (pBnfEntry = new BnfEntryElements());
	}
	
	public ParserRule getBnfEntryRule() {
		return getBnfEntryAccess().getRule();
	}

	//DeltaEntry:
	//	rule=Rule | sectionheader=SectionHeading | extRule=ExtRule;
	public DeltaEntryElements getDeltaEntryAccess() {
		return (pDeltaEntry != null) ? pDeltaEntry : (pDeltaEntry = new DeltaEntryElements());
	}
	
	public ParserRule getDeltaEntryRule() {
		return getDeltaEntryAccess().getRule();
	}

	//MergeEntry:
	//	sectionheader=SectionHeading | mergeRule=MergeRule;
	public MergeEntryElements getMergeEntryAccess() {
		return (pMergeEntry != null) ? pMergeEntry : (pMergeEntry = new MergeEntryElements());
	}
	
	public ParserRule getMergeEntryRule() {
		return getMergeEntryAccess().getRule();
	}

	//SectionHeading:
	//	{SectionHeading} sectionHeader=SECTIONHEADER;
	public SectionHeadingElements getSectionHeadingAccess() {
		return (pSectionHeading != null) ? pSectionHeading : (pSectionHeading = new SectionHeadingElements());
	}
	
	public ParserRule getSectionHeadingRule() {
		return getSectionHeadingAccess().getRule();
	}

	//Import:
	//	"import" importURI=STRING ("/" (grammarType="core" | grammarType="package" | grammarType="update"))? ("label:"
	//	label=ID)? ";";
	public ImportElements getImportAccess() {
		return (pImport != null) ? pImport : (pImport = new ImportElements());
	}
	
	public ParserRule getImportRule() {
		return getImportAccess().getRule();
	}

	//Rule:
	//	(rulenumber=INT rulevariant=ID? ".")? name=ID "::=" definitionList=DefinitionList? ";"?;
	public RuleElements getRuleAccess() {
		return (pRule != null) ? pRule : (pRule = new RuleElements());
	}
	
	public ParserRule getRuleRule() {
		return getRuleAccess().getRule();
	}

	//ExtRule:
	//	(rulenumber=INT rulevariant=ID? ".")? name=ID ("(" ruleext=INT ")") "<-" (elements+=Atom | ")" | "]" | "}" | "|" |
	//	"(" | "[" | "{" | "*" | "+")* ";"?;
	public ExtRuleElements getExtRuleAccess() {
		return (pExtRule != null) ? pExtRule : (pExtRule = new ExtRuleElements());
	}
	
	public ParserRule getExtRuleRule() {
		return getExtRuleAccess().getRule();
	}

	//MergeRule:
	//	GlobalCombinator | RuleCombinator | HookCombinator;
	public MergeRuleElements getMergeRuleAccess() {
		return (pMergeRule != null) ? pMergeRule : (pMergeRule = new MergeRuleElements());
	}
	
	public ParserRule getMergeRuleRule() {
		return getMergeRuleAccess().getRule();
	}

	//GlobalCombinator:
	//	("global" "combinator:") logic=LOGIC ";"?;
	public GlobalCombinatorElements getGlobalCombinatorAccess() {
		return (pGlobalCombinator != null) ? pGlobalCombinator : (pGlobalCombinator = new GlobalCombinatorElements());
	}
	
	public ParserRule getGlobalCombinatorRule() {
		return getGlobalCombinatorAccess().getRule();
	}

	//RuleCombinator:
	//	("rule" "combinator:" name=ID) logic=LOGIC ("(" LABEL+=STRING ")")* ";"?;
	public RuleCombinatorElements getRuleCombinatorAccess() {
		return (pRuleCombinator != null) ? pRuleCombinator : (pRuleCombinator = new RuleCombinatorElements());
	}
	
	public ParserRule getRuleCombinatorRule() {
		return getRuleCombinatorAccess().getRule();
	}

	//HookCombinator:
	//	"hook" "combinator:" name=ID "(" ruleext=INT ")" logic=LOGIC? ("(" LABEL+=STRING ")")+ ";"?;
	public HookCombinatorElements getHookCombinatorAccess() {
		return (pHookCombinator != null) ? pHookCombinator : (pHookCombinator = new HookCombinatorElements());
	}
	
	public ParserRule getHookCombinatorRule() {
		return getHookCombinatorAccess().getRule();
	}

	//DefinitionList:
	//	singleDefinition+=SingleDefinition ("|" singleDefinition+=SingleDefinition)*;
	public DefinitionListElements getDefinitionListAccess() {
		return (pDefinitionList != null) ? pDefinitionList : (pDefinitionList = new DefinitionListElements());
	}
	
	public ParserRule getDefinitionListRule() {
		return getDefinitionListAccess().getRule();
	}

	//SingleDefinition:
	//	terms+=Term+;
	public SingleDefinitionElements getSingleDefinitionAccess() {
		return (pSingleDefinition != null) ? pSingleDefinition : (pSingleDefinition = new SingleDefinitionElements());
	}
	
	public ParserRule getSingleDefinitionRule() {
		return getSingleDefinitionAccess().getRule();
	}

	//Term:
	//	termAtom=Atom | termGroupedSequence=GroupedSequence | termOptionalSequence=OptionalSequence |
	//	termRepeatedSequence=RepeatedSequence;
	public TermElements getTermAccess() {
		return (pTerm != null) ? pTerm : (pTerm = new TermElements());
	}
	
	public ParserRule getTermRule() {
		return getTermAccess().getRule();
	}

	//Atom:
	//	atomStringRule=StringRule | atomRuleReference=RuleReference;
	public AtomElements getAtomAccess() {
		return (pAtom != null) ? pAtom : (pAtom = new AtomElements());
	}
	
	public ParserRule getAtomRule() {
		return getAtomAccess().getRule();
	}

	//RuleReference:
	//	ruleref=[Rule];
	public RuleReferenceElements getRuleReferenceAccess() {
		return (pRuleReference != null) ? pRuleReference : (pRuleReference = new RuleReferenceElements());
	}
	
	public ParserRule getRuleReferenceRule() {
		return getRuleReferenceAccess().getRule();
	}

	//StringRule:
	//	literal=STRING | colon=COLON;
	public StringRuleElements getStringRuleAccess() {
		return (pStringRule != null) ? pStringRule : (pStringRule = new StringRuleElements());
	}
	
	public ParserRule getStringRuleRule() {
		return getStringRuleAccess().getRule();
	}

	//GroupedSequence:
	//	"(" definitionList+=DefinitionList ")";
	public GroupedSequenceElements getGroupedSequenceAccess() {
		return (pGroupedSequence != null) ? pGroupedSequence : (pGroupedSequence = new GroupedSequenceElements());
	}
	
	public ParserRule getGroupedSequenceRule() {
		return getGroupedSequenceAccess().getRule();
	}

	//OptionalSequence:
	//	"[" definitionList+=DefinitionList "]";
	public OptionalSequenceElements getOptionalSequenceAccess() {
		return (pOptionalSequence != null) ? pOptionalSequence : (pOptionalSequence = new OptionalSequenceElements());
	}
	
	public ParserRule getOptionalSequenceRule() {
		return getOptionalSequenceAccess().getRule();
	}

	//RepeatedSequence:
	//	"{" definitions+=DefinitionList "}" morethanonce?="+"?;
	public RepeatedSequenceElements getRepeatedSequenceAccess() {
		return (pRepeatedSequence != null) ? pRepeatedSequence : (pRepeatedSequence = new RepeatedSequenceElements());
	}
	
	public ParserRule getRepeatedSequenceRule() {
		return getRepeatedSequenceAccess().getRule();
	}

	//// -----------------------------------------------------------------------------------------------
	//// Lexer Rules
	//// -----------------------------------------------------------------------------------------------
	//terminal ID:
	//	("a".."z" | "A".."Z" | "_") ("a".."z" | "A".."Z" | "0".."9" | "_")*;
	public TerminalRule getIDRule() {
		return (tID != null) ? tID : (tID = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "ID"));
	} 

	//terminal INT returns ecore::EInt:
	//	"0".."9"+;
	public TerminalRule getINTRule() {
		return (tINT != null) ? tINT : (tINT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "INT"));
	} 

	//terminal WS:
	//	(" " | "\t" | "\r"? "\n")+;
	public TerminalRule getWSRule() {
		return (tWS != null) ? tWS : (tWS = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "WS"));
	} 

	//terminal COLON:
	//	"\"" "\"" "\"";
	public TerminalRule getCOLONRule() {
		return (tCOLON != null) ? tCOLON : (tCOLON = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "COLON"));
	} 

	//terminal STRING:
	//	"\"" !"\""* "\"" | "\'" !"\'"* "\'";
	public TerminalRule getSTRINGRule() {
		return (tSTRING != null) ? tSTRING : (tSTRING = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "STRING"));
	} 

	//terminal SECTIONHEADER:
	//	("a".."z" | "A".."Z") ("." | "0".."9")+ (" " | "\t") !("\n" | "\r")* "\r"? "\n";
	public TerminalRule getSECTIONHEADERRule() {
		return (tSECTIONHEADER != null) ? tSECTIONHEADER : (tSECTIONHEADER = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "SECTIONHEADER"));
	} 

	//terminal SL_COMMENT:
	//	"//" !("\n" | "\r")* ("\r"? "\n")?;
	public TerminalRule getSL_COMMENTRule() {
		return (tSL_COMMENT != null) ? tSL_COMMENT : (tSL_COMMENT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "SL_COMMENT"));
	} 

	//terminal ML_COMMENT:
	//	"/ *"->"* /";
	public TerminalRule getML_COMMENTRule() {
		return (tML_COMMENT != null) ? tML_COMMENT : (tML_COMMENT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "ML_COMMENT"));
	} 

	////TODO: a more intuitive notation
	//terminal LOGIC:
	//	"/and" | "/or" | "/andr" | "/orr" | "/any" | "/together";
	public TerminalRule getLOGICRule() {
		return (tLOGIC != null) ? tLOGIC : (tLOGIC = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "LOGIC"));
	} 
}
