/*
 * generated by Xtext 2.12.0
 */
package com.irtsaintexupery.xtext.services;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.util.List;
import org.eclipse.xtext.Alternatives;
import org.eclipse.xtext.Assignment;
import org.eclipse.xtext.CrossReference;
import org.eclipse.xtext.EnumLiteralDeclaration;
import org.eclipse.xtext.EnumRule;
import org.eclipse.xtext.Grammar;
import org.eclipse.xtext.GrammarUtil;
import org.eclipse.xtext.Group;
import org.eclipse.xtext.Keyword;
import org.eclipse.xtext.ParserRule;
import org.eclipse.xtext.RuleCall;
import org.eclipse.xtext.TerminalRule;
import org.eclipse.xtext.common.services.TerminalsGrammarAccess;
import org.eclipse.xtext.service.AbstractElementFinder.AbstractEnumRuleElementFinder;
import org.eclipse.xtext.service.AbstractElementFinder.AbstractGrammarElementFinder;
import org.eclipse.xtext.service.GrammarProvider;

@Singleton
public class PseimGrammarAccess extends AbstractGrammarElementFinder {
	
	public class ModelElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.irtsaintexupery.xtext.Pseim.Model");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cModelKeyword_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 Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cLeftCurlyBracketKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cModelElementsAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cModelElementsGraphElementParserRuleCall_2_1_0 = (RuleCall)cModelElementsAssignment_2_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
		
		//Model:
		//	'model' name=EString ('{'
		//	modelElements+=GraphElement*
		//	'}')?;
		@Override public ParserRule getRule() { return rule; }
		
		//'model' name=EString ('{' modelElements+=GraphElement* '}')?
		public Group getGroup() { return cGroup; }
		
		//'model'
		public Keyword getModelKeyword_0() { return cModelKeyword_0; }
		
		//name=EString
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//EString
		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }
		
		//('{' modelElements+=GraphElement* '}')?
		public Group getGroup_2() { return cGroup_2; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_2_0() { return cLeftCurlyBracketKeyword_2_0; }
		
		//modelElements+=GraphElement*
		public Assignment getModelElementsAssignment_2_1() { return cModelElementsAssignment_2_1; }
		
		//GraphElement
		public RuleCall getModelElementsGraphElementParserRuleCall_2_1_0() { return cModelElementsGraphElementParserRuleCall_2_1_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_2_2() { return cRightCurlyBracketKeyword_2_2; }
	}
	public class ComponentElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.irtsaintexupery.xtext.Pseim.Component");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cComponentKeyword_0 = (Keyword)cGroup.eContents().get(0);
		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 cLeftParenthesisKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Assignment cContentAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
		private final RuleCall cContentPortParserRuleCall_3_0_0 = (RuleCall)cContentAssignment_3_0.eContents().get(0);
		private final Group cGroup_3_1 = (Group)cGroup_3.eContents().get(1);
		private final Keyword cCommaKeyword_3_1_0 = (Keyword)cGroup_3_1.eContents().get(0);
		private final Assignment cContentAssignment_3_1_1 = (Assignment)cGroup_3_1.eContents().get(1);
		private final RuleCall cContentPortParserRuleCall_3_1_1_0 = (RuleCall)cContentAssignment_3_1_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
		private final Keyword cLeftCurlyBracketKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
		private final Assignment cContentAssignment_5_1 = (Assignment)cGroup_5.eContents().get(1);
		private final RuleCall cContentGraphElementParserRuleCall_5_1_0 = (RuleCall)cContentAssignment_5_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_5_2 = (Keyword)cGroup_5.eContents().get(2);
		
		//Component:
		//	'component' name=ID '(' (content+=Port (',' content+=Port)*)? ')' ('{'
		//	content+=GraphElement*
		//	'}')?;
		@Override public ParserRule getRule() { return rule; }
		
		//'component' name=ID '(' (content+=Port (',' content+=Port)*)? ')' ('{' content+=GraphElement* '}')?
		public Group getGroup() { return cGroup; }
		
		//'component'
		public Keyword getComponentKeyword_0() { return cComponentKeyword_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_2() { return cLeftParenthesisKeyword_2; }
		
		//(content+=Port (',' content+=Port)*)?
		public Group getGroup_3() { return cGroup_3; }
		
		//content+=Port
		public Assignment getContentAssignment_3_0() { return cContentAssignment_3_0; }
		
		//Port
		public RuleCall getContentPortParserRuleCall_3_0_0() { return cContentPortParserRuleCall_3_0_0; }
		
		//(',' content+=Port)*
		public Group getGroup_3_1() { return cGroup_3_1; }
		
		//','
		public Keyword getCommaKeyword_3_1_0() { return cCommaKeyword_3_1_0; }
		
		//content+=Port
		public Assignment getContentAssignment_3_1_1() { return cContentAssignment_3_1_1; }
		
		//Port
		public RuleCall getContentPortParserRuleCall_3_1_1_0() { return cContentPortParserRuleCall_3_1_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_4() { return cRightParenthesisKeyword_4; }
		
		//('{' content+=GraphElement* '}')?
		public Group getGroup_5() { return cGroup_5; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_5_0() { return cLeftCurlyBracketKeyword_5_0; }
		
		//content+=GraphElement*
		public Assignment getContentAssignment_5_1() { return cContentAssignment_5_1; }
		
		//GraphElement
		public RuleCall getContentGraphElementParserRuleCall_5_1_0() { return cContentGraphElementParserRuleCall_5_1_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_5_2() { return cRightCurlyBracketKeyword_5_2; }
	}
	public class PortElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.irtsaintexupery.xtext.Pseim.Port");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cDirectionAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cDirectionPortDirectionEnumRuleCall_0_0 = (RuleCall)cDirectionAssignment_0.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		
		//Port:
		//	direction=PortDirection name=ID;
		@Override public ParserRule getRule() { return rule; }
		
		//direction=PortDirection name=ID
		public Group getGroup() { return cGroup; }
		
		//direction=PortDirection
		public Assignment getDirectionAssignment_0() { return cDirectionAssignment_0; }
		
		//PortDirection
		public RuleCall getDirectionPortDirectionEnumRuleCall_0_0() { return cDirectionPortDirectionEnumRuleCall_0_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
	}
	public class LinkElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.irtsaintexupery.xtext.Pseim.Link");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cSrcAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final CrossReference cSrcPortCrossReference_0_0 = (CrossReference)cSrcAssignment_0.eContents().get(0);
		private final RuleCall cSrcPortQualifiedIDParserRuleCall_0_0_1 = (RuleCall)cSrcPortCrossReference_0_0.eContents().get(1);
		private final Keyword cHyphenMinusGreaterThanSignKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cDstAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final CrossReference cDstPortCrossReference_2_0 = (CrossReference)cDstAssignment_2.eContents().get(0);
		private final RuleCall cDstPortQualifiedIDParserRuleCall_2_0_1 = (RuleCall)cDstPortCrossReference_2_0.eContents().get(1);
		
		//Link:
		//	src=[Port|QualifiedID] '->' dst=[Port|QualifiedID];
		@Override public ParserRule getRule() { return rule; }
		
		//src=[Port|QualifiedID] '->' dst=[Port|QualifiedID]
		public Group getGroup() { return cGroup; }
		
		//src=[Port|QualifiedID]
		public Assignment getSrcAssignment_0() { return cSrcAssignment_0; }
		
		//[Port|QualifiedID]
		public CrossReference getSrcPortCrossReference_0_0() { return cSrcPortCrossReference_0_0; }
		
		//QualifiedID
		public RuleCall getSrcPortQualifiedIDParserRuleCall_0_0_1() { return cSrcPortQualifiedIDParserRuleCall_0_0_1; }
		
		//'->'
		public Keyword getHyphenMinusGreaterThanSignKeyword_1() { return cHyphenMinusGreaterThanSignKeyword_1; }
		
		//dst=[Port|QualifiedID]
		public Assignment getDstAssignment_2() { return cDstAssignment_2; }
		
		//[Port|QualifiedID]
		public CrossReference getDstPortCrossReference_2_0() { return cDstPortCrossReference_2_0; }
		
		//QualifiedID
		public RuleCall getDstPortQualifiedIDParserRuleCall_2_0_1() { return cDstPortQualifiedIDParserRuleCall_2_0_1; }
	}
	public class PropertyElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.irtsaintexupery.xtext.Pseim.Property");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cIntegerPropertyParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cStringPropertyParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cBooleanPropertyParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cReferencePropertyParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		
		//Property:
		//	IntegerProperty | StringProperty | BooleanProperty | ReferenceProperty;
		@Override public ParserRule getRule() { return rule; }
		
		//IntegerProperty | StringProperty | BooleanProperty | ReferenceProperty
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//IntegerProperty
		public RuleCall getIntegerPropertyParserRuleCall_0() { return cIntegerPropertyParserRuleCall_0; }
		
		//StringProperty
		public RuleCall getStringPropertyParserRuleCall_1() { return cStringPropertyParserRuleCall_1; }
		
		//BooleanProperty
		public RuleCall getBooleanPropertyParserRuleCall_2() { return cBooleanPropertyParserRuleCall_2; }
		
		//ReferenceProperty
		public RuleCall getReferencePropertyParserRuleCall_3() { return cReferencePropertyParserRuleCall_3; }
	}
	public class GraphElementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.irtsaintexupery.xtext.Pseim.GraphElement");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cComponentParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cLinkParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//GraphElement:
		//	Component | Link;
		@Override public ParserRule getRule() { return rule; }
		
		//Component | Link
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//Component
		public RuleCall getComponentParserRuleCall_0() { return cComponentParserRuleCall_0; }
		
		//Link
		public RuleCall getLinkParserRuleCall_1() { return cLinkParserRuleCall_1; }
	}
	public class PropertyHolderElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.irtsaintexupery.xtext.Pseim.PropertyHolder");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cComponentParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cPortParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cLinkParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cModelParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		
		//PropertyHolder:
		//	Component | Port | Link | Model;
		@Override public ParserRule getRule() { return rule; }
		
		//Component | Port | Link | Model
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//Component
		public RuleCall getComponentParserRuleCall_0() { return cComponentParserRuleCall_0; }
		
		//Port
		public RuleCall getPortParserRuleCall_1() { return cPortParserRuleCall_1; }
		
		//Link
		public RuleCall getLinkParserRuleCall_2() { return cLinkParserRuleCall_2; }
		
		//Model
		public RuleCall getModelParserRuleCall_3() { return cModelParserRuleCall_3; }
	}
	public class ElementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.irtsaintexupery.xtext.Pseim.Element");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cComponentParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cPortParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cLinkParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		
		//Element:
		//	Component | Port | Link;
		@Override public ParserRule getRule() { return rule; }
		
		//Component | Port | Link
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//Component
		public RuleCall getComponentParserRuleCall_0() { return cComponentParserRuleCall_0; }
		
		//Port
		public RuleCall getPortParserRuleCall_1() { return cPortParserRuleCall_1; }
		
		//Link
		public RuleCall getLinkParserRuleCall_2() { return cLinkParserRuleCall_2; }
	}
	public class QualifiedIDElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.irtsaintexupery.xtext.Pseim.QualifiedID");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cIDTerminalRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cFullStopKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final RuleCall cIDTerminalRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
		
		//QualifiedID:
		//	ID ('.' ID)*;
		@Override public ParserRule getRule() { return rule; }
		
		//ID ('.' ID)*
		public Group getGroup() { return cGroup; }
		
		//ID
		public RuleCall getIDTerminalRuleCall_0() { return cIDTerminalRuleCall_0; }
		
		//('.' ID)*
		public Group getGroup_1() { return cGroup_1; }
		
		//'.'
		public Keyword getFullStopKeyword_1_0() { return cFullStopKeyword_1_0; }
		
		//ID
		public RuleCall getIDTerminalRuleCall_1_1() { return cIDTerminalRuleCall_1_1; }
	}
	public class EStringElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.irtsaintexupery.xtext.Pseim.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:
		//	STRING | ID;
		@Override 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 IntegerPropertyElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.irtsaintexupery.xtext.Pseim.IntegerProperty");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cIntegerPropertyKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Keyword cKeyKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cKeyAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cKeyEStringParserRuleCall_3_0 = (RuleCall)cKeyAssignment_3.eContents().get(0);
		private final Keyword cValueKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Assignment cValueAssignment_5 = (Assignment)cGroup.eContents().get(5);
		private final RuleCall cValueEIntParserRuleCall_5_0 = (RuleCall)cValueAssignment_5.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_6 = (Keyword)cGroup.eContents().get(6);
		
		//IntegerProperty:
		//	'IntegerProperty'
		//	'{'
		//	'key' key=EString
		//	'value' value=EInt
		//	'}';
		@Override public ParserRule getRule() { return rule; }
		
		//'IntegerProperty' '{' 'key' key=EString 'value' value=EInt '}'
		public Group getGroup() { return cGroup; }
		
		//'IntegerProperty'
		public Keyword getIntegerPropertyKeyword_0() { return cIntegerPropertyKeyword_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_1() { return cLeftCurlyBracketKeyword_1; }
		
		//'key'
		public Keyword getKeyKeyword_2() { return cKeyKeyword_2; }
		
		//key=EString
		public Assignment getKeyAssignment_3() { return cKeyAssignment_3; }
		
		//EString
		public RuleCall getKeyEStringParserRuleCall_3_0() { return cKeyEStringParserRuleCall_3_0; }
		
		//'value'
		public Keyword getValueKeyword_4() { return cValueKeyword_4; }
		
		//value=EInt
		public Assignment getValueAssignment_5() { return cValueAssignment_5; }
		
		//EInt
		public RuleCall getValueEIntParserRuleCall_5_0() { return cValueEIntParserRuleCall_5_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_6() { return cRightCurlyBracketKeyword_6; }
	}
	public class StringPropertyElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.irtsaintexupery.xtext.Pseim.StringProperty");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cStringPropertyKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Keyword cKeyKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cKeyAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cKeyEStringParserRuleCall_3_0 = (RuleCall)cKeyAssignment_3.eContents().get(0);
		private final Keyword cValueKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Assignment cValueAssignment_5 = (Assignment)cGroup.eContents().get(5);
		private final RuleCall cValueEStringParserRuleCall_5_0 = (RuleCall)cValueAssignment_5.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_6 = (Keyword)cGroup.eContents().get(6);
		
		//StringProperty:
		//	'StringProperty'
		//	'{'
		//	'key' key=EString
		//	'value' value=EString
		//	'}';
		@Override public ParserRule getRule() { return rule; }
		
		//'StringProperty' '{' 'key' key=EString 'value' value=EString '}'
		public Group getGroup() { return cGroup; }
		
		//'StringProperty'
		public Keyword getStringPropertyKeyword_0() { return cStringPropertyKeyword_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_1() { return cLeftCurlyBracketKeyword_1; }
		
		//'key'
		public Keyword getKeyKeyword_2() { return cKeyKeyword_2; }
		
		//key=EString
		public Assignment getKeyAssignment_3() { return cKeyAssignment_3; }
		
		//EString
		public RuleCall getKeyEStringParserRuleCall_3_0() { return cKeyEStringParserRuleCall_3_0; }
		
		//'value'
		public Keyword getValueKeyword_4() { return cValueKeyword_4; }
		
		//value=EString
		public Assignment getValueAssignment_5() { return cValueAssignment_5; }
		
		//EString
		public RuleCall getValueEStringParserRuleCall_5_0() { return cValueEStringParserRuleCall_5_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_6() { return cRightCurlyBracketKeyword_6; }
	}
	public class BooleanPropertyElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.irtsaintexupery.xtext.Pseim.BooleanProperty");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cValueAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final Keyword cValueValueKeyword_0_0 = (Keyword)cValueAssignment_0.eContents().get(0);
		private final Keyword cBooleanPropertyKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Keyword cKeyKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cKeyAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cKeyEStringParserRuleCall_4_0 = (RuleCall)cKeyAssignment_4.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_5 = (Keyword)cGroup.eContents().get(5);
		
		//BooleanProperty:
		//	value?='value'
		//	'BooleanProperty'
		//	'{'
		//	'key' key=EString
		//	'}';
		@Override public ParserRule getRule() { return rule; }
		
		//value?='value' 'BooleanProperty' '{' 'key' key=EString '}'
		public Group getGroup() { return cGroup; }
		
		//value?='value'
		public Assignment getValueAssignment_0() { return cValueAssignment_0; }
		
		//'value'
		public Keyword getValueValueKeyword_0_0() { return cValueValueKeyword_0_0; }
		
		//'BooleanProperty'
		public Keyword getBooleanPropertyKeyword_1() { return cBooleanPropertyKeyword_1; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
		
		//'key'
		public Keyword getKeyKeyword_3() { return cKeyKeyword_3; }
		
		//key=EString
		public Assignment getKeyAssignment_4() { return cKeyAssignment_4; }
		
		//EString
		public RuleCall getKeyEStringParserRuleCall_4_0() { return cKeyEStringParserRuleCall_4_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_5() { return cRightCurlyBracketKeyword_5; }
	}
	public class ReferencePropertyElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.irtsaintexupery.xtext.Pseim.ReferenceProperty");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cReferencePropertyKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Keyword cKeyKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cKeyAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cKeyEStringParserRuleCall_3_0 = (RuleCall)cKeyAssignment_3.eContents().get(0);
		private final Keyword cRefKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Assignment cRefAssignment_5 = (Assignment)cGroup.eContents().get(5);
		private final CrossReference cRefPropertyHolderCrossReference_5_0 = (CrossReference)cRefAssignment_5.eContents().get(0);
		private final RuleCall cRefPropertyHolderEStringParserRuleCall_5_0_1 = (RuleCall)cRefPropertyHolderCrossReference_5_0.eContents().get(1);
		private final Keyword cRightCurlyBracketKeyword_6 = (Keyword)cGroup.eContents().get(6);
		
		//ReferenceProperty:
		//	'ReferenceProperty'
		//	'{'
		//	'key' key=EString
		//	'ref' ref=[PropertyHolder|EString]
		//	'}';
		@Override public ParserRule getRule() { return rule; }
		
		//'ReferenceProperty' '{' 'key' key=EString 'ref' ref=[PropertyHolder|EString] '}'
		public Group getGroup() { return cGroup; }
		
		//'ReferenceProperty'
		public Keyword getReferencePropertyKeyword_0() { return cReferencePropertyKeyword_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_1() { return cLeftCurlyBracketKeyword_1; }
		
		//'key'
		public Keyword getKeyKeyword_2() { return cKeyKeyword_2; }
		
		//key=EString
		public Assignment getKeyAssignment_3() { return cKeyAssignment_3; }
		
		//EString
		public RuleCall getKeyEStringParserRuleCall_3_0() { return cKeyEStringParserRuleCall_3_0; }
		
		//'ref'
		public Keyword getRefKeyword_4() { return cRefKeyword_4; }
		
		//ref=[PropertyHolder|EString]
		public Assignment getRefAssignment_5() { return cRefAssignment_5; }
		
		//[PropertyHolder|EString]
		public CrossReference getRefPropertyHolderCrossReference_5_0() { return cRefPropertyHolderCrossReference_5_0; }
		
		//EString
		public RuleCall getRefPropertyHolderEStringParserRuleCall_5_0_1() { return cRefPropertyHolderEStringParserRuleCall_5_0_1; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_6() { return cRightCurlyBracketKeyword_6; }
	}
	public class EIntElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.irtsaintexupery.xtext.Pseim.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 ecore::EInt:
		//	'-'? INT;
		@Override 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; }
	}
	public class EBooleanElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "com.irtsaintexupery.xtext.Pseim.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 ecore::EBoolean:
		//	'true' | 'false';
		@Override 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 PortDirectionElements extends AbstractEnumRuleElementFinder {
		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "com.irtsaintexupery.xtext.Pseim.PortDirection");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final EnumLiteralDeclaration cUNSPECIFIEDEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
		private final Keyword cUNSPECIFIEDUnspecKeyword_0_0 = (Keyword)cUNSPECIFIEDEnumLiteralDeclaration_0.eContents().get(0);
		private final EnumLiteralDeclaration cINEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
		private final Keyword cINInKeyword_1_0 = (Keyword)cINEnumLiteralDeclaration_1.eContents().get(0);
		private final EnumLiteralDeclaration cOUTEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
		private final Keyword cOUTOutKeyword_2_0 = (Keyword)cOUTEnumLiteralDeclaration_2.eContents().get(0);
		private final EnumLiteralDeclaration cINOUTEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
		private final Keyword cINOUTInoutKeyword_3_0 = (Keyword)cINOUTEnumLiteralDeclaration_3.eContents().get(0);
		
		//enum PortDirection:
		//	UNSPECIFIED='unspec' | IN='in' | OUT='out' | INOUT='inout';
		public EnumRule getRule() { return rule; }
		
		//UNSPECIFIED='unspec' | IN='in' | OUT='out' | INOUT='inout'
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//UNSPECIFIED='unspec'
		public EnumLiteralDeclaration getUNSPECIFIEDEnumLiteralDeclaration_0() { return cUNSPECIFIEDEnumLiteralDeclaration_0; }
		
		//'unspec'
		public Keyword getUNSPECIFIEDUnspecKeyword_0_0() { return cUNSPECIFIEDUnspecKeyword_0_0; }
		
		//IN='in'
		public EnumLiteralDeclaration getINEnumLiteralDeclaration_1() { return cINEnumLiteralDeclaration_1; }
		
		//'in'
		public Keyword getINInKeyword_1_0() { return cINInKeyword_1_0; }
		
		//OUT='out'
		public EnumLiteralDeclaration getOUTEnumLiteralDeclaration_2() { return cOUTEnumLiteralDeclaration_2; }
		
		//'out'
		public Keyword getOUTOutKeyword_2_0() { return cOUTOutKeyword_2_0; }
		
		//INOUT='inout'
		public EnumLiteralDeclaration getINOUTEnumLiteralDeclaration_3() { return cINOUTEnumLiteralDeclaration_3; }
		
		//'inout'
		public Keyword getINOUTInoutKeyword_3_0() { return cINOUTInoutKeyword_3_0; }
	}
	
	private final ModelElements pModel;
	private final ComponentElements pComponent;
	private final PortElements pPort;
	private final LinkElements pLink;
	private final PortDirectionElements ePortDirection;
	private final PropertyElements pProperty;
	private final GraphElementElements pGraphElement;
	private final PropertyHolderElements pPropertyHolder;
	private final ElementElements pElement;
	private final QualifiedIDElements pQualifiedID;
	private final EStringElements pEString;
	private final IntegerPropertyElements pIntegerProperty;
	private final StringPropertyElements pStringProperty;
	private final BooleanPropertyElements pBooleanProperty;
	private final ReferencePropertyElements pReferenceProperty;
	private final EIntElements pEInt;
	private final EBooleanElements pEBoolean;
	
	private final Grammar grammar;
	
	private final TerminalsGrammarAccess gaTerminals;

	@Inject
	public PseimGrammarAccess(GrammarProvider grammarProvider,
			TerminalsGrammarAccess gaTerminals) {
		this.grammar = internalFindGrammar(grammarProvider);
		this.gaTerminals = gaTerminals;
		this.pModel = new ModelElements();
		this.pComponent = new ComponentElements();
		this.pPort = new PortElements();
		this.pLink = new LinkElements();
		this.ePortDirection = new PortDirectionElements();
		this.pProperty = new PropertyElements();
		this.pGraphElement = new GraphElementElements();
		this.pPropertyHolder = new PropertyHolderElements();
		this.pElement = new ElementElements();
		this.pQualifiedID = new QualifiedIDElements();
		this.pEString = new EStringElements();
		this.pIntegerProperty = new IntegerPropertyElements();
		this.pStringProperty = new StringPropertyElements();
		this.pBooleanProperty = new BooleanPropertyElements();
		this.pReferenceProperty = new ReferencePropertyElements();
		this.pEInt = new EIntElements();
		this.pEBoolean = new EBooleanElements();
	}
	
	protected Grammar internalFindGrammar(GrammarProvider grammarProvider) {
		Grammar grammar = grammarProvider.getGrammar(this);
		while (grammar != null) {
			if ("com.irtsaintexupery.xtext.Pseim".equals(grammar.getName())) {
				return grammar;
			}
			List<Grammar> grammars = grammar.getUsedGrammars();
			if (!grammars.isEmpty()) {
				grammar = grammars.iterator().next();
			} else {
				return null;
			}
		}
		return grammar;
	}
	
	@Override
	public Grammar getGrammar() {
		return grammar;
	}
	
	
	public TerminalsGrammarAccess getTerminalsGrammarAccess() {
		return gaTerminals;
	}

	
	//Model:
	//	'model' name=EString ('{'
	//	modelElements+=GraphElement*
	//	'}')?;
	public ModelElements getModelAccess() {
		return pModel;
	}
	
	public ParserRule getModelRule() {
		return getModelAccess().getRule();
	}
	
	//Component:
	//	'component' name=ID '(' (content+=Port (',' content+=Port)*)? ')' ('{'
	//	content+=GraphElement*
	//	'}')?;
	public ComponentElements getComponentAccess() {
		return pComponent;
	}
	
	public ParserRule getComponentRule() {
		return getComponentAccess().getRule();
	}
	
	//Port:
	//	direction=PortDirection name=ID;
	public PortElements getPortAccess() {
		return pPort;
	}
	
	public ParserRule getPortRule() {
		return getPortAccess().getRule();
	}
	
	//Link:
	//	src=[Port|QualifiedID] '->' dst=[Port|QualifiedID];
	public LinkElements getLinkAccess() {
		return pLink;
	}
	
	public ParserRule getLinkRule() {
		return getLinkAccess().getRule();
	}
	
	//enum PortDirection:
	//	UNSPECIFIED='unspec' | IN='in' | OUT='out' | INOUT='inout';
	public PortDirectionElements getPortDirectionAccess() {
		return ePortDirection;
	}
	
	public EnumRule getPortDirectionRule() {
		return getPortDirectionAccess().getRule();
	}
	
	//Property:
	//	IntegerProperty | StringProperty | BooleanProperty | ReferenceProperty;
	public PropertyElements getPropertyAccess() {
		return pProperty;
	}
	
	public ParserRule getPropertyRule() {
		return getPropertyAccess().getRule();
	}
	
	//GraphElement:
	//	Component | Link;
	public GraphElementElements getGraphElementAccess() {
		return pGraphElement;
	}
	
	public ParserRule getGraphElementRule() {
		return getGraphElementAccess().getRule();
	}
	
	//PropertyHolder:
	//	Component | Port | Link | Model;
	public PropertyHolderElements getPropertyHolderAccess() {
		return pPropertyHolder;
	}
	
	public ParserRule getPropertyHolderRule() {
		return getPropertyHolderAccess().getRule();
	}
	
	//Element:
	//	Component | Port | Link;
	public ElementElements getElementAccess() {
		return pElement;
	}
	
	public ParserRule getElementRule() {
		return getElementAccess().getRule();
	}
	
	//QualifiedID:
	//	ID ('.' ID)*;
	public QualifiedIDElements getQualifiedIDAccess() {
		return pQualifiedID;
	}
	
	public ParserRule getQualifiedIDRule() {
		return getQualifiedIDAccess().getRule();
	}
	
	//EString:
	//	STRING | ID;
	public EStringElements getEStringAccess() {
		return pEString;
	}
	
	public ParserRule getEStringRule() {
		return getEStringAccess().getRule();
	}
	
	//IntegerProperty:
	//	'IntegerProperty'
	//	'{'
	//	'key' key=EString
	//	'value' value=EInt
	//	'}';
	public IntegerPropertyElements getIntegerPropertyAccess() {
		return pIntegerProperty;
	}
	
	public ParserRule getIntegerPropertyRule() {
		return getIntegerPropertyAccess().getRule();
	}
	
	//StringProperty:
	//	'StringProperty'
	//	'{'
	//	'key' key=EString
	//	'value' value=EString
	//	'}';
	public StringPropertyElements getStringPropertyAccess() {
		return pStringProperty;
	}
	
	public ParserRule getStringPropertyRule() {
		return getStringPropertyAccess().getRule();
	}
	
	//BooleanProperty:
	//	value?='value'
	//	'BooleanProperty'
	//	'{'
	//	'key' key=EString
	//	'}';
	public BooleanPropertyElements getBooleanPropertyAccess() {
		return pBooleanProperty;
	}
	
	public ParserRule getBooleanPropertyRule() {
		return getBooleanPropertyAccess().getRule();
	}
	
	//ReferenceProperty:
	//	'ReferenceProperty'
	//	'{'
	//	'key' key=EString
	//	'ref' ref=[PropertyHolder|EString]
	//	'}';
	public ReferencePropertyElements getReferencePropertyAccess() {
		return pReferenceProperty;
	}
	
	public ParserRule getReferencePropertyRule() {
		return getReferencePropertyAccess().getRule();
	}
	
	//EInt ecore::EInt:
	//	'-'? INT;
	public EIntElements getEIntAccess() {
		return pEInt;
	}
	
	public ParserRule getEIntRule() {
		return getEIntAccess().getRule();
	}
	
	//EBoolean ecore::EBoolean:
	//	'true' | 'false';
	public EBooleanElements getEBooleanAccess() {
		return pEBoolean;
	}
	
	public ParserRule getEBooleanRule() {
		return getEBooleanAccess().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:
	//	'"' ('\\' . | !('\\' | '"'))* '"' | "'" ('\\' . | !('\\' | "'"))* "'";
	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();
	}
}
