/*
 * generated by Xtext version 2.21.0
 */
package ca.queensu.cs.mase.services;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.util.List;
import org.eclipse.xtext.Action;
import org.eclipse.xtext.Alternatives;
import org.eclipse.xtext.Assignment;
import org.eclipse.xtext.CrossReference;
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.AbstractGrammarElementFinder;
import org.eclipse.xtext.service.GrammarProvider;

@Singleton
public class UrmlGrammarAccess extends AbstractGrammarElementFinder {
	
	public class ModelElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.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 cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Alternatives cAlternatives_3 = (Alternatives)cGroup.eContents().get(3);
		private final Assignment cCapsulesAssignment_3_0 = (Assignment)cAlternatives_3.eContents().get(0);
		private final RuleCall cCapsulesCapsuleParserRuleCall_3_0_0 = (RuleCall)cCapsulesAssignment_3_0.eContents().get(0);
		private final Assignment cProtocolsAssignment_3_1 = (Assignment)cAlternatives_3.eContents().get(1);
		private final RuleCall cProtocolsProtocolParserRuleCall_3_1_0 = (RuleCall)cProtocolsAssignment_3_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		//Model:
		//	'model' name=ID "{" (capsules+=Capsule
		//	| protocols+=Protocol)* '}';
		@Override public ParserRule getRule() { return rule; }
		
		//'model' name=ID "{" (capsules+=Capsule | protocols+=Protocol)* '}'
		public Group getGroup() { return cGroup; }
		
		//'model'
		public Keyword getModelKeyword_0() { return cModelKeyword_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
		
		//"{"
		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
		
		//(capsules+=Capsule | protocols+=Protocol)*
		public Alternatives getAlternatives_3() { return cAlternatives_3; }
		
		//capsules+=Capsule
		public Assignment getCapsulesAssignment_3_0() { return cCapsulesAssignment_3_0; }
		
		//Capsule
		public RuleCall getCapsulesCapsuleParserRuleCall_3_0_0() { return cCapsulesCapsuleParserRuleCall_3_0_0; }
		
		//protocols+=Protocol
		public Assignment getProtocolsAssignment_3_1() { return cProtocolsAssignment_3_1; }
		
		//Protocol
		public RuleCall getProtocolsProtocolParserRuleCall_3_1_0() { return cProtocolsProtocolParserRuleCall_3_1_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_4() { return cRightCurlyBracketKeyword_4; }
	}
	public class LocalVarElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.LocalVar");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
		private final Assignment cIsBoolAssignment_0_0 = (Assignment)cAlternatives_0.eContents().get(0);
		private final Keyword cIsBoolBoolKeyword_0_0_0 = (Keyword)cIsBoolAssignment_0_0.eContents().get(0);
		private final Assignment cIsIntAssignment_0_1 = (Assignment)cAlternatives_0.eContents().get(1);
		private final Keyword cIsIntIntKeyword_0_1_0 = (Keyword)cIsIntAssignment_0_1.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);
		
		///******************************************************************
		// * Data and Variables
		// ******************************************************************/ LocalVar:
		//	(isBool?='bool' | isInt?='int') name=ID;
		@Override public ParserRule getRule() { return rule; }
		
		//(isBool?='bool' | isInt?='int') name=ID
		public Group getGroup() { return cGroup; }
		
		//(isBool?='bool' | isInt?='int')
		public Alternatives getAlternatives_0() { return cAlternatives_0; }
		
		//isBool?='bool'
		public Assignment getIsBoolAssignment_0_0() { return cIsBoolAssignment_0_0; }
		
		//'bool'
		public Keyword getIsBoolBoolKeyword_0_0_0() { return cIsBoolBoolKeyword_0_0_0; }
		
		//isInt?='int'
		public Assignment getIsIntAssignment_0_1() { return cIsIntAssignment_0_1; }
		
		//'int'
		public Keyword getIsIntIntKeyword_0_1_0() { return cIsIntIntKeyword_0_1_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
	}
	public class AttributeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Attribute");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cAttributeKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
		private final Assignment cIsBoolAssignment_1_0 = (Assignment)cAlternatives_1.eContents().get(0);
		private final Keyword cIsBoolBoolKeyword_1_0_0 = (Keyword)cIsBoolAssignment_1_0.eContents().get(0);
		private final Assignment cIsIntAssignment_1_1 = (Assignment)cAlternatives_1.eContents().get(1);
		private final Keyword cIsIntIntKeyword_1_1_0 = (Keyword)cIsIntAssignment_1_1.eContents().get(0);
		private final Assignment cNameAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cNameIDTerminalRuleCall_2_0 = (RuleCall)cNameAssignment_2.eContents().get(0);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Keyword cColonEqualsSignKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final Assignment cDefaultValueAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
		private final RuleCall cDefaultValueExpressionParserRuleCall_3_1_0 = (RuleCall)cDefaultValueAssignment_3_1.eContents().get(0);
		
		//Attribute:
		//	'attribute' (isBool?='bool' | isInt?='int') name=ID (':=' defaultValue=Expression)?;
		@Override public ParserRule getRule() { return rule; }
		
		//'attribute' (isBool?='bool' | isInt?='int') name=ID (':=' defaultValue=Expression)?
		public Group getGroup() { return cGroup; }
		
		//'attribute'
		public Keyword getAttributeKeyword_0() { return cAttributeKeyword_0; }
		
		//(isBool?='bool' | isInt?='int')
		public Alternatives getAlternatives_1() { return cAlternatives_1; }
		
		//isBool?='bool'
		public Assignment getIsBoolAssignment_1_0() { return cIsBoolAssignment_1_0; }
		
		//'bool'
		public Keyword getIsBoolBoolKeyword_1_0_0() { return cIsBoolBoolKeyword_1_0_0; }
		
		//isInt?='int'
		public Assignment getIsIntAssignment_1_1() { return cIsIntAssignment_1_1; }
		
		//'int'
		public Keyword getIsIntIntKeyword_1_1_0() { return cIsIntIntKeyword_1_1_0; }
		
		//name=ID
		public Assignment getNameAssignment_2() { return cNameAssignment_2; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_2_0() { return cNameIDTerminalRuleCall_2_0; }
		
		//(':=' defaultValue=Expression)?
		public Group getGroup_3() { return cGroup_3; }
		
		//':='
		public Keyword getColonEqualsSignKeyword_3_0() { return cColonEqualsSignKeyword_3_0; }
		
		//defaultValue=Expression
		public Assignment getDefaultValueAssignment_3_1() { return cDefaultValueAssignment_3_1; }
		
		//Expression
		public RuleCall getDefaultValueExpressionParserRuleCall_3_1_0() { return cDefaultValueExpressionParserRuleCall_3_1_0; }
	}
	public class ProtocolElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Protocol");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cProtocolKeyword_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 cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Alternatives cAlternatives_3 = (Alternatives)cGroup.eContents().get(3);
		private final Group cGroup_3_0 = (Group)cAlternatives_3.eContents().get(0);
		private final Keyword cIncomingKeyword_3_0_0 = (Keyword)cGroup_3_0.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_3_0_1 = (Keyword)cGroup_3_0.eContents().get(1);
		private final Assignment cIncomingMessagesAssignment_3_0_2 = (Assignment)cGroup_3_0.eContents().get(2);
		private final RuleCall cIncomingMessagesSignalParserRuleCall_3_0_2_0 = (RuleCall)cIncomingMessagesAssignment_3_0_2.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_3_0_3 = (Keyword)cGroup_3_0.eContents().get(3);
		private final Group cGroup_3_1 = (Group)cAlternatives_3.eContents().get(1);
		private final Keyword cOutgoingKeyword_3_1_0 = (Keyword)cGroup_3_1.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_3_1_1 = (Keyword)cGroup_3_1.eContents().get(1);
		private final Assignment cOutgoingMessagesAssignment_3_1_2 = (Assignment)cGroup_3_1.eContents().get(2);
		private final RuleCall cOutgoingMessagesSignalParserRuleCall_3_1_2_0 = (RuleCall)cOutgoingMessagesAssignment_3_1_2.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_3_1_3 = (Keyword)cGroup_3_1.eContents().get(3);
		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		///****************************************************************
		// * Protocol
		// ****************************************************************/ Protocol:
		//	'protocol' name=ID '{' ('incoming' '{' incomingMessages+=Signal* '}' | 'outgoing' '{' outgoingMessages+=Signal* '}')*
		//	'}';
		@Override public ParserRule getRule() { return rule; }
		
		//'protocol' name=ID '{' ('incoming' '{' incomingMessages+=Signal* '}' | 'outgoing' '{' outgoingMessages+=Signal* '}')*
		//'}'
		public Group getGroup() { return cGroup; }
		
		//'protocol'
		public Keyword getProtocolKeyword_0() { return cProtocolKeyword_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
		
		//('incoming' '{' incomingMessages+=Signal* '}' | 'outgoing' '{' outgoingMessages+=Signal* '}')*
		public Alternatives getAlternatives_3() { return cAlternatives_3; }
		
		//'incoming' '{' incomingMessages+=Signal* '}'
		public Group getGroup_3_0() { return cGroup_3_0; }
		
		//'incoming'
		public Keyword getIncomingKeyword_3_0_0() { return cIncomingKeyword_3_0_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_3_0_1() { return cLeftCurlyBracketKeyword_3_0_1; }
		
		//incomingMessages+=Signal*
		public Assignment getIncomingMessagesAssignment_3_0_2() { return cIncomingMessagesAssignment_3_0_2; }
		
		//Signal
		public RuleCall getIncomingMessagesSignalParserRuleCall_3_0_2_0() { return cIncomingMessagesSignalParserRuleCall_3_0_2_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_3_0_3() { return cRightCurlyBracketKeyword_3_0_3; }
		
		//'outgoing' '{' outgoingMessages+=Signal* '}'
		public Group getGroup_3_1() { return cGroup_3_1; }
		
		//'outgoing'
		public Keyword getOutgoingKeyword_3_1_0() { return cOutgoingKeyword_3_1_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_3_1_1() { return cLeftCurlyBracketKeyword_3_1_1; }
		
		//outgoingMessages+=Signal*
		public Assignment getOutgoingMessagesAssignment_3_1_2() { return cOutgoingMessagesAssignment_3_1_2; }
		
		//Signal
		public RuleCall getOutgoingMessagesSignalParserRuleCall_3_1_2_0() { return cOutgoingMessagesSignalParserRuleCall_3_1_2_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_3_1_3() { return cRightCurlyBracketKeyword_3_1_3; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_4() { return cRightCurlyBracketKeyword_4; }
	}
	public class SignalElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Signal");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cNameIDTerminalRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Assignment cLocalVarsAssignment_2_0 = (Assignment)cGroup_2.eContents().get(0);
		private final RuleCall cLocalVarsLocalVarParserRuleCall_2_0_0 = (RuleCall)cLocalVarsAssignment_2_0.eContents().get(0);
		private final Group cGroup_2_1 = (Group)cGroup_2.eContents().get(1);
		private final Keyword cCommaKeyword_2_1_0 = (Keyword)cGroup_2_1.eContents().get(0);
		private final Assignment cLocalVarsAssignment_2_1_1 = (Assignment)cGroup_2_1.eContents().get(1);
		private final RuleCall cLocalVarsLocalVarParserRuleCall_2_1_1_0 = (RuleCall)cLocalVarsAssignment_2_1_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_3 = (Keyword)cGroup.eContents().get(3);
		
		//Signal:
		//	name=ID
		//	'(' (LocalVars+=LocalVar (',' LocalVars+=LocalVar)*)? ')';
		@Override public ParserRule getRule() { return rule; }
		
		//name=ID '(' (LocalVars+=LocalVar (',' LocalVars+=LocalVar)*)? ')'
		public Group getGroup() { return cGroup; }
		
		//name=ID
		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_0_0() { return cNameIDTerminalRuleCall_0_0; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
		
		//(LocalVars+=LocalVar (',' LocalVars+=LocalVar)*)?
		public Group getGroup_2() { return cGroup_2; }
		
		//LocalVars+=LocalVar
		public Assignment getLocalVarsAssignment_2_0() { return cLocalVarsAssignment_2_0; }
		
		//LocalVar
		public RuleCall getLocalVarsLocalVarParserRuleCall_2_0_0() { return cLocalVarsLocalVarParserRuleCall_2_0_0; }
		
		//(',' LocalVars+=LocalVar)*
		public Group getGroup_2_1() { return cGroup_2_1; }
		
		//','
		public Keyword getCommaKeyword_2_1_0() { return cCommaKeyword_2_1_0; }
		
		//LocalVars+=LocalVar
		public Assignment getLocalVarsAssignment_2_1_1() { return cLocalVarsAssignment_2_1_1; }
		
		//LocalVar
		public RuleCall getLocalVarsLocalVarParserRuleCall_2_1_1_0() { return cLocalVarsLocalVarParserRuleCall_2_1_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_3() { return cRightParenthesisKeyword_3; }
	}
	public class CapsuleElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Capsule");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cRootAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final Keyword cRootRootKeyword_0_0 = (Keyword)cRootAssignment_0.eContents().get(0);
		private final Keyword cCapsuleKeyword_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 cLeftCurlyBracketKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Alternatives cAlternatives_4 = (Alternatives)cGroup.eContents().get(4);
		private final Group cGroup_4_0 = (Group)cAlternatives_4.eContents().get(0);
		private final Keyword cExternalKeyword_4_0_0 = (Keyword)cGroup_4_0.eContents().get(0);
		private final Assignment cInterfacePortsAssignment_4_0_1 = (Assignment)cGroup_4_0.eContents().get(1);
		private final RuleCall cInterfacePortsPortParserRuleCall_4_0_1_0 = (RuleCall)cInterfacePortsAssignment_4_0_1.eContents().get(0);
		private final Assignment cInternalPortsAssignment_4_1 = (Assignment)cAlternatives_4.eContents().get(1);
		private final RuleCall cInternalPortsPortParserRuleCall_4_1_0 = (RuleCall)cInternalPortsAssignment_4_1.eContents().get(0);
		private final Assignment cTimerPortsAssignment_4_2 = (Assignment)cAlternatives_4.eContents().get(2);
		private final RuleCall cTimerPortsTimerPortParserRuleCall_4_2_0 = (RuleCall)cTimerPortsAssignment_4_2.eContents().get(0);
		private final Assignment cLogPortsAssignment_4_3 = (Assignment)cAlternatives_4.eContents().get(3);
		private final RuleCall cLogPortsLogPortParserRuleCall_4_3_0 = (RuleCall)cLogPortsAssignment_4_3.eContents().get(0);
		private final Assignment cAttributesAssignment_4_4 = (Assignment)cAlternatives_4.eContents().get(4);
		private final RuleCall cAttributesAttributeParserRuleCall_4_4_0 = (RuleCall)cAttributesAssignment_4_4.eContents().get(0);
		private final Assignment cCapsuleInstsAssignment_4_5 = (Assignment)cAlternatives_4.eContents().get(5);
		private final RuleCall cCapsuleInstsCapsuleInstParserRuleCall_4_5_0 = (RuleCall)cCapsuleInstsAssignment_4_5.eContents().get(0);
		private final Assignment cConnectorsAssignment_4_6 = (Assignment)cAlternatives_4.eContents().get(6);
		private final RuleCall cConnectorsConnectorParserRuleCall_4_6_0 = (RuleCall)cConnectorsAssignment_4_6.eContents().get(0);
		private final Assignment cOperationsAssignment_4_7 = (Assignment)cAlternatives_4.eContents().get(7);
		private final RuleCall cOperationsOperationParserRuleCall_4_7_0 = (RuleCall)cOperationsAssignment_4_7.eContents().get(0);
		private final Assignment cStatemachinesAssignment_4_8 = (Assignment)cAlternatives_4.eContents().get(8);
		private final RuleCall cStatemachinesStateMachineParserRuleCall_4_8_0 = (RuleCall)cStatemachinesAssignment_4_8.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_5 = (Keyword)cGroup.eContents().get(5);
		
		///****************************************************************
		// * Capsules, Ports, and Connectors
		// ****************************************************************/ /**
		// * The capsule 
		// */ Capsule:
		//	root?='root'? 'capsule' name=ID '{' ('external' interfacePorts+=Port
		//	| internalPorts+=Port
		//	| timerPorts+=TimerPort
		//	| logPorts+=LogPort
		//	| attributes+=Attribute
		//	| capsuleInsts+=CapsuleInst
		//	| connectors+=Connector
		//	| operations+=Operation
		//	| statemachines+=StateMachine)*
		//	'}';
		@Override public ParserRule getRule() { return rule; }
		
		//root?='root'? 'capsule' name=ID '{' ('external' interfacePorts+=Port | internalPorts+=Port | timerPorts+=TimerPort |
		//logPorts+=LogPort | attributes+=Attribute | capsuleInsts+=CapsuleInst | connectors+=Connector | operations+=Operation |
		//statemachines+=StateMachine)* '}'
		public Group getGroup() { return cGroup; }
		
		//root?='root'?
		public Assignment getRootAssignment_0() { return cRootAssignment_0; }
		
		//'root'
		public Keyword getRootRootKeyword_0_0() { return cRootRootKeyword_0_0; }
		
		//'capsule'
		public Keyword getCapsuleKeyword_1() { return cCapsuleKeyword_1; }
		
		//name=ID
		public Assignment getNameAssignment_2() { return cNameAssignment_2; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_2_0() { return cNameIDTerminalRuleCall_2_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_3() { return cLeftCurlyBracketKeyword_3; }
		
		//('external' interfacePorts+=Port | internalPorts+=Port | timerPorts+=TimerPort | logPorts+=LogPort |
		//attributes+=Attribute | capsuleInsts+=CapsuleInst | connectors+=Connector | operations+=Operation |
		//statemachines+=StateMachine)*
		public Alternatives getAlternatives_4() { return cAlternatives_4; }
		
		//'external' interfacePorts+=Port
		public Group getGroup_4_0() { return cGroup_4_0; }
		
		//'external'
		public Keyword getExternalKeyword_4_0_0() { return cExternalKeyword_4_0_0; }
		
		//interfacePorts+=Port
		public Assignment getInterfacePortsAssignment_4_0_1() { return cInterfacePortsAssignment_4_0_1; }
		
		//Port
		public RuleCall getInterfacePortsPortParserRuleCall_4_0_1_0() { return cInterfacePortsPortParserRuleCall_4_0_1_0; }
		
		//internalPorts+=Port
		public Assignment getInternalPortsAssignment_4_1() { return cInternalPortsAssignment_4_1; }
		
		//Port
		public RuleCall getInternalPortsPortParserRuleCall_4_1_0() { return cInternalPortsPortParserRuleCall_4_1_0; }
		
		//timerPorts+=TimerPort
		public Assignment getTimerPortsAssignment_4_2() { return cTimerPortsAssignment_4_2; }
		
		//TimerPort
		public RuleCall getTimerPortsTimerPortParserRuleCall_4_2_0() { return cTimerPortsTimerPortParserRuleCall_4_2_0; }
		
		//logPorts+=LogPort
		public Assignment getLogPortsAssignment_4_3() { return cLogPortsAssignment_4_3; }
		
		//LogPort
		public RuleCall getLogPortsLogPortParserRuleCall_4_3_0() { return cLogPortsLogPortParserRuleCall_4_3_0; }
		
		//attributes+=Attribute
		public Assignment getAttributesAssignment_4_4() { return cAttributesAssignment_4_4; }
		
		//Attribute
		public RuleCall getAttributesAttributeParserRuleCall_4_4_0() { return cAttributesAttributeParserRuleCall_4_4_0; }
		
		//capsuleInsts+=CapsuleInst
		public Assignment getCapsuleInstsAssignment_4_5() { return cCapsuleInstsAssignment_4_5; }
		
		//CapsuleInst
		public RuleCall getCapsuleInstsCapsuleInstParserRuleCall_4_5_0() { return cCapsuleInstsCapsuleInstParserRuleCall_4_5_0; }
		
		//connectors+=Connector
		public Assignment getConnectorsAssignment_4_6() { return cConnectorsAssignment_4_6; }
		
		//Connector
		public RuleCall getConnectorsConnectorParserRuleCall_4_6_0() { return cConnectorsConnectorParserRuleCall_4_6_0; }
		
		//operations+=Operation
		public Assignment getOperationsAssignment_4_7() { return cOperationsAssignment_4_7; }
		
		//Operation
		public RuleCall getOperationsOperationParserRuleCall_4_7_0() { return cOperationsOperationParserRuleCall_4_7_0; }
		
		//statemachines+=StateMachine
		public Assignment getStatemachinesAssignment_4_8() { return cStatemachinesAssignment_4_8; }
		
		//StateMachine
		public RuleCall getStatemachinesStateMachineParserRuleCall_4_8_0() { return cStatemachinesStateMachineParserRuleCall_4_8_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_5() { return cRightCurlyBracketKeyword_5; }
	}
	public class OperationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Operation");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cOperationKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
		private final Assignment cIsBoolAssignment_1_0 = (Assignment)cAlternatives_1.eContents().get(0);
		private final Keyword cIsBoolBoolKeyword_1_0_0 = (Keyword)cIsBoolAssignment_1_0.eContents().get(0);
		private final Assignment cIsIntAssignment_1_1 = (Assignment)cAlternatives_1.eContents().get(1);
		private final Keyword cIsIntIntKeyword_1_1_0 = (Keyword)cIsIntAssignment_1_1.eContents().get(0);
		private final Assignment cIsVoidAssignment_1_2 = (Assignment)cAlternatives_1.eContents().get(2);
		private final Keyword cIsVoidVoidKeyword_1_2_0 = (Keyword)cIsVoidAssignment_1_2.eContents().get(0);
		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 Group cGroup_4 = (Group)cGroup.eContents().get(4);
		private final Assignment cLocalVarsAssignment_4_0 = (Assignment)cGroup_4.eContents().get(0);
		private final RuleCall cLocalVarsLocalVarParserRuleCall_4_0_0 = (RuleCall)cLocalVarsAssignment_4_0.eContents().get(0);
		private final Group cGroup_4_1 = (Group)cGroup_4.eContents().get(1);
		private final Keyword cCommaKeyword_4_1_0 = (Keyword)cGroup_4_1.eContents().get(0);
		private final Assignment cLocalVarsAssignment_4_1_1 = (Assignment)cGroup_4_1.eContents().get(1);
		private final RuleCall cLocalVarsLocalVarParserRuleCall_4_1_1_0 = (RuleCall)cLocalVarsAssignment_4_1_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
		private final Keyword cLeftCurlyBracketKeyword_6 = (Keyword)cGroup.eContents().get(6);
		private final Assignment cOperationCodeAssignment_7 = (Assignment)cGroup.eContents().get(7);
		private final RuleCall cOperationCodeOperationCodeParserRuleCall_7_0 = (RuleCall)cOperationCodeAssignment_7.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_8 = (Keyword)cGroup.eContents().get(8);
		
		//Operation:
		//	'operation' (isBool?='bool' | isInt?='int' | isVoid?='void') name=ID
		//	'(' (LocalVars+=LocalVar (',' LocalVars+=LocalVar)*)? ')'
		//	'{'
		//	operationCode=OperationCode
		//	'}';
		@Override public ParserRule getRule() { return rule; }
		
		//'operation' (isBool?='bool' | isInt?='int' | isVoid?='void') name=ID '(' (LocalVars+=LocalVar (','
		//LocalVars+=LocalVar)*)? ')' '{' operationCode=OperationCode '}'
		public Group getGroup() { return cGroup; }
		
		//'operation'
		public Keyword getOperationKeyword_0() { return cOperationKeyword_0; }
		
		//(isBool?='bool' | isInt?='int' | isVoid?='void')
		public Alternatives getAlternatives_1() { return cAlternatives_1; }
		
		//isBool?='bool'
		public Assignment getIsBoolAssignment_1_0() { return cIsBoolAssignment_1_0; }
		
		//'bool'
		public Keyword getIsBoolBoolKeyword_1_0_0() { return cIsBoolBoolKeyword_1_0_0; }
		
		//isInt?='int'
		public Assignment getIsIntAssignment_1_1() { return cIsIntAssignment_1_1; }
		
		//'int'
		public Keyword getIsIntIntKeyword_1_1_0() { return cIsIntIntKeyword_1_1_0; }
		
		//isVoid?='void'
		public Assignment getIsVoidAssignment_1_2() { return cIsVoidAssignment_1_2; }
		
		//'void'
		public Keyword getIsVoidVoidKeyword_1_2_0() { return cIsVoidVoidKeyword_1_2_0; }
		
		//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; }
		
		//(LocalVars+=LocalVar (',' LocalVars+=LocalVar)*)?
		public Group getGroup_4() { return cGroup_4; }
		
		//LocalVars+=LocalVar
		public Assignment getLocalVarsAssignment_4_0() { return cLocalVarsAssignment_4_0; }
		
		//LocalVar
		public RuleCall getLocalVarsLocalVarParserRuleCall_4_0_0() { return cLocalVarsLocalVarParserRuleCall_4_0_0; }
		
		//(',' LocalVars+=LocalVar)*
		public Group getGroup_4_1() { return cGroup_4_1; }
		
		//','
		public Keyword getCommaKeyword_4_1_0() { return cCommaKeyword_4_1_0; }
		
		//LocalVars+=LocalVar
		public Assignment getLocalVarsAssignment_4_1_1() { return cLocalVarsAssignment_4_1_1; }
		
		//LocalVar
		public RuleCall getLocalVarsLocalVarParserRuleCall_4_1_1_0() { return cLocalVarsLocalVarParserRuleCall_4_1_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_5() { return cRightParenthesisKeyword_5; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_6() { return cLeftCurlyBracketKeyword_6; }
		
		//operationCode=OperationCode
		public Assignment getOperationCodeAssignment_7() { return cOperationCodeAssignment_7; }
		
		//OperationCode
		public RuleCall getOperationCodeOperationCodeParserRuleCall_7_0() { return cOperationCodeOperationCodeParserRuleCall_7_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_8() { return cRightCurlyBracketKeyword_8; }
	}
	public class TimerPortElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.TimerPort");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cTimerPortKeyword_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);
		
		//TimerPort:
		//	'timerPort' name=ID;
		@Override public ParserRule getRule() { return rule; }
		
		//'timerPort' name=ID
		public Group getGroup() { return cGroup; }
		
		//'timerPort'
		public Keyword getTimerPortKeyword_0() { return cTimerPortKeyword_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
	}
	public class LogPortElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.LogPort");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLogPortKeyword_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);
		
		//LogPort:
		//	'logPort' name=ID;
		@Override public ParserRule getRule() { return rule; }
		
		//'logPort' name=ID
		public Group getGroup() { return cGroup; }
		
		//'logPort'
		public Keyword getLogPortKeyword_0() { return cLogPortKeyword_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
	}
	public class PortElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Port");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cPortKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cConjugatedAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final Keyword cConjugatedTildeKeyword_1_0 = (Keyword)cConjugatedAssignment_1.eContents().get(0);
		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 cColonKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cProtocolAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final CrossReference cProtocolProtocolCrossReference_4_0 = (CrossReference)cProtocolAssignment_4.eContents().get(0);
		private final RuleCall cProtocolProtocolIDTerminalRuleCall_4_0_1 = (RuleCall)cProtocolProtocolCrossReference_4_0.eContents().get(1);
		
		//Port:
		//	'port' conjugated?='~'? name=ID ':' protocol=[Protocol];
		@Override public ParserRule getRule() { return rule; }
		
		//'port' conjugated?='~'? name=ID ':' protocol=[Protocol]
		public Group getGroup() { return cGroup; }
		
		//'port'
		public Keyword getPortKeyword_0() { return cPortKeyword_0; }
		
		//conjugated?='~'?
		public Assignment getConjugatedAssignment_1() { return cConjugatedAssignment_1; }
		
		//'~'
		public Keyword getConjugatedTildeKeyword_1_0() { return cConjugatedTildeKeyword_1_0; }
		
		//name=ID
		public Assignment getNameAssignment_2() { return cNameAssignment_2; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_2_0() { return cNameIDTerminalRuleCall_2_0; }
		
		//':'
		public Keyword getColonKeyword_3() { return cColonKeyword_3; }
		
		//protocol=[Protocol]
		public Assignment getProtocolAssignment_4() { return cProtocolAssignment_4; }
		
		//[Protocol]
		public CrossReference getProtocolProtocolCrossReference_4_0() { return cProtocolProtocolCrossReference_4_0; }
		
		//ID
		public RuleCall getProtocolProtocolIDTerminalRuleCall_4_0_1() { return cProtocolProtocolIDTerminalRuleCall_4_0_1; }
	}
	public class ConnectorElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Connector");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cConnectorKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Assignment cCapsuleInst1Assignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
		private final CrossReference cCapsuleInst1CapsuleInstCrossReference_1_0_0 = (CrossReference)cCapsuleInst1Assignment_1_0.eContents().get(0);
		private final RuleCall cCapsuleInst1CapsuleInstIDTerminalRuleCall_1_0_0_1 = (RuleCall)cCapsuleInst1CapsuleInstCrossReference_1_0_0.eContents().get(1);
		private final Keyword cFullStopKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cPort1Assignment_2 = (Assignment)cGroup.eContents().get(2);
		private final CrossReference cPort1PortCrossReference_2_0 = (CrossReference)cPort1Assignment_2.eContents().get(0);
		private final RuleCall cPort1PortIDTerminalRuleCall_2_0_1 = (RuleCall)cPort1PortCrossReference_2_0.eContents().get(1);
		private final Keyword cAndKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
		private final Assignment cCapsuleInst2Assignment_4_0 = (Assignment)cGroup_4.eContents().get(0);
		private final CrossReference cCapsuleInst2CapsuleInstCrossReference_4_0_0 = (CrossReference)cCapsuleInst2Assignment_4_0.eContents().get(0);
		private final RuleCall cCapsuleInst2CapsuleInstIDTerminalRuleCall_4_0_0_1 = (RuleCall)cCapsuleInst2CapsuleInstCrossReference_4_0_0.eContents().get(1);
		private final Keyword cFullStopKeyword_4_1 = (Keyword)cGroup_4.eContents().get(1);
		private final Assignment cPort2Assignment_5 = (Assignment)cGroup.eContents().get(5);
		private final CrossReference cPort2PortCrossReference_5_0 = (CrossReference)cPort2Assignment_5.eContents().get(0);
		private final RuleCall cPort2PortIDTerminalRuleCall_5_0_1 = (RuleCall)cPort2PortCrossReference_5_0.eContents().get(1);
		
		//Connector:
		//	'connector' (capsuleInst1=[CapsuleInst] '.')? port1=[Port]
		//	'and' (capsuleInst2=[CapsuleInst] '.')? port2=[Port];
		@Override public ParserRule getRule() { return rule; }
		
		//'connector' (capsuleInst1=[CapsuleInst] '.')? port1=[Port] 'and' (capsuleInst2=[CapsuleInst] '.')? port2=[Port]
		public Group getGroup() { return cGroup; }
		
		//'connector'
		public Keyword getConnectorKeyword_0() { return cConnectorKeyword_0; }
		
		//(capsuleInst1=[CapsuleInst] '.')?
		public Group getGroup_1() { return cGroup_1; }
		
		//capsuleInst1=[CapsuleInst]
		public Assignment getCapsuleInst1Assignment_1_0() { return cCapsuleInst1Assignment_1_0; }
		
		//[CapsuleInst]
		public CrossReference getCapsuleInst1CapsuleInstCrossReference_1_0_0() { return cCapsuleInst1CapsuleInstCrossReference_1_0_0; }
		
		//ID
		public RuleCall getCapsuleInst1CapsuleInstIDTerminalRuleCall_1_0_0_1() { return cCapsuleInst1CapsuleInstIDTerminalRuleCall_1_0_0_1; }
		
		//'.'
		public Keyword getFullStopKeyword_1_1() { return cFullStopKeyword_1_1; }
		
		//port1=[Port]
		public Assignment getPort1Assignment_2() { return cPort1Assignment_2; }
		
		//[Port]
		public CrossReference getPort1PortCrossReference_2_0() { return cPort1PortCrossReference_2_0; }
		
		//ID
		public RuleCall getPort1PortIDTerminalRuleCall_2_0_1() { return cPort1PortIDTerminalRuleCall_2_0_1; }
		
		//'and'
		public Keyword getAndKeyword_3() { return cAndKeyword_3; }
		
		//(capsuleInst2=[CapsuleInst] '.')?
		public Group getGroup_4() { return cGroup_4; }
		
		//capsuleInst2=[CapsuleInst]
		public Assignment getCapsuleInst2Assignment_4_0() { return cCapsuleInst2Assignment_4_0; }
		
		//[CapsuleInst]
		public CrossReference getCapsuleInst2CapsuleInstCrossReference_4_0_0() { return cCapsuleInst2CapsuleInstCrossReference_4_0_0; }
		
		//ID
		public RuleCall getCapsuleInst2CapsuleInstIDTerminalRuleCall_4_0_0_1() { return cCapsuleInst2CapsuleInstIDTerminalRuleCall_4_0_0_1; }
		
		//'.'
		public Keyword getFullStopKeyword_4_1() { return cFullStopKeyword_4_1; }
		
		//port2=[Port]
		public Assignment getPort2Assignment_5() { return cPort2Assignment_5; }
		
		//[Port]
		public CrossReference getPort2PortCrossReference_5_0() { return cPort2PortCrossReference_5_0; }
		
		//ID
		public RuleCall getPort2PortIDTerminalRuleCall_5_0_1() { return cPort2PortIDTerminalRuleCall_5_0_1; }
	}
	public class CapsuleInstElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.CapsuleInst");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cCapsuleInstanceKeyword_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 cColonKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cTypeAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final CrossReference cTypeCapsuleCrossReference_3_0 = (CrossReference)cTypeAssignment_3.eContents().get(0);
		private final RuleCall cTypeCapsuleIDTerminalRuleCall_3_0_1 = (RuleCall)cTypeCapsuleCrossReference_3_0.eContents().get(1);
		
		//CapsuleInst:
		//	'capsuleInstance' name=ID ':' type=[Capsule];
		@Override public ParserRule getRule() { return rule; }
		
		//'capsuleInstance' name=ID ':' type=[Capsule]
		public Group getGroup() { return cGroup; }
		
		//'capsuleInstance'
		public Keyword getCapsuleInstanceKeyword_0() { return cCapsuleInstanceKeyword_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
		
		//':'
		public Keyword getColonKeyword_2() { return cColonKeyword_2; }
		
		//type=[Capsule]
		public Assignment getTypeAssignment_3() { return cTypeAssignment_3; }
		
		//[Capsule]
		public CrossReference getTypeCapsuleCrossReference_3_0() { return cTypeCapsuleCrossReference_3_0; }
		
		//ID
		public RuleCall getTypeCapsuleIDTerminalRuleCall_3_0_1() { return cTypeCapsuleIDTerminalRuleCall_3_0_1; }
	}
	public class StateMachineElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.StateMachine");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cStateMachineAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cStateMachineKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Alternatives cAlternatives_3 = (Alternatives)cGroup.eContents().get(3);
		private final Assignment cStatesAssignment_3_0 = (Assignment)cAlternatives_3.eContents().get(0);
		private final RuleCall cStatesState_ParserRuleCall_3_0_0 = (RuleCall)cStatesAssignment_3_0.eContents().get(0);
		private final Assignment cTransitionsAssignment_3_1 = (Assignment)cAlternatives_3.eContents().get(1);
		private final RuleCall cTransitionsTransitionParserRuleCall_3_1_0 = (RuleCall)cTransitionsAssignment_3_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		///*******************************************************************
		// * State Machines
		// *******************************************************************/ StateMachine:
		//	{StateMachine}
		//	'stateMachine' '{' (states+=State_
		//	| transitions+=Transition)*
		//	'}';
		@Override public ParserRule getRule() { return rule; }
		
		//{StateMachine} 'stateMachine' '{' (states+=State_ | transitions+=Transition)* '}'
		public Group getGroup() { return cGroup; }
		
		//{StateMachine}
		public Action getStateMachineAction_0() { return cStateMachineAction_0; }
		
		//'stateMachine'
		public Keyword getStateMachineKeyword_1() { return cStateMachineKeyword_1; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
		
		//(states+=State_ | transitions+=Transition)*
		public Alternatives getAlternatives_3() { return cAlternatives_3; }
		
		//states+=State_
		public Assignment getStatesAssignment_3_0() { return cStatesAssignment_3_0; }
		
		//State_
		public RuleCall getStatesState_ParserRuleCall_3_0_0() { return cStatesState_ParserRuleCall_3_0_0; }
		
		//transitions+=Transition
		public Assignment getTransitionsAssignment_3_1() { return cTransitionsAssignment_3_1; }
		
		//Transition
		public RuleCall getTransitionsTransitionParserRuleCall_3_1_0() { return cTransitionsTransitionParserRuleCall_3_1_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_4() { return cRightCurlyBracketKeyword_4; }
	}
	public class State_Elements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.State_");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cFinalAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final Keyword cFinalFinalKeyword_0_0 = (Keyword)cFinalAssignment_0.eContents().get(0);
		private final Keyword cStateKeyword_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 Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Keyword cLeftCurlyBracketKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final Group cGroup_3_1 = (Group)cGroup_3.eContents().get(1);
		private final Keyword cEntryKeyword_3_1_0 = (Keyword)cGroup_3_1.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_3_1_1 = (Keyword)cGroup_3_1.eContents().get(1);
		private final Assignment cEntryCodeAssignment_3_1_2 = (Assignment)cGroup_3_1.eContents().get(2);
		private final RuleCall cEntryCodeActionCodeParserRuleCall_3_1_2_0 = (RuleCall)cEntryCodeAssignment_3_1_2.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_3_1_3 = (Keyword)cGroup_3_1.eContents().get(3);
		private final Group cGroup_3_2 = (Group)cGroup_3.eContents().get(2);
		private final Keyword cExitKeyword_3_2_0 = (Keyword)cGroup_3_2.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_3_2_1 = (Keyword)cGroup_3_2.eContents().get(1);
		private final Assignment cExitCodeAssignment_3_2_2 = (Assignment)cGroup_3_2.eContents().get(2);
		private final RuleCall cExitCodeActionCodeParserRuleCall_3_2_2_0 = (RuleCall)cExitCodeAssignment_3_2_2.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_3_2_3 = (Keyword)cGroup_3_2.eContents().get(3);
		private final Group cGroup_3_3 = (Group)cGroup_3.eContents().get(3);
		private final Keyword cSubKeyword_3_3_0 = (Keyword)cGroup_3_3.eContents().get(0);
		private final Assignment cSubstatemachineAssignment_3_3_1 = (Assignment)cGroup_3_3.eContents().get(1);
		private final RuleCall cSubstatemachineStateMachineParserRuleCall_3_3_1_0 = (RuleCall)cSubstatemachineAssignment_3_3_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_3_4 = (Keyword)cGroup_3.eContents().get(4);
		
		//State_:
		//	final?='final'? 'state' name=ID ('{' ('entry' '{' entryCode=ActionCode '}')? ('exit' '{' exitCode=ActionCode '}')?
		//	('sub' substatemachine=StateMachine)?
		//	'}')?;
		@Override public ParserRule getRule() { return rule; }
		
		//final?='final'? 'state' name=ID ('{' ('entry' '{' entryCode=ActionCode '}')? ('exit' '{' exitCode=ActionCode '}')?
		//('sub' substatemachine=StateMachine)? '}')?
		public Group getGroup() { return cGroup; }
		
		//final?='final'?
		public Assignment getFinalAssignment_0() { return cFinalAssignment_0; }
		
		//'final'
		public Keyword getFinalFinalKeyword_0_0() { return cFinalFinalKeyword_0_0; }
		
		//'state'
		public Keyword getStateKeyword_1() { return cStateKeyword_1; }
		
		//name=ID
		public Assignment getNameAssignment_2() { return cNameAssignment_2; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_2_0() { return cNameIDTerminalRuleCall_2_0; }
		
		//('{' ('entry' '{' entryCode=ActionCode '}')? ('exit' '{' exitCode=ActionCode '}')? ('sub' substatemachine=StateMachine)?
		//'}')?
		public Group getGroup_3() { return cGroup_3; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_3_0() { return cLeftCurlyBracketKeyword_3_0; }
		
		//('entry' '{' entryCode=ActionCode '}')?
		public Group getGroup_3_1() { return cGroup_3_1; }
		
		//'entry'
		public Keyword getEntryKeyword_3_1_0() { return cEntryKeyword_3_1_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_3_1_1() { return cLeftCurlyBracketKeyword_3_1_1; }
		
		//entryCode=ActionCode
		public Assignment getEntryCodeAssignment_3_1_2() { return cEntryCodeAssignment_3_1_2; }
		
		//ActionCode
		public RuleCall getEntryCodeActionCodeParserRuleCall_3_1_2_0() { return cEntryCodeActionCodeParserRuleCall_3_1_2_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_3_1_3() { return cRightCurlyBracketKeyword_3_1_3; }
		
		//('exit' '{' exitCode=ActionCode '}')?
		public Group getGroup_3_2() { return cGroup_3_2; }
		
		//'exit'
		public Keyword getExitKeyword_3_2_0() { return cExitKeyword_3_2_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_3_2_1() { return cLeftCurlyBracketKeyword_3_2_1; }
		
		//exitCode=ActionCode
		public Assignment getExitCodeAssignment_3_2_2() { return cExitCodeAssignment_3_2_2; }
		
		//ActionCode
		public RuleCall getExitCodeActionCodeParserRuleCall_3_2_2_0() { return cExitCodeActionCodeParserRuleCall_3_2_2_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_3_2_3() { return cRightCurlyBracketKeyword_3_2_3; }
		
		//('sub' substatemachine=StateMachine)?
		public Group getGroup_3_3() { return cGroup_3_3; }
		
		//'sub'
		public Keyword getSubKeyword_3_3_0() { return cSubKeyword_3_3_0; }
		
		//substatemachine=StateMachine
		public Assignment getSubstatemachineAssignment_3_3_1() { return cSubstatemachineAssignment_3_3_1; }
		
		//StateMachine
		public RuleCall getSubstatemachineStateMachineParserRuleCall_3_3_1_0() { return cSubstatemachineStateMachineParserRuleCall_3_3_1_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_3_4() { return cRightCurlyBracketKeyword_3_4; }
	}
	public class TransitionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Transition");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cTransitionKeyword_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 cColonKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Alternatives cAlternatives_3 = (Alternatives)cGroup.eContents().get(3);
		private final Assignment cInitAssignment_3_0 = (Assignment)cAlternatives_3.eContents().get(0);
		private final Keyword cInitInitialKeyword_3_0_0 = (Keyword)cInitAssignment_3_0.eContents().get(0);
		private final Assignment cFromAssignment_3_1 = (Assignment)cAlternatives_3.eContents().get(1);
		private final CrossReference cFromState_CrossReference_3_1_0 = (CrossReference)cFromAssignment_3_1.eContents().get(0);
		private final RuleCall cFromState_IDTerminalRuleCall_3_1_0_1 = (RuleCall)cFromState_CrossReference_3_1_0.eContents().get(1);
		private final Keyword cHyphenMinusGreaterThanSignKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Assignment cToAssignment_5 = (Assignment)cGroup.eContents().get(5);
		private final CrossReference cToState_CrossReference_5_0 = (CrossReference)cToAssignment_5.eContents().get(0);
		private final RuleCall cToState_IDTerminalRuleCall_5_0_1 = (RuleCall)cToState_CrossReference_5_0.eContents().get(1);
		private final Keyword cLeftCurlyBracketKeyword_6 = (Keyword)cGroup.eContents().get(6);
		private final Group cGroup_7 = (Group)cGroup.eContents().get(7);
		private final Keyword cGuardKeyword_7_0 = (Keyword)cGroup_7.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_7_1 = (Keyword)cGroup_7.eContents().get(1);
		private final Assignment cGuardAssignment_7_2 = (Assignment)cGroup_7.eContents().get(2);
		private final RuleCall cGuardExpressionParserRuleCall_7_2_0 = (RuleCall)cGuardAssignment_7_2.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_7_3 = (Keyword)cGroup_7.eContents().get(3);
		private final Group cGroup_8 = (Group)cGroup.eContents().get(8);
		private final Keyword cTriggeredByKeyword_8_0 = (Keyword)cGroup_8.eContents().get(0);
		private final Alternatives cAlternatives_8_1 = (Alternatives)cGroup_8.eContents().get(1);
		private final Group cGroup_8_1_0 = (Group)cAlternatives_8_1.eContents().get(0);
		private final Assignment cTriggersAssignment_8_1_0_0 = (Assignment)cGroup_8_1_0.eContents().get(0);
		private final RuleCall cTriggersTrigger_inParserRuleCall_8_1_0_0_0 = (RuleCall)cTriggersAssignment_8_1_0_0.eContents().get(0);
		private final Group cGroup_8_1_0_1 = (Group)cGroup_8_1_0.eContents().get(1);
		private final Keyword cOrKeyword_8_1_0_1_0 = (Keyword)cGroup_8_1_0_1.eContents().get(0);
		private final Assignment cTriggersAssignment_8_1_0_1_1 = (Assignment)cGroup_8_1_0_1.eContents().get(1);
		private final RuleCall cTriggersTrigger_inParserRuleCall_8_1_0_1_1_0 = (RuleCall)cTriggersAssignment_8_1_0_1_1.eContents().get(0);
		private final Group cGroup_8_1_1 = (Group)cAlternatives_8_1.eContents().get(1);
		private final Keyword cTimeoutKeyword_8_1_1_0 = (Keyword)cGroup_8_1_1.eContents().get(0);
		private final Assignment cTimerPortAssignment_8_1_1_1 = (Assignment)cGroup_8_1_1.eContents().get(1);
		private final CrossReference cTimerPortTimerPortCrossReference_8_1_1_1_0 = (CrossReference)cTimerPortAssignment_8_1_1_1.eContents().get(0);
		private final RuleCall cTimerPortTimerPortIDTerminalRuleCall_8_1_1_1_0_1 = (RuleCall)cTimerPortTimerPortCrossReference_8_1_1_1_0.eContents().get(1);
		private final Assignment cUniversalAssignment_8_1_2 = (Assignment)cAlternatives_8_1.eContents().get(2);
		private final Keyword cUniversalAsteriskKeyword_8_1_2_0 = (Keyword)cUniversalAssignment_8_1_2.eContents().get(0);
		private final Group cGroup_9 = (Group)cGroup.eContents().get(9);
		private final Keyword cActionKeyword_9_0 = (Keyword)cGroup_9.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_9_1 = (Keyword)cGroup_9.eContents().get(1);
		private final Assignment cActionAssignment_9_2 = (Assignment)cGroup_9.eContents().get(2);
		private final RuleCall cActionActionCodeParserRuleCall_9_2_0 = (RuleCall)cActionAssignment_9_2.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_9_3 = (Keyword)cGroup_9.eContents().get(3);
		private final Keyword cRightCurlyBracketKeyword_10 = (Keyword)cGroup.eContents().get(10);
		
		///*
		// * transitions:
		// */ Transition:
		//	'transition' name=ID? ':' (init?='initial' | from=[State_]) '->' to=[State_]
		//	'{' ('guard' '{' guard=Expression '}')? ('triggeredBy' (triggers+=Trigger_in ('or' triggers+=Trigger_in)* | 'timeout'
		//	timerPort=[TimerPort] | universal?='*'))? ('action' '{' action=ActionCode '}')?
		//	'}';
		@Override public ParserRule getRule() { return rule; }
		
		//'transition' name=ID? ':' (init?='initial' | from=[State_]) '->' to=[State_] '{' ('guard' '{' guard=Expression '}')?
		//('triggeredBy' (triggers+=Trigger_in ('or' triggers+=Trigger_in)* | 'timeout' timerPort=[TimerPort] | universal?='*'))?
		//('action' '{' action=ActionCode '}')? '}'
		public Group getGroup() { return cGroup; }
		
		//'transition'
		public Keyword getTransitionKeyword_0() { return cTransitionKeyword_0; }
		
		//name=ID?
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
		
		//':'
		public Keyword getColonKeyword_2() { return cColonKeyword_2; }
		
		//(init?='initial' | from=[State_])
		public Alternatives getAlternatives_3() { return cAlternatives_3; }
		
		//init?='initial'
		public Assignment getInitAssignment_3_0() { return cInitAssignment_3_0; }
		
		//'initial'
		public Keyword getInitInitialKeyword_3_0_0() { return cInitInitialKeyword_3_0_0; }
		
		//from=[State_]
		public Assignment getFromAssignment_3_1() { return cFromAssignment_3_1; }
		
		//[State_]
		public CrossReference getFromState_CrossReference_3_1_0() { return cFromState_CrossReference_3_1_0; }
		
		//ID
		public RuleCall getFromState_IDTerminalRuleCall_3_1_0_1() { return cFromState_IDTerminalRuleCall_3_1_0_1; }
		
		//'->'
		public Keyword getHyphenMinusGreaterThanSignKeyword_4() { return cHyphenMinusGreaterThanSignKeyword_4; }
		
		//to=[State_]
		public Assignment getToAssignment_5() { return cToAssignment_5; }
		
		//[State_]
		public CrossReference getToState_CrossReference_5_0() { return cToState_CrossReference_5_0; }
		
		//ID
		public RuleCall getToState_IDTerminalRuleCall_5_0_1() { return cToState_IDTerminalRuleCall_5_0_1; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_6() { return cLeftCurlyBracketKeyword_6; }
		
		//('guard' '{' guard=Expression '}')?
		public Group getGroup_7() { return cGroup_7; }
		
		//'guard'
		public Keyword getGuardKeyword_7_0() { return cGuardKeyword_7_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_7_1() { return cLeftCurlyBracketKeyword_7_1; }
		
		//guard=Expression
		public Assignment getGuardAssignment_7_2() { return cGuardAssignment_7_2; }
		
		//Expression
		public RuleCall getGuardExpressionParserRuleCall_7_2_0() { return cGuardExpressionParserRuleCall_7_2_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_7_3() { return cRightCurlyBracketKeyword_7_3; }
		
		//('triggeredBy' (triggers+=Trigger_in ('or' triggers+=Trigger_in)* | 'timeout' timerPort=[TimerPort] | universal?='*'))?
		public Group getGroup_8() { return cGroup_8; }
		
		//'triggeredBy'
		public Keyword getTriggeredByKeyword_8_0() { return cTriggeredByKeyword_8_0; }
		
		//(triggers+=Trigger_in ('or' triggers+=Trigger_in)* | 'timeout' timerPort=[TimerPort] | universal?='*')
		public Alternatives getAlternatives_8_1() { return cAlternatives_8_1; }
		
		//triggers+=Trigger_in ('or' triggers+=Trigger_in)*
		public Group getGroup_8_1_0() { return cGroup_8_1_0; }
		
		//triggers+=Trigger_in
		public Assignment getTriggersAssignment_8_1_0_0() { return cTriggersAssignment_8_1_0_0; }
		
		//Trigger_in
		public RuleCall getTriggersTrigger_inParserRuleCall_8_1_0_0_0() { return cTriggersTrigger_inParserRuleCall_8_1_0_0_0; }
		
		//('or' triggers+=Trigger_in)*
		public Group getGroup_8_1_0_1() { return cGroup_8_1_0_1; }
		
		//'or'
		public Keyword getOrKeyword_8_1_0_1_0() { return cOrKeyword_8_1_0_1_0; }
		
		//triggers+=Trigger_in
		public Assignment getTriggersAssignment_8_1_0_1_1() { return cTriggersAssignment_8_1_0_1_1; }
		
		//Trigger_in
		public RuleCall getTriggersTrigger_inParserRuleCall_8_1_0_1_1_0() { return cTriggersTrigger_inParserRuleCall_8_1_0_1_1_0; }
		
		//'timeout' timerPort=[TimerPort]
		public Group getGroup_8_1_1() { return cGroup_8_1_1; }
		
		//'timeout'
		public Keyword getTimeoutKeyword_8_1_1_0() { return cTimeoutKeyword_8_1_1_0; }
		
		//timerPort=[TimerPort]
		public Assignment getTimerPortAssignment_8_1_1_1() { return cTimerPortAssignment_8_1_1_1; }
		
		//[TimerPort]
		public CrossReference getTimerPortTimerPortCrossReference_8_1_1_1_0() { return cTimerPortTimerPortCrossReference_8_1_1_1_0; }
		
		//ID
		public RuleCall getTimerPortTimerPortIDTerminalRuleCall_8_1_1_1_0_1() { return cTimerPortTimerPortIDTerminalRuleCall_8_1_1_1_0_1; }
		
		//universal?='*'
		public Assignment getUniversalAssignment_8_1_2() { return cUniversalAssignment_8_1_2; }
		
		//'*'
		public Keyword getUniversalAsteriskKeyword_8_1_2_0() { return cUniversalAsteriskKeyword_8_1_2_0; }
		
		//('action' '{' action=ActionCode '}')?
		public Group getGroup_9() { return cGroup_9; }
		
		//'action'
		public Keyword getActionKeyword_9_0() { return cActionKeyword_9_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_9_1() { return cLeftCurlyBracketKeyword_9_1; }
		
		//action=ActionCode
		public Assignment getActionAssignment_9_2() { return cActionAssignment_9_2; }
		
		//ActionCode
		public RuleCall getActionActionCodeParserRuleCall_9_2_0() { return cActionActionCodeParserRuleCall_9_2_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_9_3() { return cRightCurlyBracketKeyword_9_3; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_10() { return cRightCurlyBracketKeyword_10; }
	}
	public class Trigger_inElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Trigger_in");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cFromAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final CrossReference cFromPortCrossReference_0_0 = (CrossReference)cFromAssignment_0.eContents().get(0);
		private final RuleCall cFromPortIDTerminalRuleCall_0_0_1 = (RuleCall)cFromPortCrossReference_0_0.eContents().get(1);
		private final Keyword cFullStopKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cSignalAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final CrossReference cSignalSignalCrossReference_2_0 = (CrossReference)cSignalAssignment_2.eContents().get(0);
		private final RuleCall cSignalSignalIDTerminalRuleCall_2_0_1 = (RuleCall)cSignalSignalCrossReference_2_0.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
		private final Assignment cParametersAssignment_4_0 = (Assignment)cGroup_4.eContents().get(0);
		private final RuleCall cParametersIncomingVariableParserRuleCall_4_0_0 = (RuleCall)cParametersAssignment_4_0.eContents().get(0);
		private final Group cGroup_4_1 = (Group)cGroup_4.eContents().get(1);
		private final Keyword cCommaKeyword_4_1_0 = (Keyword)cGroup_4_1.eContents().get(0);
		private final Assignment cParametersAssignment_4_1_1 = (Assignment)cGroup_4_1.eContents().get(1);
		private final RuleCall cParametersIncomingVariableParserRuleCall_4_1_1_0 = (RuleCall)cParametersAssignment_4_1_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
		
		///*
		// * other constructs for state machines:
		// */ Trigger_in:
		//	from=[Port] '.'
		//	signal=[Signal]
		//	'(' (parameters+=IncomingVariable (','
		//	parameters+=IncomingVariable)*)? ')';
		@Override public ParserRule getRule() { return rule; }
		
		//from=[Port] '.' signal=[Signal] '(' (parameters+=IncomingVariable (',' parameters+=IncomingVariable)*)? ')'
		public Group getGroup() { return cGroup; }
		
		//from=[Port]
		public Assignment getFromAssignment_0() { return cFromAssignment_0; }
		
		//[Port]
		public CrossReference getFromPortCrossReference_0_0() { return cFromPortCrossReference_0_0; }
		
		//ID
		public RuleCall getFromPortIDTerminalRuleCall_0_0_1() { return cFromPortIDTerminalRuleCall_0_0_1; }
		
		//'.'
		public Keyword getFullStopKeyword_1() { return cFullStopKeyword_1; }
		
		//signal=[Signal]
		public Assignment getSignalAssignment_2() { return cSignalAssignment_2; }
		
		//[Signal]
		public CrossReference getSignalSignalCrossReference_2_0() { return cSignalSignalCrossReference_2_0; }
		
		//ID
		public RuleCall getSignalSignalIDTerminalRuleCall_2_0_1() { return cSignalSignalIDTerminalRuleCall_2_0_1; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_3() { return cLeftParenthesisKeyword_3; }
		
		//(parameters+=IncomingVariable (',' parameters+=IncomingVariable)*)?
		public Group getGroup_4() { return cGroup_4; }
		
		//parameters+=IncomingVariable
		public Assignment getParametersAssignment_4_0() { return cParametersAssignment_4_0; }
		
		//IncomingVariable
		public RuleCall getParametersIncomingVariableParserRuleCall_4_0_0() { return cParametersIncomingVariableParserRuleCall_4_0_0; }
		
		//(',' parameters+=IncomingVariable)*
		public Group getGroup_4_1() { return cGroup_4_1; }
		
		//','
		public Keyword getCommaKeyword_4_1_0() { return cCommaKeyword_4_1_0; }
		
		//parameters+=IncomingVariable
		public Assignment getParametersAssignment_4_1_1() { return cParametersAssignment_4_1_1; }
		
		//IncomingVariable
		public RuleCall getParametersIncomingVariableParserRuleCall_4_1_1_0() { return cParametersIncomingVariableParserRuleCall_4_1_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_5() { return cRightParenthesisKeyword_5; }
	}
	public class IncomingVariableElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.IncomingVariable");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
		private final Assignment cIsBoolAssignment_0_0 = (Assignment)cAlternatives_0.eContents().get(0);
		private final Keyword cIsBoolBoolKeyword_0_0_0 = (Keyword)cIsBoolAssignment_0_0.eContents().get(0);
		private final Assignment cIsIntAssignment_0_1 = (Assignment)cAlternatives_0.eContents().get(1);
		private final Keyword cIsIntIntKeyword_0_1_0 = (Keyword)cIsIntAssignment_0_1.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);
		
		//IncomingVariable:
		//	(isBool?='bool' | isInt?='int') name=ID;
		@Override public ParserRule getRule() { return rule; }
		
		//(isBool?='bool' | isInt?='int') name=ID
		public Group getGroup() { return cGroup; }
		
		//(isBool?='bool' | isInt?='int')
		public Alternatives getAlternatives_0() { return cAlternatives_0; }
		
		//isBool?='bool'
		public Assignment getIsBoolAssignment_0_0() { return cIsBoolAssignment_0_0; }
		
		//'bool'
		public Keyword getIsBoolBoolKeyword_0_0_0() { return cIsBoolBoolKeyword_0_0_0; }
		
		//isInt?='int'
		public Assignment getIsIntAssignment_0_1() { return cIsIntAssignment_0_1; }
		
		//'int'
		public Keyword getIsIntIntKeyword_0_1_0() { return cIsIntIntKeyword_0_1_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
	}
	public class Trigger_outElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Trigger_out");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cToAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final CrossReference cToPortCrossReference_0_0 = (CrossReference)cToAssignment_0.eContents().get(0);
		private final RuleCall cToPortIDTerminalRuleCall_0_0_1 = (RuleCall)cToPortCrossReference_0_0.eContents().get(1);
		private final Keyword cFullStopKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cSignalAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final CrossReference cSignalSignalCrossReference_2_0 = (CrossReference)cSignalAssignment_2.eContents().get(0);
		private final RuleCall cSignalSignalIDTerminalRuleCall_2_0_1 = (RuleCall)cSignalSignalCrossReference_2_0.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
		private final Assignment cParametersAssignment_4_0 = (Assignment)cGroup_4.eContents().get(0);
		private final RuleCall cParametersExpressionParserRuleCall_4_0_0 = (RuleCall)cParametersAssignment_4_0.eContents().get(0);
		private final Group cGroup_4_1 = (Group)cGroup_4.eContents().get(1);
		private final Keyword cCommaKeyword_4_1_0 = (Keyword)cGroup_4_1.eContents().get(0);
		private final Assignment cParametersAssignment_4_1_1 = (Assignment)cGroup_4_1.eContents().get(1);
		private final RuleCall cParametersExpressionParserRuleCall_4_1_1_0 = (RuleCall)cParametersAssignment_4_1_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
		
		//Trigger_out:
		//	to=[Port] '.'
		//	signal=[Signal]
		//	'(' (parameters+=Expression (','
		//	parameters+=Expression)*)?
		//	')';
		@Override public ParserRule getRule() { return rule; }
		
		//to=[Port] '.' signal=[Signal] '(' (parameters+=Expression (',' parameters+=Expression)*)? ')'
		public Group getGroup() { return cGroup; }
		
		//to=[Port]
		public Assignment getToAssignment_0() { return cToAssignment_0; }
		
		//[Port]
		public CrossReference getToPortCrossReference_0_0() { return cToPortCrossReference_0_0; }
		
		//ID
		public RuleCall getToPortIDTerminalRuleCall_0_0_1() { return cToPortIDTerminalRuleCall_0_0_1; }
		
		//'.'
		public Keyword getFullStopKeyword_1() { return cFullStopKeyword_1; }
		
		//signal=[Signal]
		public Assignment getSignalAssignment_2() { return cSignalAssignment_2; }
		
		//[Signal]
		public CrossReference getSignalSignalCrossReference_2_0() { return cSignalSignalCrossReference_2_0; }
		
		//ID
		public RuleCall getSignalSignalIDTerminalRuleCall_2_0_1() { return cSignalSignalIDTerminalRuleCall_2_0_1; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_3() { return cLeftParenthesisKeyword_3; }
		
		//(parameters+=Expression (',' parameters+=Expression)*)?
		public Group getGroup_4() { return cGroup_4; }
		
		//parameters+=Expression
		public Assignment getParametersAssignment_4_0() { return cParametersAssignment_4_0; }
		
		//Expression
		public RuleCall getParametersExpressionParserRuleCall_4_0_0() { return cParametersExpressionParserRuleCall_4_0_0; }
		
		//(',' parameters+=Expression)*
		public Group getGroup_4_1() { return cGroup_4_1; }
		
		//','
		public Keyword getCommaKeyword_4_1_0() { return cCommaKeyword_4_1_0; }
		
		//parameters+=Expression
		public Assignment getParametersAssignment_4_1_1() { return cParametersAssignment_4_1_1; }
		
		//Expression
		public RuleCall getParametersExpressionParserRuleCall_4_1_1_0() { return cParametersExpressionParserRuleCall_4_1_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_5() { return cRightParenthesisKeyword_5; }
	}
	public class OperationCodeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.OperationCode");
		private final Assignment cStatementsAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cStatementsStatementOperationParserRuleCall_0 = (RuleCall)cStatementsAssignment.eContents().get(0);
		
		///*********************************************************************
		// * Operation and Action Code / Statements
		// *********************************************************************/ // operation code
		//OperationCode:
		//	statements+=StatementOperation+;
		@Override public ParserRule getRule() { return rule; }
		
		//statements+=StatementOperation+
		public Assignment getStatementsAssignment() { return cStatementsAssignment; }
		
		//StatementOperation
		public RuleCall getStatementsStatementOperationParserRuleCall_0() { return cStatementsStatementOperationParserRuleCall_0; }
	}
	public class StatementOperationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.StatementOperation");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cNoOpParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cVariableParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cInvokeParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cAssignmentParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		private final RuleCall cSendTriggerParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
		private final RuleCall cInformTimerParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
		private final RuleCall cWhileLoopOperationParserRuleCall_6 = (RuleCall)cAlternatives.eContents().get(6);
		private final RuleCall cIfStatementOperationParserRuleCall_7 = (RuleCall)cAlternatives.eContents().get(7);
		private final RuleCall cLogStatementParserRuleCall_8 = (RuleCall)cAlternatives.eContents().get(8);
		private final RuleCall cReturnStatementParserRuleCall_9 = (RuleCall)cAlternatives.eContents().get(9);
		
		//StatementOperation:
		//	NoOp
		//	| Variable
		//	| Invoke
		//	| Assignment
		//	| SendTrigger
		//	| InformTimer
		//	| WhileLoopOperation
		//	| IfStatementOperation
		//	| LogStatement
		//	| ReturnStatement;
		@Override public ParserRule getRule() { return rule; }
		
		//NoOp | Variable | Invoke | Assignment | SendTrigger | InformTimer | WhileLoopOperation | IfStatementOperation |
		//LogStatement | ReturnStatement
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//NoOp
		public RuleCall getNoOpParserRuleCall_0() { return cNoOpParserRuleCall_0; }
		
		//Variable
		public RuleCall getVariableParserRuleCall_1() { return cVariableParserRuleCall_1; }
		
		//Invoke
		public RuleCall getInvokeParserRuleCall_2() { return cInvokeParserRuleCall_2; }
		
		//Assignment
		public RuleCall getAssignmentParserRuleCall_3() { return cAssignmentParserRuleCall_3; }
		
		//SendTrigger
		public RuleCall getSendTriggerParserRuleCall_4() { return cSendTriggerParserRuleCall_4; }
		
		//InformTimer
		public RuleCall getInformTimerParserRuleCall_5() { return cInformTimerParserRuleCall_5; }
		
		//WhileLoopOperation
		public RuleCall getWhileLoopOperationParserRuleCall_6() { return cWhileLoopOperationParserRuleCall_6; }
		
		//IfStatementOperation
		public RuleCall getIfStatementOperationParserRuleCall_7() { return cIfStatementOperationParserRuleCall_7; }
		
		//LogStatement
		public RuleCall getLogStatementParserRuleCall_8() { return cLogStatementParserRuleCall_8; }
		
		//ReturnStatement
		public RuleCall getReturnStatementParserRuleCall_9() { return cReturnStatementParserRuleCall_9; }
	}
	public class WhileLoopOperationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.WhileLoopOperation");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cWhileKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cStatementsAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cStatementsStatementOperationParserRuleCall_3_0 = (RuleCall)cStatementsAssignment_3.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		//WhileLoopOperation:
		//	'while' condition=Expression '{' statements+=StatementOperation+ '}';
		@Override public ParserRule getRule() { return rule; }
		
		//'while' condition=Expression '{' statements+=StatementOperation+ '}'
		public Group getGroup() { return cGroup; }
		
		//'while'
		public Keyword getWhileKeyword_0() { return cWhileKeyword_0; }
		
		//condition=Expression
		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
		
		//Expression
		public RuleCall getConditionExpressionParserRuleCall_1_0() { return cConditionExpressionParserRuleCall_1_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
		
		//statements+=StatementOperation+
		public Assignment getStatementsAssignment_3() { return cStatementsAssignment_3; }
		
		//StatementOperation
		public RuleCall getStatementsStatementOperationParserRuleCall_3_0() { return cStatementsStatementOperationParserRuleCall_3_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_4() { return cRightCurlyBracketKeyword_4; }
	}
	public class IfStatementOperationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.IfStatementOperation");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cIfKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cThenStatementsAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cThenStatementsStatementOperationParserRuleCall_3_0 = (RuleCall)cThenStatementsAssignment_3.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
		private final Keyword cElseKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_5_1 = (Keyword)cGroup_5.eContents().get(1);
		private final Assignment cElseStatementsAssignment_5_2 = (Assignment)cGroup_5.eContents().get(2);
		private final RuleCall cElseStatementsStatementOperationParserRuleCall_5_2_0 = (RuleCall)cElseStatementsAssignment_5_2.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_5_3 = (Keyword)cGroup_5.eContents().get(3);
		
		//IfStatementOperation:
		//	'if' condition=Expression '{' thenStatements+=StatementOperation+ '}' ('else' '{' elseStatements+=StatementOperation+
		//	'}')?;
		@Override public ParserRule getRule() { return rule; }
		
		//'if' condition=Expression '{' thenStatements+=StatementOperation+ '}' ('else' '{' elseStatements+=StatementOperation+
		//'}')?
		public Group getGroup() { return cGroup; }
		
		//'if'
		public Keyword getIfKeyword_0() { return cIfKeyword_0; }
		
		//condition=Expression
		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
		
		//Expression
		public RuleCall getConditionExpressionParserRuleCall_1_0() { return cConditionExpressionParserRuleCall_1_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
		
		//thenStatements+=StatementOperation+
		public Assignment getThenStatementsAssignment_3() { return cThenStatementsAssignment_3; }
		
		//StatementOperation
		public RuleCall getThenStatementsStatementOperationParserRuleCall_3_0() { return cThenStatementsStatementOperationParserRuleCall_3_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_4() { return cRightCurlyBracketKeyword_4; }
		
		//('else' '{' elseStatements+=StatementOperation+ '}')?
		public Group getGroup_5() { return cGroup_5; }
		
		//'else'
		public Keyword getElseKeyword_5_0() { return cElseKeyword_5_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_5_1() { return cLeftCurlyBracketKeyword_5_1; }
		
		//elseStatements+=StatementOperation+
		public Assignment getElseStatementsAssignment_5_2() { return cElseStatementsAssignment_5_2; }
		
		//StatementOperation
		public RuleCall getElseStatementsStatementOperationParserRuleCall_5_2_0() { return cElseStatementsStatementOperationParserRuleCall_5_2_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_5_3() { return cRightCurlyBracketKeyword_5_3; }
	}
	public class ReturnStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.ReturnStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cReturnStatementAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cReturnKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cReturnValueAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cReturnValueExpressionParserRuleCall_2_0 = (RuleCall)cReturnValueAssignment_2.eContents().get(0);
		
		//ReturnStatement:
		//	{ReturnStatement} 'return' returnValue=Expression?;
		@Override public ParserRule getRule() { return rule; }
		
		//{ReturnStatement} 'return' returnValue=Expression?
		public Group getGroup() { return cGroup; }
		
		//{ReturnStatement}
		public Action getReturnStatementAction_0() { return cReturnStatementAction_0; }
		
		//'return'
		public Keyword getReturnKeyword_1() { return cReturnKeyword_1; }
		
		//returnValue=Expression?
		public Assignment getReturnValueAssignment_2() { return cReturnValueAssignment_2; }
		
		//Expression
		public RuleCall getReturnValueExpressionParserRuleCall_2_0() { return cReturnValueExpressionParserRuleCall_2_0; }
	}
	public class ActionCodeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.ActionCode");
		private final Assignment cStatementsAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cStatementsStatementParserRuleCall_0 = (RuleCall)cStatementsAssignment.eContents().get(0);
		
		//// action code
		//ActionCode:
		//	statements+=Statement+;
		@Override public ParserRule getRule() { return rule; }
		
		//statements+=Statement+
		public Assignment getStatementsAssignment() { return cStatementsAssignment; }
		
		//Statement
		public RuleCall getStatementsStatementParserRuleCall_0() { return cStatementsStatementParserRuleCall_0; }
	}
	public class StatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Statement");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cSendTriggerParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cVariableParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cInformTimerParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cNoOpParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		private final RuleCall cInvokeParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
		private final RuleCall cAssignmentParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
		private final RuleCall cWhileLoopParserRuleCall_6 = (RuleCall)cAlternatives.eContents().get(6);
		private final RuleCall cIfStatementParserRuleCall_7 = (RuleCall)cAlternatives.eContents().get(7);
		private final RuleCall cLogStatementParserRuleCall_8 = (RuleCall)cAlternatives.eContents().get(8);
		private final RuleCall cChooseStatementParserRuleCall_9 = (RuleCall)cAlternatives.eContents().get(9);
		
		//Statement:
		//	SendTrigger
		//	| Variable
		//	| InformTimer
		//	| NoOp
		//	| Invoke
		//	| Assignment
		//	| WhileLoop
		//	| IfStatement
		//	| LogStatement
		//	| ChooseStatement;
		@Override public ParserRule getRule() { return rule; }
		
		//SendTrigger | Variable | InformTimer | NoOp | Invoke | Assignment | WhileLoop | IfStatement | LogStatement |
		//ChooseStatement
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//SendTrigger
		public RuleCall getSendTriggerParserRuleCall_0() { return cSendTriggerParserRuleCall_0; }
		
		//Variable
		public RuleCall getVariableParserRuleCall_1() { return cVariableParserRuleCall_1; }
		
		//InformTimer
		public RuleCall getInformTimerParserRuleCall_2() { return cInformTimerParserRuleCall_2; }
		
		//NoOp
		public RuleCall getNoOpParserRuleCall_3() { return cNoOpParserRuleCall_3; }
		
		//Invoke
		public RuleCall getInvokeParserRuleCall_4() { return cInvokeParserRuleCall_4; }
		
		//Assignment
		public RuleCall getAssignmentParserRuleCall_5() { return cAssignmentParserRuleCall_5; }
		
		//WhileLoop
		public RuleCall getWhileLoopParserRuleCall_6() { return cWhileLoopParserRuleCall_6; }
		
		//IfStatement
		public RuleCall getIfStatementParserRuleCall_7() { return cIfStatementParserRuleCall_7; }
		
		//LogStatement
		public RuleCall getLogStatementParserRuleCall_8() { return cLogStatementParserRuleCall_8; }
		
		//ChooseStatement
		public RuleCall getChooseStatementParserRuleCall_9() { return cChooseStatementParserRuleCall_9; }
	}
	public class VariableElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Variable");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cVarKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cVarAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cVarLocalVarParserRuleCall_1_0 = (RuleCall)cVarAssignment_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Assignment cAssignAssignment_2_0 = (Assignment)cGroup_2.eContents().get(0);
		private final Keyword cAssignColonEqualsSignKeyword_2_0_0 = (Keyword)cAssignAssignment_2_0.eContents().get(0);
		private final Assignment cExpAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cExpExpressionParserRuleCall_2_1_0 = (RuleCall)cExpAssignment_2_1.eContents().get(0);
		
		//Variable:
		//	'var'
		//	var=LocalVar (assign?=':=' exp=Expression)?;
		@Override public ParserRule getRule() { return rule; }
		
		//'var' var=LocalVar (assign?=':=' exp=Expression)?
		public Group getGroup() { return cGroup; }
		
		//'var'
		public Keyword getVarKeyword_0() { return cVarKeyword_0; }
		
		//var=LocalVar
		public Assignment getVarAssignment_1() { return cVarAssignment_1; }
		
		//LocalVar
		public RuleCall getVarLocalVarParserRuleCall_1_0() { return cVarLocalVarParserRuleCall_1_0; }
		
		//(assign?=':=' exp=Expression)?
		public Group getGroup_2() { return cGroup_2; }
		
		//assign?=':='
		public Assignment getAssignAssignment_2_0() { return cAssignAssignment_2_0; }
		
		//':='
		public Keyword getAssignColonEqualsSignKeyword_2_0_0() { return cAssignColonEqualsSignKeyword_2_0_0; }
		
		//exp=Expression
		public Assignment getExpAssignment_2_1() { return cExpAssignment_2_1; }
		
		//Expression
		public RuleCall getExpExpressionParserRuleCall_2_1_0() { return cExpExpressionParserRuleCall_2_1_0; }
	}
	public class SendTriggerElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.SendTrigger");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cSendKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cTriggersAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cTriggersTrigger_outParserRuleCall_1_0 = (RuleCall)cTriggersAssignment_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cAndKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cTriggersAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cTriggersTrigger_outParserRuleCall_2_1_0 = (RuleCall)cTriggersAssignment_2_1.eContents().get(0);
		
		//SendTrigger:
		//	'send' triggers+=Trigger_out ('and' triggers+=Trigger_out)*;
		@Override public ParserRule getRule() { return rule; }
		
		//'send' triggers+=Trigger_out ('and' triggers+=Trigger_out)*
		public Group getGroup() { return cGroup; }
		
		//'send'
		public Keyword getSendKeyword_0() { return cSendKeyword_0; }
		
		//triggers+=Trigger_out
		public Assignment getTriggersAssignment_1() { return cTriggersAssignment_1; }
		
		//Trigger_out
		public RuleCall getTriggersTrigger_outParserRuleCall_1_0() { return cTriggersTrigger_outParserRuleCall_1_0; }
		
		//('and' triggers+=Trigger_out)*
		public Group getGroup_2() { return cGroup_2; }
		
		//'and'
		public Keyword getAndKeyword_2_0() { return cAndKeyword_2_0; }
		
		//triggers+=Trigger_out
		public Assignment getTriggersAssignment_2_1() { return cTriggersAssignment_2_1; }
		
		//Trigger_out
		public RuleCall getTriggersTrigger_outParserRuleCall_2_1_0() { return cTriggersTrigger_outParserRuleCall_2_1_0; }
	}
	public class InformTimerElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.InformTimer");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cInformKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cTimerPortAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final CrossReference cTimerPortTimerPortCrossReference_1_0 = (CrossReference)cTimerPortAssignment_1.eContents().get(0);
		private final RuleCall cTimerPortTimerPortIDTerminalRuleCall_1_0_1 = (RuleCall)cTimerPortTimerPortCrossReference_1_0.eContents().get(1);
		private final Keyword cInKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cTimeAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cTimeAdditiveExpressionParserRuleCall_3_0 = (RuleCall)cTimeAssignment_3.eContents().get(0);
		
		//InformTimer:
		//	'inform' timerPort=[TimerPort] 'in' time=AdditiveExpression;
		@Override public ParserRule getRule() { return rule; }
		
		//'inform' timerPort=[TimerPort] 'in' time=AdditiveExpression
		public Group getGroup() { return cGroup; }
		
		//'inform'
		public Keyword getInformKeyword_0() { return cInformKeyword_0; }
		
		//timerPort=[TimerPort]
		public Assignment getTimerPortAssignment_1() { return cTimerPortAssignment_1; }
		
		//[TimerPort]
		public CrossReference getTimerPortTimerPortCrossReference_1_0() { return cTimerPortTimerPortCrossReference_1_0; }
		
		//ID
		public RuleCall getTimerPortTimerPortIDTerminalRuleCall_1_0_1() { return cTimerPortTimerPortIDTerminalRuleCall_1_0_1; }
		
		//'in'
		public Keyword getInKeyword_2() { return cInKeyword_2; }
		
		//time=AdditiveExpression
		public Assignment getTimeAssignment_3() { return cTimeAssignment_3; }
		
		//AdditiveExpression
		public RuleCall getTimeAdditiveExpressionParserRuleCall_3_0() { return cTimeAdditiveExpressionParserRuleCall_3_0; }
	}
	public class NoOpElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.NoOp");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cNoOpAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cNoopKeyword_1 = (Keyword)cGroup.eContents().get(1);
		
		//NoOp:
		//	{NoOp} 'noop';
		@Override public ParserRule getRule() { return rule; }
		
		//{NoOp} 'noop'
		public Group getGroup() { return cGroup; }
		
		//{NoOp}
		public Action getNoOpAction_0() { return cNoOpAction_0; }
		
		//'noop'
		public Keyword getNoopKeyword_1() { return cNoopKeyword_1; }
	}
	public class InvokeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Invoke");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cCallKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cOperationAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final CrossReference cOperationOperationCrossReference_1_0 = (CrossReference)cOperationAssignment_1.eContents().get(0);
		private final RuleCall cOperationOperationIDTerminalRuleCall_1_0_1 = (RuleCall)cOperationOperationCrossReference_1_0.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Assignment cParametersAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
		private final RuleCall cParametersExpressionParserRuleCall_3_0_0 = (RuleCall)cParametersAssignment_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 cParametersAssignment_3_1_1 = (Assignment)cGroup_3_1.eContents().get(1);
		private final RuleCall cParametersExpressionParserRuleCall_3_1_1_0 = (RuleCall)cParametersAssignment_3_1_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		//Invoke:
		//	'call' operation=[Operation]
		//	'(' (parameters+=Expression (',' parameters+=Expression)*)?
		//	')';
		@Override public ParserRule getRule() { return rule; }
		
		//'call' operation=[Operation] '(' (parameters+=Expression (',' parameters+=Expression)*)? ')'
		public Group getGroup() { return cGroup; }
		
		//'call'
		public Keyword getCallKeyword_0() { return cCallKeyword_0; }
		
		//operation=[Operation]
		public Assignment getOperationAssignment_1() { return cOperationAssignment_1; }
		
		//[Operation]
		public CrossReference getOperationOperationCrossReference_1_0() { return cOperationOperationCrossReference_1_0; }
		
		//ID
		public RuleCall getOperationOperationIDTerminalRuleCall_1_0_1() { return cOperationOperationIDTerminalRuleCall_1_0_1; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_2() { return cLeftParenthesisKeyword_2; }
		
		//(parameters+=Expression (',' parameters+=Expression)*)?
		public Group getGroup_3() { return cGroup_3; }
		
		//parameters+=Expression
		public Assignment getParametersAssignment_3_0() { return cParametersAssignment_3_0; }
		
		//Expression
		public RuleCall getParametersExpressionParserRuleCall_3_0_0() { return cParametersExpressionParserRuleCall_3_0_0; }
		
		//(',' parameters+=Expression)*
		public Group getGroup_3_1() { return cGroup_3_1; }
		
		//','
		public Keyword getCommaKeyword_3_1_0() { return cCommaKeyword_3_1_0; }
		
		//parameters+=Expression
		public Assignment getParametersAssignment_3_1_1() { return cParametersAssignment_3_1_1; }
		
		//Expression
		public RuleCall getParametersExpressionParserRuleCall_3_1_1_0() { return cParametersExpressionParserRuleCall_3_1_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_4() { return cRightParenthesisKeyword_4; }
	}
	public class AssignmentElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Assignment");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cLvalueAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final CrossReference cLvalueAssignableCrossReference_0_0 = (CrossReference)cLvalueAssignment_0.eContents().get(0);
		private final RuleCall cLvalueAssignableIDTerminalRuleCall_0_0_1 = (RuleCall)cLvalueAssignableCrossReference_0_0.eContents().get(1);
		private final Keyword cColonEqualsSignKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cExpAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cExpExpressionParserRuleCall_2_0 = (RuleCall)cExpAssignment_2.eContents().get(0);
		
		//Assignment:
		//	lvalue=[Assignable] ':=' exp=Expression;
		@Override public ParserRule getRule() { return rule; }
		
		//lvalue=[Assignable] ':=' exp=Expression
		public Group getGroup() { return cGroup; }
		
		//lvalue=[Assignable]
		public Assignment getLvalueAssignment_0() { return cLvalueAssignment_0; }
		
		//[Assignable]
		public CrossReference getLvalueAssignableCrossReference_0_0() { return cLvalueAssignableCrossReference_0_0; }
		
		//ID
		public RuleCall getLvalueAssignableIDTerminalRuleCall_0_0_1() { return cLvalueAssignableIDTerminalRuleCall_0_0_1; }
		
		//':='
		public Keyword getColonEqualsSignKeyword_1() { return cColonEqualsSignKeyword_1; }
		
		//exp=Expression
		public Assignment getExpAssignment_2() { return cExpAssignment_2; }
		
		//Expression
		public RuleCall getExpExpressionParserRuleCall_2_0() { return cExpExpressionParserRuleCall_2_0; }
	}
	public class AssignableElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Assignable");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cLocalVarParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cAttributeParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//Assignable:
		//	LocalVar
		//	| Attribute;
		@Override public ParserRule getRule() { return rule; }
		
		//LocalVar | Attribute
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//LocalVar
		public RuleCall getLocalVarParserRuleCall_0() { return cLocalVarParserRuleCall_0; }
		
		//Attribute
		public RuleCall getAttributeParserRuleCall_1() { return cAttributeParserRuleCall_1; }
	}
	public class WhileLoopElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.WhileLoop");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cWhileKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cStatementsAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cStatementsStatementParserRuleCall_3_0 = (RuleCall)cStatementsAssignment_3.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		//WhileLoop:
		//	'while' condition=Expression '{' statements+=Statement+ '}';
		@Override public ParserRule getRule() { return rule; }
		
		//'while' condition=Expression '{' statements+=Statement+ '}'
		public Group getGroup() { return cGroup; }
		
		//'while'
		public Keyword getWhileKeyword_0() { return cWhileKeyword_0; }
		
		//condition=Expression
		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
		
		//Expression
		public RuleCall getConditionExpressionParserRuleCall_1_0() { return cConditionExpressionParserRuleCall_1_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
		
		//statements+=Statement+
		public Assignment getStatementsAssignment_3() { return cStatementsAssignment_3; }
		
		//Statement
		public RuleCall getStatementsStatementParserRuleCall_3_0() { return cStatementsStatementParserRuleCall_3_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_4() { return cRightCurlyBracketKeyword_4; }
	}
	public class IfStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.IfStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cIfKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cThenStatementsAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cThenStatementsStatementParserRuleCall_3_0 = (RuleCall)cThenStatementsAssignment_3.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
		private final Keyword cElseKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_5_1 = (Keyword)cGroup_5.eContents().get(1);
		private final Assignment cElseStatementsAssignment_5_2 = (Assignment)cGroup_5.eContents().get(2);
		private final RuleCall cElseStatementsStatementParserRuleCall_5_2_0 = (RuleCall)cElseStatementsAssignment_5_2.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_5_3 = (Keyword)cGroup_5.eContents().get(3);
		
		//IfStatement:
		//	'if' condition=Expression '{' thenStatements+=Statement+ '}' ('else' '{' elseStatements+=Statement+ '}')?;
		@Override public ParserRule getRule() { return rule; }
		
		//'if' condition=Expression '{' thenStatements+=Statement+ '}' ('else' '{' elseStatements+=Statement+ '}')?
		public Group getGroup() { return cGroup; }
		
		//'if'
		public Keyword getIfKeyword_0() { return cIfKeyword_0; }
		
		//condition=Expression
		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
		
		//Expression
		public RuleCall getConditionExpressionParserRuleCall_1_0() { return cConditionExpressionParserRuleCall_1_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
		
		//thenStatements+=Statement+
		public Assignment getThenStatementsAssignment_3() { return cThenStatementsAssignment_3; }
		
		//Statement
		public RuleCall getThenStatementsStatementParserRuleCall_3_0() { return cThenStatementsStatementParserRuleCall_3_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_4() { return cRightCurlyBracketKeyword_4; }
		
		//('else' '{' elseStatements+=Statement+ '}')?
		public Group getGroup_5() { return cGroup_5; }
		
		//'else'
		public Keyword getElseKeyword_5_0() { return cElseKeyword_5_0; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_5_1() { return cLeftCurlyBracketKeyword_5_1; }
		
		//elseStatements+=Statement+
		public Assignment getElseStatementsAssignment_5_2() { return cElseStatementsAssignment_5_2; }
		
		//Statement
		public RuleCall getElseStatementsStatementParserRuleCall_5_2_0() { return cElseStatementsStatementParserRuleCall_5_2_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_5_3() { return cRightCurlyBracketKeyword_5_3; }
	}
	public class LogStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.LogStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLogKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cLogPortAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final CrossReference cLogPortLogPortCrossReference_1_0 = (CrossReference)cLogPortAssignment_1.eContents().get(0);
		private final RuleCall cLogPortLogPortIDTerminalRuleCall_1_0_1 = (RuleCall)cLogPortLogPortCrossReference_1_0.eContents().get(1);
		private final Keyword cWithKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cLeftAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cLeftStringExpressionParserRuleCall_3_0 = (RuleCall)cLeftAssignment_3.eContents().get(0);
		
		//LogStatement:
		//	'log' logPort=[LogPort] 'with' left=StringExpression;
		@Override public ParserRule getRule() { return rule; }
		
		//'log' logPort=[LogPort] 'with' left=StringExpression
		public Group getGroup() { return cGroup; }
		
		//'log'
		public Keyword getLogKeyword_0() { return cLogKeyword_0; }
		
		//logPort=[LogPort]
		public Assignment getLogPortAssignment_1() { return cLogPortAssignment_1; }
		
		//[LogPort]
		public CrossReference getLogPortLogPortCrossReference_1_0() { return cLogPortLogPortCrossReference_1_0; }
		
		//ID
		public RuleCall getLogPortLogPortIDTerminalRuleCall_1_0_1() { return cLogPortLogPortIDTerminalRuleCall_1_0_1; }
		
		//'with'
		public Keyword getWithKeyword_2() { return cWithKeyword_2; }
		
		//left=StringExpression
		public Assignment getLeftAssignment_3() { return cLeftAssignment_3; }
		
		//StringExpression
		public RuleCall getLeftStringExpressionParserRuleCall_3_0() { return cLeftStringExpressionParserRuleCall_3_0; }
	}
	public class ChooseStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.ChooseStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cChooseKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cIntVarAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final CrossReference cIntVarLocalVarCrossReference_2_0 = (CrossReference)cIntVarAssignment_2.eContents().get(0);
		private final RuleCall cIntVarLocalVarIDTerminalRuleCall_2_0_1 = (RuleCall)cIntVarLocalVarCrossReference_2_0.eContents().get(1);
		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cIntExpAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cIntExpAdditiveExpressionParserRuleCall_4_0 = (RuleCall)cIntExpAssignment_4.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
		
		///*********************************************************************
		// * New Choose Statement Added to grammar of action code
		// *********************************************************************/ ChooseStatement:
		//	'choose' '(' intVar=[LocalVar] ',' intExp=AdditiveExpression ')';
		@Override public ParserRule getRule() { return rule; }
		
		//'choose' '(' intVar=[LocalVar] ',' intExp=AdditiveExpression ')'
		public Group getGroup() { return cGroup; }
		
		//'choose'
		public Keyword getChooseKeyword_0() { return cChooseKeyword_0; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
		
		//intVar=[LocalVar]
		public Assignment getIntVarAssignment_2() { return cIntVarAssignment_2; }
		
		//[LocalVar]
		public CrossReference getIntVarLocalVarCrossReference_2_0() { return cIntVarLocalVarCrossReference_2_0; }
		
		//ID
		public RuleCall getIntVarLocalVarIDTerminalRuleCall_2_0_1() { return cIntVarLocalVarIDTerminalRuleCall_2_0_1; }
		
		//','
		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }
		
		//intExp=AdditiveExpression
		public Assignment getIntExpAssignment_4() { return cIntExpAssignment_4; }
		
		//AdditiveExpression
		public RuleCall getIntExpAdditiveExpressionParserRuleCall_4_0() { return cIntExpAdditiveExpressionParserRuleCall_4_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_5() { return cRightParenthesisKeyword_5; }
	}
	public class StringExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.StringExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cIndividualExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Group cGroup_1_0 = (Group)cGroup_1.eContents().get(0);
		private final Action cConcatenateExpressionLeftAction_1_0_0 = (Action)cGroup_1_0.eContents().get(0);
		private final Keyword cCircumflexAccentKeyword_1_0_1 = (Keyword)cGroup_1_0.eContents().get(1);
		private final Assignment cRestAssignment_1_0_2 = (Assignment)cGroup_1_0.eContents().get(2);
		private final RuleCall cRestIndividualExpressionParserRuleCall_1_0_2_0 = (RuleCall)cRestAssignment_1_0_2.eContents().get(0);
		
		///*********************************************************************/ StringExpression:
		//	IndividualExpression => ({ConcatenateExpression.left=current} '^'
		//	rest=IndividualExpression)*;
		@Override public ParserRule getRule() { return rule; }
		
		//IndividualExpression => ({ConcatenateExpression.left=current} '^' rest=IndividualExpression)*
		public Group getGroup() { return cGroup; }
		
		//IndividualExpression
		public RuleCall getIndividualExpressionParserRuleCall_0() { return cIndividualExpressionParserRuleCall_0; }
		
		//=> ({ConcatenateExpression.left=current} '^' rest=IndividualExpression)*
		public Group getGroup_1() { return cGroup_1; }
		
		//({ConcatenateExpression.left=current} '^' rest=IndividualExpression)
		public Group getGroup_1_0() { return cGroup_1_0; }
		
		//{ConcatenateExpression.left=current}
		public Action getConcatenateExpressionLeftAction_1_0_0() { return cConcatenateExpressionLeftAction_1_0_0; }
		
		//'^'
		public Keyword getCircumflexAccentKeyword_1_0_1() { return cCircumflexAccentKeyword_1_0_1; }
		
		//rest=IndividualExpression
		public Assignment getRestAssignment_1_0_2() { return cRestAssignment_1_0_2; }
		
		//IndividualExpression
		public RuleCall getRestIndividualExpressionParserRuleCall_1_0_2_0() { return cRestIndividualExpressionParserRuleCall_1_0_2_0; }
	}
	public class IndividualExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.IndividualExpression");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Assignment cExprAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
		private final RuleCall cExprExpressionParserRuleCall_0_0 = (RuleCall)cExprAssignment_0.eContents().get(0);
		private final Assignment cStrAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
		private final RuleCall cStrSTRINGTerminalRuleCall_1_0 = (RuleCall)cStrAssignment_1.eContents().get(0);
		
		//IndividualExpression StringExpression:
		//	expr=Expression | str=STRING;
		@Override public ParserRule getRule() { return rule; }
		
		//expr=Expression | str=STRING
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//expr=Expression
		public Assignment getExprAssignment_0() { return cExprAssignment_0; }
		
		//Expression
		public RuleCall getExprExpressionParserRuleCall_0_0() { return cExprExpressionParserRuleCall_0_0; }
		
		//str=STRING
		public Assignment getStrAssignment_1() { return cStrAssignment_1; }
		
		//STRING
		public RuleCall getStrSTRINGTerminalRuleCall_1_0() { return cStrSTRINGTerminalRuleCall_1_0; }
	}
	public class ExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Expression");
		private final RuleCall cConditionalOrExpressionParserRuleCall = (RuleCall)rule.eContents().get(1);
		
		///*********************************************************************
		// * Expressions
		// *********************************************************************/ Expression:
		//	ConditionalOrExpression;
		@Override public ParserRule getRule() { return rule; }
		
		//ConditionalOrExpression
		public RuleCall getConditionalOrExpressionParserRuleCall() { return cConditionalOrExpressionParserRuleCall; }
	}
	public class ConditionalOrExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.ConditionalOrExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cConditionalAndExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Group cGroup_1_0 = (Group)cGroup_1.eContents().get(0);
		private final Action cConditionalOrExpressionLeftAction_1_0_0 = (Action)cGroup_1_0.eContents().get(0);
		private final Keyword cVerticalLineVerticalLineKeyword_1_0_1 = (Keyword)cGroup_1_0.eContents().get(1);
		private final Assignment cRestAssignment_1_0_2 = (Assignment)cGroup_1_0.eContents().get(2);
		private final RuleCall cRestConditionalAndExpressionParserRuleCall_1_0_2_0 = (RuleCall)cRestAssignment_1_0_2.eContents().get(0);
		
		//ConditionalOrExpression Expression:
		//	ConditionalAndExpression =>
		//	({ConditionalOrExpression.left=current} '||'
		//	rest=ConditionalAndExpression)*;
		@Override public ParserRule getRule() { return rule; }
		
		//ConditionalAndExpression => ({ConditionalOrExpression.left=current} '||' rest=ConditionalAndExpression)*
		public Group getGroup() { return cGroup; }
		
		//ConditionalAndExpression
		public RuleCall getConditionalAndExpressionParserRuleCall_0() { return cConditionalAndExpressionParserRuleCall_0; }
		
		//=> ({ConditionalOrExpression.left=current} '||' rest=ConditionalAndExpression)*
		public Group getGroup_1() { return cGroup_1; }
		
		//({ConditionalOrExpression.left=current} '||' rest=ConditionalAndExpression)
		public Group getGroup_1_0() { return cGroup_1_0; }
		
		//{ConditionalOrExpression.left=current}
		public Action getConditionalOrExpressionLeftAction_1_0_0() { return cConditionalOrExpressionLeftAction_1_0_0; }
		
		//'||'
		public Keyword getVerticalLineVerticalLineKeyword_1_0_1() { return cVerticalLineVerticalLineKeyword_1_0_1; }
		
		//rest=ConditionalAndExpression
		public Assignment getRestAssignment_1_0_2() { return cRestAssignment_1_0_2; }
		
		//ConditionalAndExpression
		public RuleCall getRestConditionalAndExpressionParserRuleCall_1_0_2_0() { return cRestConditionalAndExpressionParserRuleCall_1_0_2_0; }
	}
	public class ConditionalAndExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.ConditionalAndExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cRelationalOpExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Group cGroup_1_0 = (Group)cGroup_1.eContents().get(0);
		private final Action cConditionalAndExpressionLeftAction_1_0_0 = (Action)cGroup_1_0.eContents().get(0);
		private final Keyword cAmpersandAmpersandKeyword_1_0_1 = (Keyword)cGroup_1_0.eContents().get(1);
		private final Assignment cRestAssignment_1_0_2 = (Assignment)cGroup_1_0.eContents().get(2);
		private final RuleCall cRestRelationalOpExpressionParserRuleCall_1_0_2_0 = (RuleCall)cRestAssignment_1_0_2.eContents().get(0);
		
		//ConditionalAndExpression Expression:
		//	RelationalOpExpression =>
		//	({ConditionalAndExpression.left=current} '&&'
		//	rest=RelationalOpExpression)*;
		@Override public ParserRule getRule() { return rule; }
		
		//RelationalOpExpression => ({ConditionalAndExpression.left=current} '&&' rest=RelationalOpExpression)*
		public Group getGroup() { return cGroup; }
		
		//RelationalOpExpression
		public RuleCall getRelationalOpExpressionParserRuleCall_0() { return cRelationalOpExpressionParserRuleCall_0; }
		
		//=> ({ConditionalAndExpression.left=current} '&&' rest=RelationalOpExpression)*
		public Group getGroup_1() { return cGroup_1; }
		
		//({ConditionalAndExpression.left=current} '&&' rest=RelationalOpExpression)
		public Group getGroup_1_0() { return cGroup_1_0; }
		
		//{ConditionalAndExpression.left=current}
		public Action getConditionalAndExpressionLeftAction_1_0_0() { return cConditionalAndExpressionLeftAction_1_0_0; }
		
		//'&&'
		public Keyword getAmpersandAmpersandKeyword_1_0_1() { return cAmpersandAmpersandKeyword_1_0_1; }
		
		//rest=RelationalOpExpression
		public Assignment getRestAssignment_1_0_2() { return cRestAssignment_1_0_2; }
		
		//RelationalOpExpression
		public RuleCall getRestRelationalOpExpressionParserRuleCall_1_0_2_0() { return cRestRelationalOpExpressionParserRuleCall_1_0_2_0; }
	}
	public class RelationalOpExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.RelationalOpExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cAdditiveExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Group cGroup_1_0 = (Group)cGroup_1.eContents().get(0);
		private final Alternatives cAlternatives_1_0_0 = (Alternatives)cGroup_1_0.eContents().get(0);
		private final Group cGroup_1_0_0_0 = (Group)cAlternatives_1_0_0.eContents().get(0);
		private final Action cLessThanOrEqualLeftAction_1_0_0_0_0 = (Action)cGroup_1_0_0_0.eContents().get(0);
		private final Keyword cLessThanSignEqualsSignKeyword_1_0_0_0_1 = (Keyword)cGroup_1_0_0_0.eContents().get(1);
		private final Group cGroup_1_0_0_1 = (Group)cAlternatives_1_0_0.eContents().get(1);
		private final Action cLessThanLeftAction_1_0_0_1_0 = (Action)cGroup_1_0_0_1.eContents().get(0);
		private final Keyword cLessThanSignKeyword_1_0_0_1_1 = (Keyword)cGroup_1_0_0_1.eContents().get(1);
		private final Group cGroup_1_0_0_2 = (Group)cAlternatives_1_0_0.eContents().get(2);
		private final Action cGreaterThanOrEqualLeftAction_1_0_0_2_0 = (Action)cGroup_1_0_0_2.eContents().get(0);
		private final Keyword cGreaterThanSignEqualsSignKeyword_1_0_0_2_1 = (Keyword)cGroup_1_0_0_2.eContents().get(1);
		private final Group cGroup_1_0_0_3 = (Group)cAlternatives_1_0_0.eContents().get(3);
		private final Action cGreaterThanLeftAction_1_0_0_3_0 = (Action)cGroup_1_0_0_3.eContents().get(0);
		private final Keyword cGreaterThanSignKeyword_1_0_0_3_1 = (Keyword)cGroup_1_0_0_3.eContents().get(1);
		private final Group cGroup_1_0_0_4 = (Group)cAlternatives_1_0_0.eContents().get(4);
		private final Action cEqualLeftAction_1_0_0_4_0 = (Action)cGroup_1_0_0_4.eContents().get(0);
		private final Keyword cEqualsSignEqualsSignKeyword_1_0_0_4_1 = (Keyword)cGroup_1_0_0_4.eContents().get(1);
		private final Group cGroup_1_0_0_5 = (Group)cAlternatives_1_0_0.eContents().get(5);
		private final Action cNotEqualLeftAction_1_0_0_5_0 = (Action)cGroup_1_0_0_5.eContents().get(0);
		private final Keyword cExclamationMarkEqualsSignKeyword_1_0_0_5_1 = (Keyword)cGroup_1_0_0_5.eContents().get(1);
		private final Assignment cRestAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cRestAdditiveExpressionParserRuleCall_1_1_0 = (RuleCall)cRestAssignment_1_1.eContents().get(0);
		
		//RelationalOpExpression Expression:
		//	AdditiveExpression (=>
		//	({LessThanOrEqual.left=current} "<="
		//	| {LessThan.left=current} "<"
		//	| {GreaterThanOrEqual.left=current} ">="
		//	| {GreaterThan.left=current} ">"
		//	| {Equal.left=current} "=="
		//	| {NotEqual.left=current} "!=") rest=AdditiveExpression)*;
		@Override public ParserRule getRule() { return rule; }
		
		//AdditiveExpression (=> ({LessThanOrEqual.left=current} "<=" | {LessThan.left=current} "<" |
		//{GreaterThanOrEqual.left=current} ">=" | {GreaterThan.left=current} ">" | {Equal.left=current} "==" |
		//{NotEqual.left=current} "!=") rest=AdditiveExpression)*
		public Group getGroup() { return cGroup; }
		
		//AdditiveExpression
		public RuleCall getAdditiveExpressionParserRuleCall_0() { return cAdditiveExpressionParserRuleCall_0; }
		
		//(=> ({LessThanOrEqual.left=current} "<=" | {LessThan.left=current} "<" | {GreaterThanOrEqual.left=current} ">=" |
		//{GreaterThan.left=current} ">" | {Equal.left=current} "==" | {NotEqual.left=current} "!=") rest=AdditiveExpression)*
		public Group getGroup_1() { return cGroup_1; }
		
		//=> ({LessThanOrEqual.left=current} "<=" | {LessThan.left=current} "<" | {GreaterThanOrEqual.left=current} ">=" |
		//{GreaterThan.left=current} ">" | {Equal.left=current} "==" | {NotEqual.left=current} "!=")
		public Group getGroup_1_0() { return cGroup_1_0; }
		
		//({LessThanOrEqual.left=current} "<=" | {LessThan.left=current} "<" | {GreaterThanOrEqual.left=current} ">=" |
		//{GreaterThan.left=current} ">" | {Equal.left=current} "==" | {NotEqual.left=current} "!=")
		public Alternatives getAlternatives_1_0_0() { return cAlternatives_1_0_0; }
		
		//{LessThanOrEqual.left=current} "<="
		public Group getGroup_1_0_0_0() { return cGroup_1_0_0_0; }
		
		//{LessThanOrEqual.left=current}
		public Action getLessThanOrEqualLeftAction_1_0_0_0_0() { return cLessThanOrEqualLeftAction_1_0_0_0_0; }
		
		//"<="
		public Keyword getLessThanSignEqualsSignKeyword_1_0_0_0_1() { return cLessThanSignEqualsSignKeyword_1_0_0_0_1; }
		
		//{LessThan.left=current} "<"
		public Group getGroup_1_0_0_1() { return cGroup_1_0_0_1; }
		
		//{LessThan.left=current}
		public Action getLessThanLeftAction_1_0_0_1_0() { return cLessThanLeftAction_1_0_0_1_0; }
		
		//"<"
		public Keyword getLessThanSignKeyword_1_0_0_1_1() { return cLessThanSignKeyword_1_0_0_1_1; }
		
		//{GreaterThanOrEqual.left=current} ">="
		public Group getGroup_1_0_0_2() { return cGroup_1_0_0_2; }
		
		//{GreaterThanOrEqual.left=current}
		public Action getGreaterThanOrEqualLeftAction_1_0_0_2_0() { return cGreaterThanOrEqualLeftAction_1_0_0_2_0; }
		
		//">="
		public Keyword getGreaterThanSignEqualsSignKeyword_1_0_0_2_1() { return cGreaterThanSignEqualsSignKeyword_1_0_0_2_1; }
		
		//{GreaterThan.left=current} ">"
		public Group getGroup_1_0_0_3() { return cGroup_1_0_0_3; }
		
		//{GreaterThan.left=current}
		public Action getGreaterThanLeftAction_1_0_0_3_0() { return cGreaterThanLeftAction_1_0_0_3_0; }
		
		//">"
		public Keyword getGreaterThanSignKeyword_1_0_0_3_1() { return cGreaterThanSignKeyword_1_0_0_3_1; }
		
		//{Equal.left=current} "=="
		public Group getGroup_1_0_0_4() { return cGroup_1_0_0_4; }
		
		//{Equal.left=current}
		public Action getEqualLeftAction_1_0_0_4_0() { return cEqualLeftAction_1_0_0_4_0; }
		
		//"=="
		public Keyword getEqualsSignEqualsSignKeyword_1_0_0_4_1() { return cEqualsSignEqualsSignKeyword_1_0_0_4_1; }
		
		//{NotEqual.left=current} "!="
		public Group getGroup_1_0_0_5() { return cGroup_1_0_0_5; }
		
		//{NotEqual.left=current}
		public Action getNotEqualLeftAction_1_0_0_5_0() { return cNotEqualLeftAction_1_0_0_5_0; }
		
		//"!="
		public Keyword getExclamationMarkEqualsSignKeyword_1_0_0_5_1() { return cExclamationMarkEqualsSignKeyword_1_0_0_5_1; }
		
		//rest=AdditiveExpression
		public Assignment getRestAssignment_1_1() { return cRestAssignment_1_1; }
		
		//AdditiveExpression
		public RuleCall getRestAdditiveExpressionParserRuleCall_1_1_0() { return cRestAdditiveExpressionParserRuleCall_1_1_0; }
	}
	public class AdditiveExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.AdditiveExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cMultiplicativeExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Group cGroup_1_0 = (Group)cGroup_1.eContents().get(0);
		private final Alternatives cAlternatives_1_0_0 = (Alternatives)cGroup_1_0.eContents().get(0);
		private final Group cGroup_1_0_0_0 = (Group)cAlternatives_1_0_0.eContents().get(0);
		private final Action cPlusLeftAction_1_0_0_0_0 = (Action)cGroup_1_0_0_0.eContents().get(0);
		private final Keyword cPlusSignKeyword_1_0_0_0_1 = (Keyword)cGroup_1_0_0_0.eContents().get(1);
		private final Group cGroup_1_0_0_1 = (Group)cAlternatives_1_0_0.eContents().get(1);
		private final Action cMinusLeftAction_1_0_0_1_0 = (Action)cGroup_1_0_0_1.eContents().get(0);
		private final Keyword cHyphenMinusKeyword_1_0_0_1_1 = (Keyword)cGroup_1_0_0_1.eContents().get(1);
		private final Assignment cRestAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cRestMultiplicativeExpressionParserRuleCall_1_1_0 = (RuleCall)cRestAssignment_1_1.eContents().get(0);
		
		//AdditiveExpression Expression:
		//	MultiplicativeExpression (=> ({Plus.left=current} '+'
		//	| {Minus.left=current} '-') rest=MultiplicativeExpression)*;
		@Override public ParserRule getRule() { return rule; }
		
		//MultiplicativeExpression (=> ({Plus.left=current} '+' | {Minus.left=current} '-') rest=MultiplicativeExpression)*
		public Group getGroup() { return cGroup; }
		
		//MultiplicativeExpression
		public RuleCall getMultiplicativeExpressionParserRuleCall_0() { return cMultiplicativeExpressionParserRuleCall_0; }
		
		//(=> ({Plus.left=current} '+' | {Minus.left=current} '-') rest=MultiplicativeExpression)*
		public Group getGroup_1() { return cGroup_1; }
		
		//=> ({Plus.left=current} '+' | {Minus.left=current} '-')
		public Group getGroup_1_0() { return cGroup_1_0; }
		
		//({Plus.left=current} '+' | {Minus.left=current} '-')
		public Alternatives getAlternatives_1_0_0() { return cAlternatives_1_0_0; }
		
		//{Plus.left=current} '+'
		public Group getGroup_1_0_0_0() { return cGroup_1_0_0_0; }
		
		//{Plus.left=current}
		public Action getPlusLeftAction_1_0_0_0_0() { return cPlusLeftAction_1_0_0_0_0; }
		
		//'+'
		public Keyword getPlusSignKeyword_1_0_0_0_1() { return cPlusSignKeyword_1_0_0_0_1; }
		
		//{Minus.left=current} '-'
		public Group getGroup_1_0_0_1() { return cGroup_1_0_0_1; }
		
		//{Minus.left=current}
		public Action getMinusLeftAction_1_0_0_1_0() { return cMinusLeftAction_1_0_0_1_0; }
		
		//'-'
		public Keyword getHyphenMinusKeyword_1_0_0_1_1() { return cHyphenMinusKeyword_1_0_0_1_1; }
		
		//rest=MultiplicativeExpression
		public Assignment getRestAssignment_1_1() { return cRestAssignment_1_1; }
		
		//MultiplicativeExpression
		public RuleCall getRestMultiplicativeExpressionParserRuleCall_1_1_0() { return cRestMultiplicativeExpressionParserRuleCall_1_1_0; }
	}
	public class MultiplicativeExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.MultiplicativeExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cUnaryExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Group cGroup_1_0 = (Group)cGroup_1.eContents().get(0);
		private final Alternatives cAlternatives_1_0_0 = (Alternatives)cGroup_1_0.eContents().get(0);
		private final Group cGroup_1_0_0_0 = (Group)cAlternatives_1_0_0.eContents().get(0);
		private final Action cMultiplyLeftAction_1_0_0_0_0 = (Action)cGroup_1_0_0_0.eContents().get(0);
		private final Keyword cAsteriskKeyword_1_0_0_0_1 = (Keyword)cGroup_1_0_0_0.eContents().get(1);
		private final Group cGroup_1_0_0_1 = (Group)cAlternatives_1_0_0.eContents().get(1);
		private final Action cDivideLeftAction_1_0_0_1_0 = (Action)cGroup_1_0_0_1.eContents().get(0);
		private final Keyword cSolidusKeyword_1_0_0_1_1 = (Keyword)cGroup_1_0_0_1.eContents().get(1);
		private final Group cGroup_1_0_0_2 = (Group)cAlternatives_1_0_0.eContents().get(2);
		private final Action cModuloLeftAction_1_0_0_2_0 = (Action)cGroup_1_0_0_2.eContents().get(0);
		private final Keyword cPercentSignKeyword_1_0_0_2_1 = (Keyword)cGroup_1_0_0_2.eContents().get(1);
		private final Assignment cRestAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cRestUnaryExpressionParserRuleCall_1_1_0 = (RuleCall)cRestAssignment_1_1.eContents().get(0);
		
		//MultiplicativeExpression Expression:
		//	UnaryExpression (=> ({Multiply.left=current} '*'
		//	| {Divide.left=current} '/'
		//	| {Modulo.left=current} '%') rest=UnaryExpression)*;
		@Override public ParserRule getRule() { return rule; }
		
		//UnaryExpression (=> ({Multiply.left=current} '*' | {Divide.left=current} '/' | {Modulo.left=current} '%')
		//rest=UnaryExpression)*
		public Group getGroup() { return cGroup; }
		
		//UnaryExpression
		public RuleCall getUnaryExpressionParserRuleCall_0() { return cUnaryExpressionParserRuleCall_0; }
		
		//(=> ({Multiply.left=current} '*' | {Divide.left=current} '/' | {Modulo.left=current} '%') rest=UnaryExpression)*
		public Group getGroup_1() { return cGroup_1; }
		
		//=> ({Multiply.left=current} '*' | {Divide.left=current} '/' | {Modulo.left=current} '%')
		public Group getGroup_1_0() { return cGroup_1_0; }
		
		//({Multiply.left=current} '*' | {Divide.left=current} '/' | {Modulo.left=current} '%')
		public Alternatives getAlternatives_1_0_0() { return cAlternatives_1_0_0; }
		
		//{Multiply.left=current} '*'
		public Group getGroup_1_0_0_0() { return cGroup_1_0_0_0; }
		
		//{Multiply.left=current}
		public Action getMultiplyLeftAction_1_0_0_0_0() { return cMultiplyLeftAction_1_0_0_0_0; }
		
		//'*'
		public Keyword getAsteriskKeyword_1_0_0_0_1() { return cAsteriskKeyword_1_0_0_0_1; }
		
		//{Divide.left=current} '/'
		public Group getGroup_1_0_0_1() { return cGroup_1_0_0_1; }
		
		//{Divide.left=current}
		public Action getDivideLeftAction_1_0_0_1_0() { return cDivideLeftAction_1_0_0_1_0; }
		
		//'/'
		public Keyword getSolidusKeyword_1_0_0_1_1() { return cSolidusKeyword_1_0_0_1_1; }
		
		//{Modulo.left=current} '%'
		public Group getGroup_1_0_0_2() { return cGroup_1_0_0_2; }
		
		//{Modulo.left=current}
		public Action getModuloLeftAction_1_0_0_2_0() { return cModuloLeftAction_1_0_0_2_0; }
		
		//'%'
		public Keyword getPercentSignKeyword_1_0_0_2_1() { return cPercentSignKeyword_1_0_0_2_1; }
		
		//rest=UnaryExpression
		public Assignment getRestAssignment_1_1() { return cRestAssignment_1_1; }
		
		//UnaryExpression
		public RuleCall getRestUnaryExpressionParserRuleCall_1_1_0() { return cRestUnaryExpressionParserRuleCall_1_1_0; }
	}
	public class UnaryExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.UnaryExpression");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cUnaryExpressionNotPlusMinusParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Action cUnaryExpressionAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cHyphenMinusKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cExpAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cExpUnaryExpressionParserRuleCall_1_2_0 = (RuleCall)cExpAssignment_1_2.eContents().get(0);
		
		//UnaryExpression Expression:
		//	UnaryExpressionNotPlusMinus
		//	| {UnaryExpression} '-' exp=UnaryExpression;
		@Override public ParserRule getRule() { return rule; }
		
		//UnaryExpressionNotPlusMinus | {UnaryExpression} '-' exp=UnaryExpression
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//UnaryExpressionNotPlusMinus
		public RuleCall getUnaryExpressionNotPlusMinusParserRuleCall_0() { return cUnaryExpressionNotPlusMinusParserRuleCall_0; }
		
		//{UnaryExpression} '-' exp=UnaryExpression
		public Group getGroup_1() { return cGroup_1; }
		
		//{UnaryExpression}
		public Action getUnaryExpressionAction_1_0() { return cUnaryExpressionAction_1_0; }
		
		//'-'
		public Keyword getHyphenMinusKeyword_1_1() { return cHyphenMinusKeyword_1_1; }
		
		//exp=UnaryExpression
		public Assignment getExpAssignment_1_2() { return cExpAssignment_1_2; }
		
		//UnaryExpression
		public RuleCall getExpUnaryExpressionParserRuleCall_1_2_0() { return cExpUnaryExpressionParserRuleCall_1_2_0; }
	}
	public class UnaryExpressionNotPlusMinusElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.UnaryExpressionNotPlusMinus");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cNotBooleanExpressionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cPrimaryExpressionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//UnaryExpressionNotPlusMinus Expression:
		//	NotBooleanExpression
		//	| PrimaryExpression;
		@Override public ParserRule getRule() { return rule; }
		
		//NotBooleanExpression | PrimaryExpression
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//NotBooleanExpression
		public RuleCall getNotBooleanExpressionParserRuleCall_0() { return cNotBooleanExpressionParserRuleCall_0; }
		
		//PrimaryExpression
		public RuleCall getPrimaryExpressionParserRuleCall_1() { return cPrimaryExpressionParserRuleCall_1; }
	}
	public class NotBooleanExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.NotBooleanExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cExclamationMarkKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cExpAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cExpUnaryExpressionParserRuleCall_1_0 = (RuleCall)cExpAssignment_1.eContents().get(0);
		
		//NotBooleanExpression:
		//	'!' exp=UnaryExpression;
		@Override public ParserRule getRule() { return rule; }
		
		//'!' exp=UnaryExpression
		public Group getGroup() { return cGroup; }
		
		//'!'
		public Keyword getExclamationMarkKeyword_0() { return cExclamationMarkKeyword_0; }
		
		//exp=UnaryExpression
		public Assignment getExpAssignment_1() { return cExpAssignment_1; }
		
		//UnaryExpression
		public RuleCall getExpUnaryExpressionParserRuleCall_1_0() { return cExpUnaryExpressionParserRuleCall_1_0; }
	}
	public class PrimaryExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.PrimaryExpression");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cLiteralOrIdentifierParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final RuleCall cExpressionParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
		private final Keyword cRightParenthesisKeyword_1_2 = (Keyword)cGroup_1.eContents().get(2);
		
		//PrimaryExpression Expression:
		//	LiteralOrIdentifier
		//	| '(' Expression ')';
		@Override public ParserRule getRule() { return rule; }
		
		//LiteralOrIdentifier | '(' Expression ')'
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//LiteralOrIdentifier
		public RuleCall getLiteralOrIdentifierParserRuleCall_0() { return cLiteralOrIdentifierParserRuleCall_0; }
		
		//'(' Expression ')'
		public Group getGroup_1() { return cGroup_1; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_1_0() { return cLeftParenthesisKeyword_1_0; }
		
		//Expression
		public RuleCall getExpressionParserRuleCall_1_1() { return cExpressionParserRuleCall_1_1; }
		
		//')'
		public Keyword getRightParenthesisKeyword_1_2() { return cRightParenthesisKeyword_1_2; }
	}
	public class LiteralOrIdentifierElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.LiteralOrIdentifier");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cLiteralParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cIdentifierParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//LiteralOrIdentifier Expression:
		//	Literal
		//	| Identifier;
		@Override public ParserRule getRule() { return rule; }
		
		//Literal | Identifier
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//Literal
		public RuleCall getLiteralParserRuleCall_0() { return cLiteralParserRuleCall_0; }
		
		//Identifier
		public RuleCall getIdentifierParserRuleCall_1() { return cIdentifierParserRuleCall_1; }
	}
	public class LiteralElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Literal");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cIntLiteralParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cBoolLiteralParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cFunctionCallParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		
		//Literal:
		//	IntLiteral
		//	| BoolLiteral
		//	| FunctionCall;
		@Override public ParserRule getRule() { return rule; }
		
		//IntLiteral | BoolLiteral | FunctionCall
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//IntLiteral
		public RuleCall getIntLiteralParserRuleCall_0() { return cIntLiteralParserRuleCall_0; }
		
		//BoolLiteral
		public RuleCall getBoolLiteralParserRuleCall_1() { return cBoolLiteralParserRuleCall_1; }
		
		//FunctionCall
		public RuleCall getFunctionCallParserRuleCall_2() { return cFunctionCallParserRuleCall_2; }
	}
	public class IntLiteralElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.IntLiteral");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cIntLiteralAction_0 = (Action)cGroup.eContents().get(0);
		private final Assignment cIntAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cIntINTTerminalRuleCall_1_0 = (RuleCall)cIntAssignment_1.eContents().get(0);
		
		//IntLiteral:
		//	{IntLiteral} int=INT;
		@Override public ParserRule getRule() { return rule; }
		
		//{IntLiteral} int=INT
		public Group getGroup() { return cGroup; }
		
		//{IntLiteral}
		public Action getIntLiteralAction_0() { return cIntLiteralAction_0; }
		
		//int=INT
		public Assignment getIntAssignment_1() { return cIntAssignment_1; }
		
		//INT
		public RuleCall getIntINTTerminalRuleCall_1_0() { return cIntINTTerminalRuleCall_1_0; }
	}
	public class IdentifierElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Identifier");
		private final Assignment cIdAssignment = (Assignment)rule.eContents().get(1);
		private final CrossReference cIdIdentifiableCrossReference_0 = (CrossReference)cIdAssignment.eContents().get(0);
		private final RuleCall cIdIdentifiableIDTerminalRuleCall_0_1 = (RuleCall)cIdIdentifiableCrossReference_0.eContents().get(1);
		
		//Identifier:
		//	id=[Identifiable];
		@Override public ParserRule getRule() { return rule; }
		
		//id=[Identifiable]
		public Assignment getIdAssignment() { return cIdAssignment; }
		
		//[Identifiable]
		public CrossReference getIdIdentifiableCrossReference_0() { return cIdIdentifiableCrossReference_0; }
		
		//ID
		public RuleCall getIdIdentifiableIDTerminalRuleCall_0_1() { return cIdIdentifiableIDTerminalRuleCall_0_1; }
	}
	public class IdentifiableElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.Identifiable");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cAssignableParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cIncomingVariableParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//Identifiable:
		//	Assignable
		//	| IncomingVariable;
		@Override public ParserRule getRule() { return rule; }
		
		//Assignable | IncomingVariable
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//Assignable
		public RuleCall getAssignableParserRuleCall_0() { return cAssignableParserRuleCall_0; }
		
		//IncomingVariable
		public RuleCall getIncomingVariableParserRuleCall_1() { return cIncomingVariableParserRuleCall_1; }
	}
	public class FunctionCallElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.FunctionCall");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cFunctionCallAction_0 = (Action)cGroup.eContents().get(0);
		private final Assignment cCallAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final CrossReference cCallOperationCrossReference_1_0 = (CrossReference)cCallAssignment_1.eContents().get(0);
		private final RuleCall cCallOperationIDTerminalRuleCall_1_0_1 = (RuleCall)cCallOperationCrossReference_1_0.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Assignment cParamsAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
		private final RuleCall cParamsExpressionParserRuleCall_3_0_0 = (RuleCall)cParamsAssignment_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 cParamsAssignment_3_1_1 = (Assignment)cGroup_3_1.eContents().get(1);
		private final RuleCall cParamsExpressionParserRuleCall_3_1_1_0 = (RuleCall)cParamsAssignment_3_1_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		//FunctionCall:
		//	{FunctionCall} call=[Operation]
		//	'(' (params+=Expression (',' params+=Expression)*)?
		//	')';
		@Override public ParserRule getRule() { return rule; }
		
		//{FunctionCall} call=[Operation] '(' (params+=Expression (',' params+=Expression)*)? ')'
		public Group getGroup() { return cGroup; }
		
		//{FunctionCall}
		public Action getFunctionCallAction_0() { return cFunctionCallAction_0; }
		
		//call=[Operation]
		public Assignment getCallAssignment_1() { return cCallAssignment_1; }
		
		//[Operation]
		public CrossReference getCallOperationCrossReference_1_0() { return cCallOperationCrossReference_1_0; }
		
		//ID
		public RuleCall getCallOperationIDTerminalRuleCall_1_0_1() { return cCallOperationIDTerminalRuleCall_1_0_1; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_2() { return cLeftParenthesisKeyword_2; }
		
		//(params+=Expression (',' params+=Expression)*)?
		public Group getGroup_3() { return cGroup_3; }
		
		//params+=Expression
		public Assignment getParamsAssignment_3_0() { return cParamsAssignment_3_0; }
		
		//Expression
		public RuleCall getParamsExpressionParserRuleCall_3_0_0() { return cParamsExpressionParserRuleCall_3_0_0; }
		
		//(',' params+=Expression)*
		public Group getGroup_3_1() { return cGroup_3_1; }
		
		//','
		public Keyword getCommaKeyword_3_1_0() { return cCommaKeyword_3_1_0; }
		
		//params+=Expression
		public Assignment getParamsAssignment_3_1_1() { return cParamsAssignment_3_1_1; }
		
		//Expression
		public RuleCall getParamsExpressionParserRuleCall_3_1_1_0() { return cParamsExpressionParserRuleCall_3_1_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_4() { return cRightParenthesisKeyword_4; }
	}
	public class BoolLiteralElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.BoolLiteral");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cBoolLiteralAction_0 = (Action)cGroup.eContents().get(0);
		private final Assignment cTrueAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cTrueBOOLEANTerminalRuleCall_1_0 = (RuleCall)cTrueAssignment_1.eContents().get(0);
		
		//BoolLiteral:
		//	{BoolLiteral} true=BOOLEAN;
		@Override public ParserRule getRule() { return rule; }
		
		//{BoolLiteral} true=BOOLEAN
		public Group getGroup() { return cGroup; }
		
		//{BoolLiteral}
		public Action getBoolLiteralAction_0() { return cBoolLiteralAction_0; }
		
		//true=BOOLEAN
		public Assignment getTrueAssignment_1() { return cTrueAssignment_1; }
		
		//BOOLEAN
		public RuleCall getTrueBOOLEANTerminalRuleCall_1_0() { return cTrueBOOLEANTerminalRuleCall_1_0; }
	}
	
	
	private final ModelElements pModel;
	private final LocalVarElements pLocalVar;
	private final AttributeElements pAttribute;
	private final ProtocolElements pProtocol;
	private final SignalElements pSignal;
	private final CapsuleElements pCapsule;
	private final OperationElements pOperation;
	private final TimerPortElements pTimerPort;
	private final LogPortElements pLogPort;
	private final PortElements pPort;
	private final ConnectorElements pConnector;
	private final CapsuleInstElements pCapsuleInst;
	private final StateMachineElements pStateMachine;
	private final State_Elements pState_;
	private final TransitionElements pTransition;
	private final Trigger_inElements pTrigger_in;
	private final IncomingVariableElements pIncomingVariable;
	private final Trigger_outElements pTrigger_out;
	private final OperationCodeElements pOperationCode;
	private final StatementOperationElements pStatementOperation;
	private final WhileLoopOperationElements pWhileLoopOperation;
	private final IfStatementOperationElements pIfStatementOperation;
	private final ReturnStatementElements pReturnStatement;
	private final ActionCodeElements pActionCode;
	private final StatementElements pStatement;
	private final VariableElements pVariable;
	private final SendTriggerElements pSendTrigger;
	private final InformTimerElements pInformTimer;
	private final NoOpElements pNoOp;
	private final InvokeElements pInvoke;
	private final AssignmentElements pAssignment;
	private final AssignableElements pAssignable;
	private final WhileLoopElements pWhileLoop;
	private final IfStatementElements pIfStatement;
	private final LogStatementElements pLogStatement;
	private final ChooseStatementElements pChooseStatement;
	private final StringExpressionElements pStringExpression;
	private final IndividualExpressionElements pIndividualExpression;
	private final ExpressionElements pExpression;
	private final ConditionalOrExpressionElements pConditionalOrExpression;
	private final ConditionalAndExpressionElements pConditionalAndExpression;
	private final RelationalOpExpressionElements pRelationalOpExpression;
	private final AdditiveExpressionElements pAdditiveExpression;
	private final MultiplicativeExpressionElements pMultiplicativeExpression;
	private final UnaryExpressionElements pUnaryExpression;
	private final UnaryExpressionNotPlusMinusElements pUnaryExpressionNotPlusMinus;
	private final NotBooleanExpressionElements pNotBooleanExpression;
	private final PrimaryExpressionElements pPrimaryExpression;
	private final LiteralOrIdentifierElements pLiteralOrIdentifier;
	private final LiteralElements pLiteral;
	private final IntLiteralElements pIntLiteral;
	private final IdentifierElements pIdentifier;
	private final IdentifiableElements pIdentifiable;
	private final FunctionCallElements pFunctionCall;
	private final BoolLiteralElements pBoolLiteral;
	private final TerminalRule tBOOLEAN;
	
	private final Grammar grammar;
	
	private final TerminalsGrammarAccess gaTerminals;

	@Inject
	public UrmlGrammarAccess(GrammarProvider grammarProvider,
			TerminalsGrammarAccess gaTerminals) {
		this.grammar = internalFindGrammar(grammarProvider);
		this.gaTerminals = gaTerminals;
		this.pModel = new ModelElements();
		this.pLocalVar = new LocalVarElements();
		this.pAttribute = new AttributeElements();
		this.pProtocol = new ProtocolElements();
		this.pSignal = new SignalElements();
		this.pCapsule = new CapsuleElements();
		this.pOperation = new OperationElements();
		this.pTimerPort = new TimerPortElements();
		this.pLogPort = new LogPortElements();
		this.pPort = new PortElements();
		this.pConnector = new ConnectorElements();
		this.pCapsuleInst = new CapsuleInstElements();
		this.pStateMachine = new StateMachineElements();
		this.pState_ = new State_Elements();
		this.pTransition = new TransitionElements();
		this.pTrigger_in = new Trigger_inElements();
		this.pIncomingVariable = new IncomingVariableElements();
		this.pTrigger_out = new Trigger_outElements();
		this.pOperationCode = new OperationCodeElements();
		this.pStatementOperation = new StatementOperationElements();
		this.pWhileLoopOperation = new WhileLoopOperationElements();
		this.pIfStatementOperation = new IfStatementOperationElements();
		this.pReturnStatement = new ReturnStatementElements();
		this.pActionCode = new ActionCodeElements();
		this.pStatement = new StatementElements();
		this.pVariable = new VariableElements();
		this.pSendTrigger = new SendTriggerElements();
		this.pInformTimer = new InformTimerElements();
		this.pNoOp = new NoOpElements();
		this.pInvoke = new InvokeElements();
		this.pAssignment = new AssignmentElements();
		this.pAssignable = new AssignableElements();
		this.pWhileLoop = new WhileLoopElements();
		this.pIfStatement = new IfStatementElements();
		this.pLogStatement = new LogStatementElements();
		this.pChooseStatement = new ChooseStatementElements();
		this.pStringExpression = new StringExpressionElements();
		this.pIndividualExpression = new IndividualExpressionElements();
		this.pExpression = new ExpressionElements();
		this.pConditionalOrExpression = new ConditionalOrExpressionElements();
		this.pConditionalAndExpression = new ConditionalAndExpressionElements();
		this.pRelationalOpExpression = new RelationalOpExpressionElements();
		this.pAdditiveExpression = new AdditiveExpressionElements();
		this.pMultiplicativeExpression = new MultiplicativeExpressionElements();
		this.pUnaryExpression = new UnaryExpressionElements();
		this.pUnaryExpressionNotPlusMinus = new UnaryExpressionNotPlusMinusElements();
		this.pNotBooleanExpression = new NotBooleanExpressionElements();
		this.pPrimaryExpression = new PrimaryExpressionElements();
		this.pLiteralOrIdentifier = new LiteralOrIdentifierElements();
		this.pLiteral = new LiteralElements();
		this.pIntLiteral = new IntLiteralElements();
		this.pIdentifier = new IdentifierElements();
		this.pIdentifiable = new IdentifiableElements();
		this.pFunctionCall = new FunctionCallElements();
		this.pBoolLiteral = new BoolLiteralElements();
		this.tBOOLEAN = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "ca.queensu.cs.mase.Urml.BOOLEAN");
	}
	
	protected Grammar internalFindGrammar(GrammarProvider grammarProvider) {
		Grammar grammar = grammarProvider.getGrammar(this);
		while (grammar != null) {
			if ("ca.queensu.cs.mase.Urml".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=ID "{" (capsules+=Capsule
	//	| protocols+=Protocol)* '}';
	public ModelElements getModelAccess() {
		return pModel;
	}
	
	public ParserRule getModelRule() {
		return getModelAccess().getRule();
	}
	
	///******************************************************************
	// * Data and Variables
	// ******************************************************************/ LocalVar:
	//	(isBool?='bool' | isInt?='int') name=ID;
	public LocalVarElements getLocalVarAccess() {
		return pLocalVar;
	}
	
	public ParserRule getLocalVarRule() {
		return getLocalVarAccess().getRule();
	}
	
	//Attribute:
	//	'attribute' (isBool?='bool' | isInt?='int') name=ID (':=' defaultValue=Expression)?;
	public AttributeElements getAttributeAccess() {
		return pAttribute;
	}
	
	public ParserRule getAttributeRule() {
		return getAttributeAccess().getRule();
	}
	
	///****************************************************************
	// * Protocol
	// ****************************************************************/ Protocol:
	//	'protocol' name=ID '{' ('incoming' '{' incomingMessages+=Signal* '}' | 'outgoing' '{' outgoingMessages+=Signal* '}')*
	//	'}';
	public ProtocolElements getProtocolAccess() {
		return pProtocol;
	}
	
	public ParserRule getProtocolRule() {
		return getProtocolAccess().getRule();
	}
	
	//Signal:
	//	name=ID
	//	'(' (LocalVars+=LocalVar (',' LocalVars+=LocalVar)*)? ')';
	public SignalElements getSignalAccess() {
		return pSignal;
	}
	
	public ParserRule getSignalRule() {
		return getSignalAccess().getRule();
	}
	
	///****************************************************************
	// * Capsules, Ports, and Connectors
	// ****************************************************************/ /**
	// * The capsule 
	// */ Capsule:
	//	root?='root'? 'capsule' name=ID '{' ('external' interfacePorts+=Port
	//	| internalPorts+=Port
	//	| timerPorts+=TimerPort
	//	| logPorts+=LogPort
	//	| attributes+=Attribute
	//	| capsuleInsts+=CapsuleInst
	//	| connectors+=Connector
	//	| operations+=Operation
	//	| statemachines+=StateMachine)*
	//	'}';
	public CapsuleElements getCapsuleAccess() {
		return pCapsule;
	}
	
	public ParserRule getCapsuleRule() {
		return getCapsuleAccess().getRule();
	}
	
	//Operation:
	//	'operation' (isBool?='bool' | isInt?='int' | isVoid?='void') name=ID
	//	'(' (LocalVars+=LocalVar (',' LocalVars+=LocalVar)*)? ')'
	//	'{'
	//	operationCode=OperationCode
	//	'}';
	public OperationElements getOperationAccess() {
		return pOperation;
	}
	
	public ParserRule getOperationRule() {
		return getOperationAccess().getRule();
	}
	
	//TimerPort:
	//	'timerPort' name=ID;
	public TimerPortElements getTimerPortAccess() {
		return pTimerPort;
	}
	
	public ParserRule getTimerPortRule() {
		return getTimerPortAccess().getRule();
	}
	
	//LogPort:
	//	'logPort' name=ID;
	public LogPortElements getLogPortAccess() {
		return pLogPort;
	}
	
	public ParserRule getLogPortRule() {
		return getLogPortAccess().getRule();
	}
	
	//Port:
	//	'port' conjugated?='~'? name=ID ':' protocol=[Protocol];
	public PortElements getPortAccess() {
		return pPort;
	}
	
	public ParserRule getPortRule() {
		return getPortAccess().getRule();
	}
	
	//Connector:
	//	'connector' (capsuleInst1=[CapsuleInst] '.')? port1=[Port]
	//	'and' (capsuleInst2=[CapsuleInst] '.')? port2=[Port];
	public ConnectorElements getConnectorAccess() {
		return pConnector;
	}
	
	public ParserRule getConnectorRule() {
		return getConnectorAccess().getRule();
	}
	
	//CapsuleInst:
	//	'capsuleInstance' name=ID ':' type=[Capsule];
	public CapsuleInstElements getCapsuleInstAccess() {
		return pCapsuleInst;
	}
	
	public ParserRule getCapsuleInstRule() {
		return getCapsuleInstAccess().getRule();
	}
	
	///*******************************************************************
	// * State Machines
	// *******************************************************************/ StateMachine:
	//	{StateMachine}
	//	'stateMachine' '{' (states+=State_
	//	| transitions+=Transition)*
	//	'}';
	public StateMachineElements getStateMachineAccess() {
		return pStateMachine;
	}
	
	public ParserRule getStateMachineRule() {
		return getStateMachineAccess().getRule();
	}
	
	//State_:
	//	final?='final'? 'state' name=ID ('{' ('entry' '{' entryCode=ActionCode '}')? ('exit' '{' exitCode=ActionCode '}')?
	//	('sub' substatemachine=StateMachine)?
	//	'}')?;
	public State_Elements getState_Access() {
		return pState_;
	}
	
	public ParserRule getState_Rule() {
		return getState_Access().getRule();
	}
	
	///*
	// * transitions:
	// */ Transition:
	//	'transition' name=ID? ':' (init?='initial' | from=[State_]) '->' to=[State_]
	//	'{' ('guard' '{' guard=Expression '}')? ('triggeredBy' (triggers+=Trigger_in ('or' triggers+=Trigger_in)* | 'timeout'
	//	timerPort=[TimerPort] | universal?='*'))? ('action' '{' action=ActionCode '}')?
	//	'}';
	public TransitionElements getTransitionAccess() {
		return pTransition;
	}
	
	public ParserRule getTransitionRule() {
		return getTransitionAccess().getRule();
	}
	
	///*
	// * other constructs for state machines:
	// */ Trigger_in:
	//	from=[Port] '.'
	//	signal=[Signal]
	//	'(' (parameters+=IncomingVariable (','
	//	parameters+=IncomingVariable)*)? ')';
	public Trigger_inElements getTrigger_inAccess() {
		return pTrigger_in;
	}
	
	public ParserRule getTrigger_inRule() {
		return getTrigger_inAccess().getRule();
	}
	
	//IncomingVariable:
	//	(isBool?='bool' | isInt?='int') name=ID;
	public IncomingVariableElements getIncomingVariableAccess() {
		return pIncomingVariable;
	}
	
	public ParserRule getIncomingVariableRule() {
		return getIncomingVariableAccess().getRule();
	}
	
	//Trigger_out:
	//	to=[Port] '.'
	//	signal=[Signal]
	//	'(' (parameters+=Expression (','
	//	parameters+=Expression)*)?
	//	')';
	public Trigger_outElements getTrigger_outAccess() {
		return pTrigger_out;
	}
	
	public ParserRule getTrigger_outRule() {
		return getTrigger_outAccess().getRule();
	}
	
	///*********************************************************************
	// * Operation and Action Code / Statements
	// *********************************************************************/ // operation code
	//OperationCode:
	//	statements+=StatementOperation+;
	public OperationCodeElements getOperationCodeAccess() {
		return pOperationCode;
	}
	
	public ParserRule getOperationCodeRule() {
		return getOperationCodeAccess().getRule();
	}
	
	//StatementOperation:
	//	NoOp
	//	| Variable
	//	| Invoke
	//	| Assignment
	//	| SendTrigger
	//	| InformTimer
	//	| WhileLoopOperation
	//	| IfStatementOperation
	//	| LogStatement
	//	| ReturnStatement;
	public StatementOperationElements getStatementOperationAccess() {
		return pStatementOperation;
	}
	
	public ParserRule getStatementOperationRule() {
		return getStatementOperationAccess().getRule();
	}
	
	//WhileLoopOperation:
	//	'while' condition=Expression '{' statements+=StatementOperation+ '}';
	public WhileLoopOperationElements getWhileLoopOperationAccess() {
		return pWhileLoopOperation;
	}
	
	public ParserRule getWhileLoopOperationRule() {
		return getWhileLoopOperationAccess().getRule();
	}
	
	//IfStatementOperation:
	//	'if' condition=Expression '{' thenStatements+=StatementOperation+ '}' ('else' '{' elseStatements+=StatementOperation+
	//	'}')?;
	public IfStatementOperationElements getIfStatementOperationAccess() {
		return pIfStatementOperation;
	}
	
	public ParserRule getIfStatementOperationRule() {
		return getIfStatementOperationAccess().getRule();
	}
	
	//ReturnStatement:
	//	{ReturnStatement} 'return' returnValue=Expression?;
	public ReturnStatementElements getReturnStatementAccess() {
		return pReturnStatement;
	}
	
	public ParserRule getReturnStatementRule() {
		return getReturnStatementAccess().getRule();
	}
	
	//// action code
	//ActionCode:
	//	statements+=Statement+;
	public ActionCodeElements getActionCodeAccess() {
		return pActionCode;
	}
	
	public ParserRule getActionCodeRule() {
		return getActionCodeAccess().getRule();
	}
	
	//Statement:
	//	SendTrigger
	//	| Variable
	//	| InformTimer
	//	| NoOp
	//	| Invoke
	//	| Assignment
	//	| WhileLoop
	//	| IfStatement
	//	| LogStatement
	//	| ChooseStatement;
	public StatementElements getStatementAccess() {
		return pStatement;
	}
	
	public ParserRule getStatementRule() {
		return getStatementAccess().getRule();
	}
	
	//Variable:
	//	'var'
	//	var=LocalVar (assign?=':=' exp=Expression)?;
	public VariableElements getVariableAccess() {
		return pVariable;
	}
	
	public ParserRule getVariableRule() {
		return getVariableAccess().getRule();
	}
	
	//SendTrigger:
	//	'send' triggers+=Trigger_out ('and' triggers+=Trigger_out)*;
	public SendTriggerElements getSendTriggerAccess() {
		return pSendTrigger;
	}
	
	public ParserRule getSendTriggerRule() {
		return getSendTriggerAccess().getRule();
	}
	
	//InformTimer:
	//	'inform' timerPort=[TimerPort] 'in' time=AdditiveExpression;
	public InformTimerElements getInformTimerAccess() {
		return pInformTimer;
	}
	
	public ParserRule getInformTimerRule() {
		return getInformTimerAccess().getRule();
	}
	
	//NoOp:
	//	{NoOp} 'noop';
	public NoOpElements getNoOpAccess() {
		return pNoOp;
	}
	
	public ParserRule getNoOpRule() {
		return getNoOpAccess().getRule();
	}
	
	//Invoke:
	//	'call' operation=[Operation]
	//	'(' (parameters+=Expression (',' parameters+=Expression)*)?
	//	')';
	public InvokeElements getInvokeAccess() {
		return pInvoke;
	}
	
	public ParserRule getInvokeRule() {
		return getInvokeAccess().getRule();
	}
	
	//Assignment:
	//	lvalue=[Assignable] ':=' exp=Expression;
	public AssignmentElements getAssignmentAccess() {
		return pAssignment;
	}
	
	public ParserRule getAssignmentRule() {
		return getAssignmentAccess().getRule();
	}
	
	//Assignable:
	//	LocalVar
	//	| Attribute;
	public AssignableElements getAssignableAccess() {
		return pAssignable;
	}
	
	public ParserRule getAssignableRule() {
		return getAssignableAccess().getRule();
	}
	
	//WhileLoop:
	//	'while' condition=Expression '{' statements+=Statement+ '}';
	public WhileLoopElements getWhileLoopAccess() {
		return pWhileLoop;
	}
	
	public ParserRule getWhileLoopRule() {
		return getWhileLoopAccess().getRule();
	}
	
	//IfStatement:
	//	'if' condition=Expression '{' thenStatements+=Statement+ '}' ('else' '{' elseStatements+=Statement+ '}')?;
	public IfStatementElements getIfStatementAccess() {
		return pIfStatement;
	}
	
	public ParserRule getIfStatementRule() {
		return getIfStatementAccess().getRule();
	}
	
	//LogStatement:
	//	'log' logPort=[LogPort] 'with' left=StringExpression;
	public LogStatementElements getLogStatementAccess() {
		return pLogStatement;
	}
	
	public ParserRule getLogStatementRule() {
		return getLogStatementAccess().getRule();
	}
	
	///*********************************************************************
	// * New Choose Statement Added to grammar of action code
	// *********************************************************************/ ChooseStatement:
	//	'choose' '(' intVar=[LocalVar] ',' intExp=AdditiveExpression ')';
	public ChooseStatementElements getChooseStatementAccess() {
		return pChooseStatement;
	}
	
	public ParserRule getChooseStatementRule() {
		return getChooseStatementAccess().getRule();
	}
	
	///*********************************************************************/ StringExpression:
	//	IndividualExpression => ({ConcatenateExpression.left=current} '^'
	//	rest=IndividualExpression)*;
	public StringExpressionElements getStringExpressionAccess() {
		return pStringExpression;
	}
	
	public ParserRule getStringExpressionRule() {
		return getStringExpressionAccess().getRule();
	}
	
	//IndividualExpression StringExpression:
	//	expr=Expression | str=STRING;
	public IndividualExpressionElements getIndividualExpressionAccess() {
		return pIndividualExpression;
	}
	
	public ParserRule getIndividualExpressionRule() {
		return getIndividualExpressionAccess().getRule();
	}
	
	///*********************************************************************
	// * Expressions
	// *********************************************************************/ Expression:
	//	ConditionalOrExpression;
	public ExpressionElements getExpressionAccess() {
		return pExpression;
	}
	
	public ParserRule getExpressionRule() {
		return getExpressionAccess().getRule();
	}
	
	//ConditionalOrExpression Expression:
	//	ConditionalAndExpression =>
	//	({ConditionalOrExpression.left=current} '||'
	//	rest=ConditionalAndExpression)*;
	public ConditionalOrExpressionElements getConditionalOrExpressionAccess() {
		return pConditionalOrExpression;
	}
	
	public ParserRule getConditionalOrExpressionRule() {
		return getConditionalOrExpressionAccess().getRule();
	}
	
	//ConditionalAndExpression Expression:
	//	RelationalOpExpression =>
	//	({ConditionalAndExpression.left=current} '&&'
	//	rest=RelationalOpExpression)*;
	public ConditionalAndExpressionElements getConditionalAndExpressionAccess() {
		return pConditionalAndExpression;
	}
	
	public ParserRule getConditionalAndExpressionRule() {
		return getConditionalAndExpressionAccess().getRule();
	}
	
	//RelationalOpExpression Expression:
	//	AdditiveExpression (=>
	//	({LessThanOrEqual.left=current} "<="
	//	| {LessThan.left=current} "<"
	//	| {GreaterThanOrEqual.left=current} ">="
	//	| {GreaterThan.left=current} ">"
	//	| {Equal.left=current} "=="
	//	| {NotEqual.left=current} "!=") rest=AdditiveExpression)*;
	public RelationalOpExpressionElements getRelationalOpExpressionAccess() {
		return pRelationalOpExpression;
	}
	
	public ParserRule getRelationalOpExpressionRule() {
		return getRelationalOpExpressionAccess().getRule();
	}
	
	//AdditiveExpression Expression:
	//	MultiplicativeExpression (=> ({Plus.left=current} '+'
	//	| {Minus.left=current} '-') rest=MultiplicativeExpression)*;
	public AdditiveExpressionElements getAdditiveExpressionAccess() {
		return pAdditiveExpression;
	}
	
	public ParserRule getAdditiveExpressionRule() {
		return getAdditiveExpressionAccess().getRule();
	}
	
	//MultiplicativeExpression Expression:
	//	UnaryExpression (=> ({Multiply.left=current} '*'
	//	| {Divide.left=current} '/'
	//	| {Modulo.left=current} '%') rest=UnaryExpression)*;
	public MultiplicativeExpressionElements getMultiplicativeExpressionAccess() {
		return pMultiplicativeExpression;
	}
	
	public ParserRule getMultiplicativeExpressionRule() {
		return getMultiplicativeExpressionAccess().getRule();
	}
	
	//UnaryExpression Expression:
	//	UnaryExpressionNotPlusMinus
	//	| {UnaryExpression} '-' exp=UnaryExpression;
	public UnaryExpressionElements getUnaryExpressionAccess() {
		return pUnaryExpression;
	}
	
	public ParserRule getUnaryExpressionRule() {
		return getUnaryExpressionAccess().getRule();
	}
	
	//UnaryExpressionNotPlusMinus Expression:
	//	NotBooleanExpression
	//	| PrimaryExpression;
	public UnaryExpressionNotPlusMinusElements getUnaryExpressionNotPlusMinusAccess() {
		return pUnaryExpressionNotPlusMinus;
	}
	
	public ParserRule getUnaryExpressionNotPlusMinusRule() {
		return getUnaryExpressionNotPlusMinusAccess().getRule();
	}
	
	//NotBooleanExpression:
	//	'!' exp=UnaryExpression;
	public NotBooleanExpressionElements getNotBooleanExpressionAccess() {
		return pNotBooleanExpression;
	}
	
	public ParserRule getNotBooleanExpressionRule() {
		return getNotBooleanExpressionAccess().getRule();
	}
	
	//PrimaryExpression Expression:
	//	LiteralOrIdentifier
	//	| '(' Expression ')';
	public PrimaryExpressionElements getPrimaryExpressionAccess() {
		return pPrimaryExpression;
	}
	
	public ParserRule getPrimaryExpressionRule() {
		return getPrimaryExpressionAccess().getRule();
	}
	
	//LiteralOrIdentifier Expression:
	//	Literal
	//	| Identifier;
	public LiteralOrIdentifierElements getLiteralOrIdentifierAccess() {
		return pLiteralOrIdentifier;
	}
	
	public ParserRule getLiteralOrIdentifierRule() {
		return getLiteralOrIdentifierAccess().getRule();
	}
	
	//Literal:
	//	IntLiteral
	//	| BoolLiteral
	//	| FunctionCall;
	public LiteralElements getLiteralAccess() {
		return pLiteral;
	}
	
	public ParserRule getLiteralRule() {
		return getLiteralAccess().getRule();
	}
	
	//IntLiteral:
	//	{IntLiteral} int=INT;
	public IntLiteralElements getIntLiteralAccess() {
		return pIntLiteral;
	}
	
	public ParserRule getIntLiteralRule() {
		return getIntLiteralAccess().getRule();
	}
	
	//Identifier:
	//	id=[Identifiable];
	public IdentifierElements getIdentifierAccess() {
		return pIdentifier;
	}
	
	public ParserRule getIdentifierRule() {
		return getIdentifierAccess().getRule();
	}
	
	//Identifiable:
	//	Assignable
	//	| IncomingVariable;
	public IdentifiableElements getIdentifiableAccess() {
		return pIdentifiable;
	}
	
	public ParserRule getIdentifiableRule() {
		return getIdentifiableAccess().getRule();
	}
	
	//FunctionCall:
	//	{FunctionCall} call=[Operation]
	//	'(' (params+=Expression (',' params+=Expression)*)?
	//	')';
	public FunctionCallElements getFunctionCallAccess() {
		return pFunctionCall;
	}
	
	public ParserRule getFunctionCallRule() {
		return getFunctionCallAccess().getRule();
	}
	
	//BoolLiteral:
	//	{BoolLiteral} true=BOOLEAN;
	public BoolLiteralElements getBoolLiteralAccess() {
		return pBoolLiteral;
	}
	
	public ParserRule getBoolLiteralRule() {
		return getBoolLiteralAccess().getRule();
	}
	
	//terminal BOOLEAN returns ecore::EBoolean:
	//	'true'
	//	| 'false';
	public TerminalRule getBOOLEANRule() {
		return tBOOLEAN;
	}
	
	//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();
	}
}
