/*
* generated by Xtext
*/

package org.eclipselabs.mscript.language.services;

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

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


@Singleton
public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
	
	
	public class ModuleElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Module");
		private final Assignment cDefinitionsAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cDefinitionsDefinitionParserRuleCall_0 = (RuleCall)cDefinitionsAssignment.eContents().get(0);
		
		//Module:
		//	definitions+=Definition*;
		public ParserRule getRule() { return rule; }

		//definitions+=Definition*
		public Assignment getDefinitionsAssignment() { return cDefinitionsAssignment; }

		//Definition
		public RuleCall getDefinitionsDefinitionParserRuleCall_0() { return cDefinitionsDefinitionParserRuleCall_0; }
	}

	public class DefinitionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Definition");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cDataTypeDefinitionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cFunctionDefinitionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//Definition:
		//	DataTypeDefinition | FunctionDefinition;
		public ParserRule getRule() { return rule; }

		//DataTypeDefinition | FunctionDefinition
		public Alternatives getAlternatives() { return cAlternatives; }

		//DataTypeDefinition
		public RuleCall getDataTypeDefinitionParserRuleCall_0() { return cDataTypeDefinitionParserRuleCall_0; }

		//FunctionDefinition
		public RuleCall getFunctionDefinitionParserRuleCall_1() { return cFunctionDefinitionParserRuleCall_1; }
	}

	public class DataTypeDefinitionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "DataTypeDefinition");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cEnumerationDefinitionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cRecordDefinitionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cTypeAliasDefinitionParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		
		/// *
		// * DataTypeDefinition
		// * / DataTypeDefinition:
		//	EnumerationDefinition | RecordDefinition | TypeAliasDefinition;
		public ParserRule getRule() { return rule; }

		//EnumerationDefinition | RecordDefinition | TypeAliasDefinition
		public Alternatives getAlternatives() { return cAlternatives; }

		//EnumerationDefinition
		public RuleCall getEnumerationDefinitionParserRuleCall_0() { return cEnumerationDefinitionParserRuleCall_0; }

		//RecordDefinition
		public RuleCall getRecordDefinitionParserRuleCall_1() { return cRecordDefinitionParserRuleCall_1; }

		//TypeAliasDefinition
		public RuleCall getTypeAliasDefinitionParserRuleCall_2() { return cTypeAliasDefinitionParserRuleCall_2; }
	}

	public class EnumerationDefinitionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "EnumerationDefinition");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cEnumKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameValidIDParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Assignment cLiteralDeclarationsAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
		private final RuleCall cLiteralDeclarationsEnumerationLiteralDeclarationParserRuleCall_3_0_0 = (RuleCall)cLiteralDeclarationsAssignment_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 cLiteralDeclarationsAssignment_3_1_1 = (Assignment)cGroup_3_1.eContents().get(1);
		private final RuleCall cLiteralDeclarationsEnumerationLiteralDeclarationParserRuleCall_3_1_1_0 = (RuleCall)cLiteralDeclarationsAssignment_3_1_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		/// *
		// * Enumeration
		// * / EnumerationDefinition:
		//	"enum" name=ValidID "{" (literalDeclarations+=EnumerationLiteralDeclaration (","
		//	literalDeclarations+=EnumerationLiteralDeclaration)*)? "}";
		public ParserRule getRule() { return rule; }

		//"enum" name=ValidID "{" (literalDeclarations+=EnumerationLiteralDeclaration (","
		//literalDeclarations+=EnumerationLiteralDeclaration)*)? "}"
		public Group getGroup() { return cGroup; }

		//"enum"
		public Keyword getEnumKeyword_0() { return cEnumKeyword_0; }

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

		//ValidID
		public RuleCall getNameValidIDParserRuleCall_1_0() { return cNameValidIDParserRuleCall_1_0; }

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

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

		//literalDeclarations+=EnumerationLiteralDeclaration
		public Assignment getLiteralDeclarationsAssignment_3_0() { return cLiteralDeclarationsAssignment_3_0; }

		//EnumerationLiteralDeclaration
		public RuleCall getLiteralDeclarationsEnumerationLiteralDeclarationParserRuleCall_3_0_0() { return cLiteralDeclarationsEnumerationLiteralDeclarationParserRuleCall_3_0_0; }

		//("," literalDeclarations+=EnumerationLiteralDeclaration)*
		public Group getGroup_3_1() { return cGroup_3_1; }

		//","
		public Keyword getCommaKeyword_3_1_0() { return cCommaKeyword_3_1_0; }

		//literalDeclarations+=EnumerationLiteralDeclaration
		public Assignment getLiteralDeclarationsAssignment_3_1_1() { return cLiteralDeclarationsAssignment_3_1_1; }

		//EnumerationLiteralDeclaration
		public RuleCall getLiteralDeclarationsEnumerationLiteralDeclarationParserRuleCall_3_1_1_0() { return cLiteralDeclarationsEnumerationLiteralDeclarationParserRuleCall_3_1_1_0; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_4() { return cRightCurlyBracketKeyword_4; }
	}

	public class EnumerationLiteralDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "EnumerationLiteralDeclaration");
		private final Assignment cNameAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cNameValidIDParserRuleCall_0 = (RuleCall)cNameAssignment.eContents().get(0);
		
		//EnumerationLiteralDeclaration:
		//	name=ValidID;
		public ParserRule getRule() { return rule; }

		//name=ValidID
		public Assignment getNameAssignment() { return cNameAssignment; }

		//ValidID
		public RuleCall getNameValidIDParserRuleCall_0() { return cNameValidIDParserRuleCall_0; }
	}

	public class TypeAliasDefinitionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "TypeAliasDefinition");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cTypeKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameValidIDParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Keyword cEqualsSignKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cTypeAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cTypePrimitiveTypeParserRuleCall_3_0 = (RuleCall)cTypeAssignment_3.eContents().get(0);
		private final Keyword cSemicolonKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		/// *
		// * TypeAlias
		// * / TypeAliasDefinition:
		//	"type" name=ValidID "=" type=PrimitiveType ";";
		public ParserRule getRule() { return rule; }

		//"type" name=ValidID "=" type=PrimitiveType ";"
		public Group getGroup() { return cGroup; }

		//"type"
		public Keyword getTypeKeyword_0() { return cTypeKeyword_0; }

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

		//ValidID
		public RuleCall getNameValidIDParserRuleCall_1_0() { return cNameValidIDParserRuleCall_1_0; }

		//"="
		public Keyword getEqualsSignKeyword_2() { return cEqualsSignKeyword_2; }

		//type=PrimitiveType
		public Assignment getTypeAssignment_3() { return cTypeAssignment_3; }

		//PrimitiveType
		public RuleCall getTypePrimitiveTypeParserRuleCall_3_0() { return cTypePrimitiveTypeParserRuleCall_3_0; }

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

	public class RecordDefinitionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RecordDefinition");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cRecordKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameValidIDParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cFieldDeclarationsAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cFieldDeclarationsRecordFieldDeclarationParserRuleCall_3_0 = (RuleCall)cFieldDeclarationsAssignment_3.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		/// *
		// * Record
		// * / RecordDefinition:
		//	"record" name=ValidID "{" fieldDeclarations+=RecordFieldDeclaration* "}";
		public ParserRule getRule() { return rule; }

		//"record" name=ValidID "{" fieldDeclarations+=RecordFieldDeclaration* "}"
		public Group getGroup() { return cGroup; }

		//"record"
		public Keyword getRecordKeyword_0() { return cRecordKeyword_0; }

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

		//ValidID
		public RuleCall getNameValidIDParserRuleCall_1_0() { return cNameValidIDParserRuleCall_1_0; }

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

		//fieldDeclarations+=RecordFieldDeclaration*
		public Assignment getFieldDeclarationsAssignment_3() { return cFieldDeclarationsAssignment_3; }

		//RecordFieldDeclaration
		public RuleCall getFieldDeclarationsRecordFieldDeclarationParserRuleCall_3_0() { return cFieldDeclarationsRecordFieldDeclarationParserRuleCall_3_0; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_4() { return cRightCurlyBracketKeyword_4; }
	}

	public class RecordFieldDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RecordFieldDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cNameValidIDParserRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
		private final Keyword cColonKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cTypeDataTypeSpecifierParserRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
		private final Keyword cSemicolonKeyword_3 = (Keyword)cGroup.eContents().get(3);
		
		//RecordFieldDeclaration:
		//	name=ValidID ":" type=DataTypeSpecifier ";";
		public ParserRule getRule() { return rule; }

		//name=ValidID ":" type=DataTypeSpecifier ";"
		public Group getGroup() { return cGroup; }

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

		//ValidID
		public RuleCall getNameValidIDParserRuleCall_0_0() { return cNameValidIDParserRuleCall_0_0; }

		//":"
		public Keyword getColonKeyword_1() { return cColonKeyword_1; }

		//type=DataTypeSpecifier
		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }

		//DataTypeSpecifier
		public RuleCall getTypeDataTypeSpecifierParserRuleCall_2_0() { return cTypeDataTypeSpecifierParserRuleCall_2_0; }

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

	public class FunctionDefinitionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "FunctionDefinition");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cKindAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cKindFunctionKindEnumRuleCall_0_0 = (RuleCall)cKindAssignment_0.eContents().get(0);
		private final Keyword cFuncKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cNameAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cNameValidIDParserRuleCall_2_0 = (RuleCall)cNameAssignment_2.eContents().get(0);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Keyword cLessThanSignKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final Assignment cTemplateParameterDeclarationsAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
		private final RuleCall cTemplateParameterDeclarationsTemplateParameterDeclarationParserRuleCall_3_1_0 = (RuleCall)cTemplateParameterDeclarationsAssignment_3_1.eContents().get(0);
		private final Group cGroup_3_2 = (Group)cGroup_3.eContents().get(2);
		private final Keyword cCommaKeyword_3_2_0 = (Keyword)cGroup_3_2.eContents().get(0);
		private final Assignment cTemplateParameterDeclarationsAssignment_3_2_1 = (Assignment)cGroup_3_2.eContents().get(1);
		private final RuleCall cTemplateParameterDeclarationsTemplateParameterDeclarationParserRuleCall_3_2_1_0 = (RuleCall)cTemplateParameterDeclarationsAssignment_3_2_1.eContents().get(0);
		private final Keyword cGreaterThanSignKeyword_3_3 = (Keyword)cGroup_3.eContents().get(3);
		private final Keyword cLeftParenthesisKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
		private final Assignment cInputParameterDeclarationsAssignment_5_0 = (Assignment)cGroup_5.eContents().get(0);
		private final RuleCall cInputParameterDeclarationsInputParameterDeclarationParserRuleCall_5_0_0 = (RuleCall)cInputParameterDeclarationsAssignment_5_0.eContents().get(0);
		private final Group cGroup_5_1 = (Group)cGroup_5.eContents().get(1);
		private final Keyword cCommaKeyword_5_1_0 = (Keyword)cGroup_5_1.eContents().get(0);
		private final Assignment cInputParameterDeclarationsAssignment_5_1_1 = (Assignment)cGroup_5_1.eContents().get(1);
		private final RuleCall cInputParameterDeclarationsInputParameterDeclarationParserRuleCall_5_1_1_0 = (RuleCall)cInputParameterDeclarationsAssignment_5_1_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_6 = (Keyword)cGroup.eContents().get(6);
		private final Keyword cHyphenMinusGreaterThanSignKeyword_7 = (Keyword)cGroup.eContents().get(7);
		private final Assignment cOutputParameterDeclarationsAssignment_8 = (Assignment)cGroup.eContents().get(8);
		private final RuleCall cOutputParameterDeclarationsOutputParameterDeclarationParserRuleCall_8_0 = (RuleCall)cOutputParameterDeclarationsAssignment_8.eContents().get(0);
		private final Group cGroup_9 = (Group)cGroup.eContents().get(9);
		private final Keyword cCommaKeyword_9_0 = (Keyword)cGroup_9.eContents().get(0);
		private final Assignment cOutputParameterDeclarationsAssignment_9_1 = (Assignment)cGroup_9.eContents().get(1);
		private final RuleCall cOutputParameterDeclarationsOutputParameterDeclarationParserRuleCall_9_1_0 = (RuleCall)cOutputParameterDeclarationsAssignment_9_1.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_10 = (Keyword)cGroup.eContents().get(10);
		private final Alternatives cAlternatives_11 = (Alternatives)cGroup.eContents().get(11);
		private final Assignment cChecksAssignment_11_0 = (Assignment)cAlternatives_11.eContents().get(0);
		private final RuleCall cChecksCheckParserRuleCall_11_0_0 = (RuleCall)cChecksAssignment_11_0.eContents().get(0);
		private final Assignment cAssertionsAssignment_11_1 = (Assignment)cAlternatives_11.eContents().get(1);
		private final RuleCall cAssertionsAssertionParserRuleCall_11_1_0 = (RuleCall)cAssertionsAssignment_11_1.eContents().get(0);
		private final Assignment cFunctionObjectDeclarationsAssignment_11_2 = (Assignment)cAlternatives_11.eContents().get(2);
		private final RuleCall cFunctionObjectDeclarationsFunctionObjectDeclarationParserRuleCall_11_2_0 = (RuleCall)cFunctionObjectDeclarationsAssignment_11_2.eContents().get(0);
		private final Assignment cStateVariableDeclarationsAssignment_11_3 = (Assignment)cAlternatives_11.eContents().get(3);
		private final RuleCall cStateVariableDeclarationsStateVariableDeclarationParserRuleCall_11_3_0 = (RuleCall)cStateVariableDeclarationsAssignment_11_3.eContents().get(0);
		private final Assignment cEquationsAssignment_11_4 = (Assignment)cAlternatives_11.eContents().get(4);
		private final RuleCall cEquationsEquationParserRuleCall_11_4_0 = (RuleCall)cEquationsAssignment_11_4.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_12 = (Keyword)cGroup.eContents().get(12);
		
		/// *
		// * Function
		// * / FunctionDefinition:
		//	kind=FunctionKind? "func" name=ValidID ("<" templateParameterDeclarations+=TemplateParameterDeclaration (","
		//	templateParameterDeclarations+=TemplateParameterDeclaration)* ">")? "("
		//	(inputParameterDeclarations+=InputParameterDeclaration ("," inputParameterDeclarations+=InputParameterDeclaration)*)?
		//	")" "->" outputParameterDeclarations+=OutputParameterDeclaration (","
		//	outputParameterDeclarations+=OutputParameterDeclaration)* "{" (checks+=Check | assertions+=Assertion |
		//	functionObjectDeclarations+=FunctionObjectDeclaration | stateVariableDeclarations+=StateVariableDeclaration |
		//	equations+=Equation)* "}";
		public ParserRule getRule() { return rule; }

		//kind=FunctionKind? "func" name=ValidID ("<" templateParameterDeclarations+=TemplateParameterDeclaration (","
		//templateParameterDeclarations+=TemplateParameterDeclaration)* ">")? "("
		//(inputParameterDeclarations+=InputParameterDeclaration ("," inputParameterDeclarations+=InputParameterDeclaration)*)?
		//")" "->" outputParameterDeclarations+=OutputParameterDeclaration (","
		//outputParameterDeclarations+=OutputParameterDeclaration)* "{" (checks+=Check | assertions+=Assertion |
		//functionObjectDeclarations+=FunctionObjectDeclaration | stateVariableDeclarations+=StateVariableDeclaration |
		//equations+=Equation)* "}"
		public Group getGroup() { return cGroup; }

		//kind=FunctionKind?
		public Assignment getKindAssignment_0() { return cKindAssignment_0; }

		//FunctionKind
		public RuleCall getKindFunctionKindEnumRuleCall_0_0() { return cKindFunctionKindEnumRuleCall_0_0; }

		//"func"
		public Keyword getFuncKeyword_1() { return cFuncKeyword_1; }

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

		//ValidID
		public RuleCall getNameValidIDParserRuleCall_2_0() { return cNameValidIDParserRuleCall_2_0; }

		//("<" templateParameterDeclarations+=TemplateParameterDeclaration (","
		//templateParameterDeclarations+=TemplateParameterDeclaration)* ">")?
		public Group getGroup_3() { return cGroup_3; }

		//"<"
		public Keyword getLessThanSignKeyword_3_0() { return cLessThanSignKeyword_3_0; }

		//templateParameterDeclarations+=TemplateParameterDeclaration
		public Assignment getTemplateParameterDeclarationsAssignment_3_1() { return cTemplateParameterDeclarationsAssignment_3_1; }

		//TemplateParameterDeclaration
		public RuleCall getTemplateParameterDeclarationsTemplateParameterDeclarationParserRuleCall_3_1_0() { return cTemplateParameterDeclarationsTemplateParameterDeclarationParserRuleCall_3_1_0; }

		//("," templateParameterDeclarations+=TemplateParameterDeclaration)*
		public Group getGroup_3_2() { return cGroup_3_2; }

		//","
		public Keyword getCommaKeyword_3_2_0() { return cCommaKeyword_3_2_0; }

		//templateParameterDeclarations+=TemplateParameterDeclaration
		public Assignment getTemplateParameterDeclarationsAssignment_3_2_1() { return cTemplateParameterDeclarationsAssignment_3_2_1; }

		//TemplateParameterDeclaration
		public RuleCall getTemplateParameterDeclarationsTemplateParameterDeclarationParserRuleCall_3_2_1_0() { return cTemplateParameterDeclarationsTemplateParameterDeclarationParserRuleCall_3_2_1_0; }

		//">"
		public Keyword getGreaterThanSignKeyword_3_3() { return cGreaterThanSignKeyword_3_3; }

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

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

		//inputParameterDeclarations+=InputParameterDeclaration
		public Assignment getInputParameterDeclarationsAssignment_5_0() { return cInputParameterDeclarationsAssignment_5_0; }

		//InputParameterDeclaration
		public RuleCall getInputParameterDeclarationsInputParameterDeclarationParserRuleCall_5_0_0() { return cInputParameterDeclarationsInputParameterDeclarationParserRuleCall_5_0_0; }

		//("," inputParameterDeclarations+=InputParameterDeclaration)*
		public Group getGroup_5_1() { return cGroup_5_1; }

		//","
		public Keyword getCommaKeyword_5_1_0() { return cCommaKeyword_5_1_0; }

		//inputParameterDeclarations+=InputParameterDeclaration
		public Assignment getInputParameterDeclarationsAssignment_5_1_1() { return cInputParameterDeclarationsAssignment_5_1_1; }

		//InputParameterDeclaration
		public RuleCall getInputParameterDeclarationsInputParameterDeclarationParserRuleCall_5_1_1_0() { return cInputParameterDeclarationsInputParameterDeclarationParserRuleCall_5_1_1_0; }

		//")"
		public Keyword getRightParenthesisKeyword_6() { return cRightParenthesisKeyword_6; }

		//"->"
		public Keyword getHyphenMinusGreaterThanSignKeyword_7() { return cHyphenMinusGreaterThanSignKeyword_7; }

		//outputParameterDeclarations+=OutputParameterDeclaration
		public Assignment getOutputParameterDeclarationsAssignment_8() { return cOutputParameterDeclarationsAssignment_8; }

		//OutputParameterDeclaration
		public RuleCall getOutputParameterDeclarationsOutputParameterDeclarationParserRuleCall_8_0() { return cOutputParameterDeclarationsOutputParameterDeclarationParserRuleCall_8_0; }

		//("," outputParameterDeclarations+=OutputParameterDeclaration)*
		public Group getGroup_9() { return cGroup_9; }

		//","
		public Keyword getCommaKeyword_9_0() { return cCommaKeyword_9_0; }

		//outputParameterDeclarations+=OutputParameterDeclaration
		public Assignment getOutputParameterDeclarationsAssignment_9_1() { return cOutputParameterDeclarationsAssignment_9_1; }

		//OutputParameterDeclaration
		public RuleCall getOutputParameterDeclarationsOutputParameterDeclarationParserRuleCall_9_1_0() { return cOutputParameterDeclarationsOutputParameterDeclarationParserRuleCall_9_1_0; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_10() { return cLeftCurlyBracketKeyword_10; }

		//(checks+=Check | assertions+=Assertion | functionObjectDeclarations+=FunctionObjectDeclaration |
		//stateVariableDeclarations+=StateVariableDeclaration | equations+=Equation)*
		public Alternatives getAlternatives_11() { return cAlternatives_11; }

		//checks+=Check
		public Assignment getChecksAssignment_11_0() { return cChecksAssignment_11_0; }

		//Check
		public RuleCall getChecksCheckParserRuleCall_11_0_0() { return cChecksCheckParserRuleCall_11_0_0; }

		//assertions+=Assertion
		public Assignment getAssertionsAssignment_11_1() { return cAssertionsAssignment_11_1; }

		//Assertion
		public RuleCall getAssertionsAssertionParserRuleCall_11_1_0() { return cAssertionsAssertionParserRuleCall_11_1_0; }

		//functionObjectDeclarations+=FunctionObjectDeclaration
		public Assignment getFunctionObjectDeclarationsAssignment_11_2() { return cFunctionObjectDeclarationsAssignment_11_2; }

		//FunctionObjectDeclaration
		public RuleCall getFunctionObjectDeclarationsFunctionObjectDeclarationParserRuleCall_11_2_0() { return cFunctionObjectDeclarationsFunctionObjectDeclarationParserRuleCall_11_2_0; }

		//stateVariableDeclarations+=StateVariableDeclaration
		public Assignment getStateVariableDeclarationsAssignment_11_3() { return cStateVariableDeclarationsAssignment_11_3; }

		//StateVariableDeclaration
		public RuleCall getStateVariableDeclarationsStateVariableDeclarationParserRuleCall_11_3_0() { return cStateVariableDeclarationsStateVariableDeclarationParserRuleCall_11_3_0; }

		//equations+=Equation
		public Assignment getEquationsAssignment_11_4() { return cEquationsAssignment_11_4; }

		//Equation
		public RuleCall getEquationsEquationParserRuleCall_11_4_0() { return cEquationsEquationParserRuleCall_11_4_0; }

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

	public class TemplateParameterDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "TemplateParameterDeclaration");
		private final Assignment cNameAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cNameValidIDParserRuleCall_0 = (RuleCall)cNameAssignment.eContents().get(0);
		
		//TemplateParameterDeclaration:
		//	name=ValidID;
		public ParserRule getRule() { return rule; }

		//name=ValidID
		public Assignment getNameAssignment() { return cNameAssignment; }

		//ValidID
		public RuleCall getNameValidIDParserRuleCall_0() { return cNameValidIDParserRuleCall_0; }
	}

	public class InputParameterDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "InputParameterDeclaration");
		private final Assignment cNameAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cNameValidIDParserRuleCall_0 = (RuleCall)cNameAssignment.eContents().get(0);
		
		//InputParameterDeclaration:
		//	name=ValidID;
		public ParserRule getRule() { return rule; }

		//name=ValidID
		public Assignment getNameAssignment() { return cNameAssignment; }

		//ValidID
		public RuleCall getNameValidIDParserRuleCall_0() { return cNameValidIDParserRuleCall_0; }
	}

	public class OutputParameterDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "OutputParameterDeclaration");
		private final Assignment cNameAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cNameValidIDParserRuleCall_0 = (RuleCall)cNameAssignment.eContents().get(0);
		
		//OutputParameterDeclaration:
		//	name=ValidID;
		public ParserRule getRule() { return rule; }

		//name=ValidID
		public Assignment getNameAssignment() { return cNameAssignment; }

		//ValidID
		public RuleCall getNameValidIDParserRuleCall_0() { return cNameValidIDParserRuleCall_0; }
	}

	public class CheckElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Check");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cCheckKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cLessThanSignKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Assignment cTemplateArgumentsAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cTemplateArgumentsExpressionParserRuleCall_1_1_0 = (RuleCall)cTemplateArgumentsAssignment_1_1.eContents().get(0);
		private final Group cGroup_1_2 = (Group)cGroup_1.eContents().get(2);
		private final Keyword cCommaKeyword_1_2_0 = (Keyword)cGroup_1_2.eContents().get(0);
		private final Assignment cTemplateArgumentsAssignment_1_2_1 = (Assignment)cGroup_1_2.eContents().get(1);
		private final RuleCall cTemplateArgumentsExpressionParserRuleCall_1_2_1_0 = (RuleCall)cTemplateArgumentsAssignment_1_2_1.eContents().get(0);
		private final Keyword cGreaterThanSignKeyword_1_3 = (Keyword)cGroup_1.eContents().get(3);
		private final Keyword cLeftParenthesisKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Assignment cInputParameterTypesAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
		private final RuleCall cInputParameterTypesDataTypeSpecifierParserRuleCall_3_0_0 = (RuleCall)cInputParameterTypesAssignment_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 cInputParameterTypesAssignment_3_1_1 = (Assignment)cGroup_3_1.eContents().get(1);
		private final RuleCall cInputParameterTypesDataTypeSpecifierParserRuleCall_3_1_1_0 = (RuleCall)cInputParameterTypesAssignment_3_1_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Keyword cHyphenMinusGreaterThanSignKeyword_5 = (Keyword)cGroup.eContents().get(5);
		private final Assignment cOutputParameterTypesAssignment_6 = (Assignment)cGroup.eContents().get(6);
		private final RuleCall cOutputParameterTypesDataTypeSpecifierParserRuleCall_6_0 = (RuleCall)cOutputParameterTypesAssignment_6.eContents().get(0);
		private final Group cGroup_7 = (Group)cGroup.eContents().get(7);
		private final Keyword cCommaKeyword_7_0 = (Keyword)cGroup_7.eContents().get(0);
		private final Assignment cOutputParameterTypesAssignment_7_1 = (Assignment)cGroup_7.eContents().get(1);
		private final RuleCall cOutputParameterTypesDataTypeSpecifierParserRuleCall_7_1_0 = (RuleCall)cOutputParameterTypesAssignment_7_1.eContents().get(0);
		private final Keyword cSemicolonKeyword_8 = (Keyword)cGroup.eContents().get(8);
		
		//Check:
		//	"check" ("<" templateArguments+=Expression ("," templateArguments+=Expression)* ">")? "("
		//	(inputParameterTypes+=DataTypeSpecifier ("," inputParameterTypes+=DataTypeSpecifier)*)? ")" "->"
		//	outputParameterTypes+=DataTypeSpecifier ("," outputParameterTypes+=DataTypeSpecifier)* ";";
		public ParserRule getRule() { return rule; }

		//"check" ("<" templateArguments+=Expression ("," templateArguments+=Expression)* ">")? "("
		//(inputParameterTypes+=DataTypeSpecifier ("," inputParameterTypes+=DataTypeSpecifier)*)? ")" "->"
		//outputParameterTypes+=DataTypeSpecifier ("," outputParameterTypes+=DataTypeSpecifier)* ";"
		public Group getGroup() { return cGroup; }

		//"check"
		public Keyword getCheckKeyword_0() { return cCheckKeyword_0; }

		//("<" templateArguments+=Expression ("," templateArguments+=Expression)* ">")?
		public Group getGroup_1() { return cGroup_1; }

		//"<"
		public Keyword getLessThanSignKeyword_1_0() { return cLessThanSignKeyword_1_0; }

		//templateArguments+=Expression
		public Assignment getTemplateArgumentsAssignment_1_1() { return cTemplateArgumentsAssignment_1_1; }

		//Expression
		public RuleCall getTemplateArgumentsExpressionParserRuleCall_1_1_0() { return cTemplateArgumentsExpressionParserRuleCall_1_1_0; }

		//("," templateArguments+=Expression)*
		public Group getGroup_1_2() { return cGroup_1_2; }

		//","
		public Keyword getCommaKeyword_1_2_0() { return cCommaKeyword_1_2_0; }

		//templateArguments+=Expression
		public Assignment getTemplateArgumentsAssignment_1_2_1() { return cTemplateArgumentsAssignment_1_2_1; }

		//Expression
		public RuleCall getTemplateArgumentsExpressionParserRuleCall_1_2_1_0() { return cTemplateArgumentsExpressionParserRuleCall_1_2_1_0; }

		//">"
		public Keyword getGreaterThanSignKeyword_1_3() { return cGreaterThanSignKeyword_1_3; }

		//"("
		public Keyword getLeftParenthesisKeyword_2() { return cLeftParenthesisKeyword_2; }

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

		//inputParameterTypes+=DataTypeSpecifier
		public Assignment getInputParameterTypesAssignment_3_0() { return cInputParameterTypesAssignment_3_0; }

		//DataTypeSpecifier
		public RuleCall getInputParameterTypesDataTypeSpecifierParserRuleCall_3_0_0() { return cInputParameterTypesDataTypeSpecifierParserRuleCall_3_0_0; }

		//("," inputParameterTypes+=DataTypeSpecifier)*
		public Group getGroup_3_1() { return cGroup_3_1; }

		//","
		public Keyword getCommaKeyword_3_1_0() { return cCommaKeyword_3_1_0; }

		//inputParameterTypes+=DataTypeSpecifier
		public Assignment getInputParameterTypesAssignment_3_1_1() { return cInputParameterTypesAssignment_3_1_1; }

		//DataTypeSpecifier
		public RuleCall getInputParameterTypesDataTypeSpecifierParserRuleCall_3_1_1_0() { return cInputParameterTypesDataTypeSpecifierParserRuleCall_3_1_1_0; }

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

		//"->"
		public Keyword getHyphenMinusGreaterThanSignKeyword_5() { return cHyphenMinusGreaterThanSignKeyword_5; }

		//outputParameterTypes+=DataTypeSpecifier
		public Assignment getOutputParameterTypesAssignment_6() { return cOutputParameterTypesAssignment_6; }

		//DataTypeSpecifier
		public RuleCall getOutputParameterTypesDataTypeSpecifierParserRuleCall_6_0() { return cOutputParameterTypesDataTypeSpecifierParserRuleCall_6_0; }

		//("," outputParameterTypes+=DataTypeSpecifier)*
		public Group getGroup_7() { return cGroup_7; }

		//","
		public Keyword getCommaKeyword_7_0() { return cCommaKeyword_7_0; }

		//outputParameterTypes+=DataTypeSpecifier
		public Assignment getOutputParameterTypesAssignment_7_1() { return cOutputParameterTypesAssignment_7_1; }

		//DataTypeSpecifier
		public RuleCall getOutputParameterTypesDataTypeSpecifierParserRuleCall_7_1_0() { return cOutputParameterTypesDataTypeSpecifierParserRuleCall_7_1_0; }

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

	public class AssertionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Assertion");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cStaticAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final Keyword cStaticStaticKeyword_0_0 = (Keyword)cStaticAssignment_0.eContents().get(0);
		private final Keyword cAssertKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cConditionAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cConditionExpressionParserRuleCall_2_0 = (RuleCall)cConditionAssignment_2.eContents().get(0);
		private final Keyword cColonKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cStatusKindAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cStatusKindAssertionStatusKindEnumRuleCall_4_0 = (RuleCall)cStatusKindAssignment_4.eContents().get(0);
		private final Assignment cMessageAssignment_5 = (Assignment)cGroup.eContents().get(5);
		private final RuleCall cMessageExpressionParserRuleCall_5_0 = (RuleCall)cMessageAssignment_5.eContents().get(0);
		private final Keyword cSemicolonKeyword_6 = (Keyword)cGroup.eContents().get(6);
		
		//Assertion:
		//	static?="static"? "assert" condition=Expression ":" statusKind=AssertionStatusKind message=Expression ";";
		public ParserRule getRule() { return rule; }

		//static?="static"? "assert" condition=Expression ":" statusKind=AssertionStatusKind message=Expression ";"
		public Group getGroup() { return cGroup; }

		//static?="static"?
		public Assignment getStaticAssignment_0() { return cStaticAssignment_0; }

		//"static"
		public Keyword getStaticStaticKeyword_0_0() { return cStaticStaticKeyword_0_0; }

		//"assert"
		public Keyword getAssertKeyword_1() { return cAssertKeyword_1; }

		//condition=Expression
		public Assignment getConditionAssignment_2() { return cConditionAssignment_2; }

		//Expression
		public RuleCall getConditionExpressionParserRuleCall_2_0() { return cConditionExpressionParserRuleCall_2_0; }

		//":"
		public Keyword getColonKeyword_3() { return cColonKeyword_3; }

		//statusKind=AssertionStatusKind
		public Assignment getStatusKindAssignment_4() { return cStatusKindAssignment_4; }

		//AssertionStatusKind
		public RuleCall getStatusKindAssertionStatusKindEnumRuleCall_4_0() { return cStatusKindAssertionStatusKindEnumRuleCall_4_0; }

		//message=Expression
		public Assignment getMessageAssignment_5() { return cMessageAssignment_5; }

		//Expression
		public RuleCall getMessageExpressionParserRuleCall_5_0() { return cMessageExpressionParserRuleCall_5_0; }

		//";"
		public Keyword getSemicolonKeyword_6() { return cSemicolonKeyword_6; }
	}

	public class StateVariableDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "StateVariableDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cVarKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameValidIDParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Keyword cSemicolonKeyword_2 = (Keyword)cGroup.eContents().get(2);
		
		//StateVariableDeclaration:
		//	"var" name=ValidID ";";
		public ParserRule getRule() { return rule; }

		//"var" name=ValidID ";"
		public Group getGroup() { return cGroup; }

		//"var"
		public Keyword getVarKeyword_0() { return cVarKeyword_0; }

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

		//ValidID
		public RuleCall getNameValidIDParserRuleCall_1_0() { return cNameValidIDParserRuleCall_1_0; }

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

	public class FunctionObjectDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "FunctionObjectDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cFobKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameValidIDParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Keyword cColonKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cFunctionNameAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final CrossReference cFunctionNameFunctionDefinitionCrossReference_3_0 = (CrossReference)cFunctionNameAssignment_3.eContents().get(0);
		private final RuleCall cFunctionNameFunctionDefinitionQualifiedNameParserRuleCall_3_0_1 = (RuleCall)cFunctionNameFunctionDefinitionCrossReference_3_0.eContents().get(1);
		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
		private final Keyword cLessThanSignKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
		private final Assignment cTemplateArgumentsAssignment_4_1 = (Assignment)cGroup_4.eContents().get(1);
		private final RuleCall cTemplateArgumentsExpressionParserRuleCall_4_1_0 = (RuleCall)cTemplateArgumentsAssignment_4_1.eContents().get(0);
		private final Group cGroup_4_2 = (Group)cGroup_4.eContents().get(2);
		private final Keyword cCommaKeyword_4_2_0 = (Keyword)cGroup_4_2.eContents().get(0);
		private final Assignment cTemplateArgumentsAssignment_4_2_1 = (Assignment)cGroup_4_2.eContents().get(1);
		private final RuleCall cTemplateArgumentsExpressionParserRuleCall_4_2_1_0 = (RuleCall)cTemplateArgumentsAssignment_4_2_1.eContents().get(0);
		private final Keyword cGreaterThanSignKeyword_4_3 = (Keyword)cGroup_4.eContents().get(3);
		private final Keyword cSemicolonKeyword_5 = (Keyword)cGroup.eContents().get(5);
		
		//FunctionObjectDeclaration:
		//	"fob" name=ValidID ":" functionName=[FunctionDefinition|QualifiedName] ("<" templateArguments+=Expression (","
		//	templateArguments+=Expression)* ">")? ";";
		public ParserRule getRule() { return rule; }

		//"fob" name=ValidID ":" functionName=[FunctionDefinition|QualifiedName] ("<" templateArguments+=Expression (","
		//templateArguments+=Expression)* ">")? ";"
		public Group getGroup() { return cGroup; }

		//"fob"
		public Keyword getFobKeyword_0() { return cFobKeyword_0; }

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

		//ValidID
		public RuleCall getNameValidIDParserRuleCall_1_0() { return cNameValidIDParserRuleCall_1_0; }

		//":"
		public Keyword getColonKeyword_2() { return cColonKeyword_2; }

		//functionName=[FunctionDefinition|QualifiedName]
		public Assignment getFunctionNameAssignment_3() { return cFunctionNameAssignment_3; }

		//[FunctionDefinition|QualifiedName]
		public CrossReference getFunctionNameFunctionDefinitionCrossReference_3_0() { return cFunctionNameFunctionDefinitionCrossReference_3_0; }

		//QualifiedName
		public RuleCall getFunctionNameFunctionDefinitionQualifiedNameParserRuleCall_3_0_1() { return cFunctionNameFunctionDefinitionQualifiedNameParserRuleCall_3_0_1; }

		//("<" templateArguments+=Expression ("," templateArguments+=Expression)* ">")?
		public Group getGroup_4() { return cGroup_4; }

		//"<"
		public Keyword getLessThanSignKeyword_4_0() { return cLessThanSignKeyword_4_0; }

		//templateArguments+=Expression
		public Assignment getTemplateArgumentsAssignment_4_1() { return cTemplateArgumentsAssignment_4_1; }

		//Expression
		public RuleCall getTemplateArgumentsExpressionParserRuleCall_4_1_0() { return cTemplateArgumentsExpressionParserRuleCall_4_1_0; }

		//("," templateArguments+=Expression)*
		public Group getGroup_4_2() { return cGroup_4_2; }

		//","
		public Keyword getCommaKeyword_4_2_0() { return cCommaKeyword_4_2_0; }

		//templateArguments+=Expression
		public Assignment getTemplateArgumentsAssignment_4_2_1() { return cTemplateArgumentsAssignment_4_2_1; }

		//Expression
		public RuleCall getTemplateArgumentsExpressionParserRuleCall_4_2_1_0() { return cTemplateArgumentsExpressionParserRuleCall_4_2_1_0; }

		//">"
		public Keyword getGreaterThanSignKeyword_4_3() { return cGreaterThanSignKeyword_4_3; }

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

	public class EquationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Equation");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cInitialAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final Keyword cInitialInitialKeyword_0_0 = (Keyword)cInitialAssignment_0.eContents().get(0);
		private final Assignment cLeftHandSideAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cLeftHandSideExpressionParserRuleCall_1_0 = (RuleCall)cLeftHandSideAssignment_1.eContents().get(0);
		private final Keyword cEqualsSignKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cRightHandSideAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cRightHandSideExpressionParserRuleCall_3_0 = (RuleCall)cRightHandSideAssignment_3.eContents().get(0);
		private final Keyword cSemicolonKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		//Equation:
		//	initial?="initial"? leftHandSide=Expression "=" rightHandSide=Expression ";";
		public ParserRule getRule() { return rule; }

		//initial?="initial"? leftHandSide=Expression "=" rightHandSide=Expression ";"
		public Group getGroup() { return cGroup; }

		//initial?="initial"?
		public Assignment getInitialAssignment_0() { return cInitialAssignment_0; }

		//"initial"
		public Keyword getInitialInitialKeyword_0_0() { return cInitialInitialKeyword_0_0; }

		//leftHandSide=Expression
		public Assignment getLeftHandSideAssignment_1() { return cLeftHandSideAssignment_1; }

		//Expression
		public RuleCall getLeftHandSideExpressionParserRuleCall_1_0() { return cLeftHandSideExpressionParserRuleCall_1_0; }

		//"="
		public Keyword getEqualsSignKeyword_2() { return cEqualsSignKeyword_2; }

		//rightHandSide=Expression
		public Assignment getRightHandSideAssignment_3() { return cRightHandSideAssignment_3; }

		//Expression
		public RuleCall getRightHandSideExpressionParserRuleCall_3_0() { return cRightHandSideExpressionParserRuleCall_3_0; }

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

	public class DataTypeSpecifierElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "DataTypeSpecifier");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Assignment cDefinedTypeAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
		private final Alternatives cDefinedTypeAlternatives_0_0 = (Alternatives)cDefinedTypeAssignment_0.eContents().get(0);
		private final RuleCall cDefinedTypePrimitiveTypeParserRuleCall_0_0_0 = (RuleCall)cDefinedTypeAlternatives_0_0.eContents().get(0);
		private final RuleCall cDefinedTypeArrayTypeParserRuleCall_0_0_1 = (RuleCall)cDefinedTypeAlternatives_0_0.eContents().get(1);
		private final Assignment cTypeAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
		private final CrossReference cTypeDataTypeCrossReference_1_0 = (CrossReference)cTypeAssignment_1.eContents().get(0);
		private final RuleCall cTypeDataTypeIDTerminalRuleCall_1_0_1 = (RuleCall)cTypeDataTypeCrossReference_1_0.eContents().get(1);
		
		/// *
		// * Data type specifier
		// * / DataTypeSpecifier:
		//	definedType=(PrimitiveType | ArrayType) | type=[DataType];
		public ParserRule getRule() { return rule; }

		//definedType=(PrimitiveType | ArrayType) | type=[DataType]
		public Alternatives getAlternatives() { return cAlternatives; }

		//definedType=(PrimitiveType | ArrayType)
		public Assignment getDefinedTypeAssignment_0() { return cDefinedTypeAssignment_0; }

		//PrimitiveType | ArrayType
		public Alternatives getDefinedTypeAlternatives_0_0() { return cDefinedTypeAlternatives_0_0; }

		//PrimitiveType
		public RuleCall getDefinedTypePrimitiveTypeParserRuleCall_0_0_0() { return cDefinedTypePrimitiveTypeParserRuleCall_0_0_0; }

		//ArrayType
		public RuleCall getDefinedTypeArrayTypeParserRuleCall_0_0_1() { return cDefinedTypeArrayTypeParserRuleCall_0_0_1; }

		//type=[DataType]
		public Assignment getTypeAssignment_1() { return cTypeAssignment_1; }

		//[DataType]
		public CrossReference getTypeDataTypeCrossReference_1_0() { return cTypeDataTypeCrossReference_1_0; }

		//ID
		public RuleCall getTypeDataTypeIDTerminalRuleCall_1_0_1() { return cTypeDataTypeIDTerminalRuleCall_1_0_1; }
	}

	public class PrimitiveTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "PrimitiveType");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cNumericTypeParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cBooleanTypeParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cStringTypeParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		
		//PrimitiveType:
		//	NumericType | BooleanType | StringType;
		public ParserRule getRule() { return rule; }

		//NumericType | BooleanType | StringType
		public Alternatives getAlternatives() { return cAlternatives; }

		//NumericType
		public RuleCall getNumericTypeParserRuleCall_0() { return cNumericTypeParserRuleCall_0; }

		//BooleanType
		public RuleCall getBooleanTypeParserRuleCall_1() { return cBooleanTypeParserRuleCall_1; }

		//StringType
		public RuleCall getStringTypeParserRuleCall_2() { return cStringTypeParserRuleCall_2; }
	}

	public class NumericTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "NumericType");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cRealTypeParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cIntegerTypeParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cComplexTypeParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cGaussianTypeParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		
		//NumericType:
		//	RealType | IntegerType | ComplexType | GaussianType;
		public ParserRule getRule() { return rule; }

		//RealType | IntegerType | ComplexType | GaussianType
		public Alternatives getAlternatives() { return cAlternatives; }

		//RealType
		public RuleCall getRealTypeParserRuleCall_0() { return cRealTypeParserRuleCall_0; }

		//IntegerType
		public RuleCall getIntegerTypeParserRuleCall_1() { return cIntegerTypeParserRuleCall_1; }

		//ComplexType
		public RuleCall getComplexTypeParserRuleCall_2() { return cComplexTypeParserRuleCall_2; }

		//GaussianType
		public RuleCall getGaussianTypeParserRuleCall_3() { return cGaussianTypeParserRuleCall_3; }
	}

	public class RealTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RealType");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cRealTypeAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cRealKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cUnitAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cUnitUnitParserRuleCall_2_0 = (RuleCall)cUnitAssignment_2.eContents().get(0);
		
		//RealType:
		//	{RealType} "real" unit=Unit;
		public ParserRule getRule() { return rule; }

		//{RealType} "real" unit=Unit
		public Group getGroup() { return cGroup; }

		//{RealType}
		public Action getRealTypeAction_0() { return cRealTypeAction_0; }

		//"real"
		public Keyword getRealKeyword_1() { return cRealKeyword_1; }

		//unit=Unit
		public Assignment getUnitAssignment_2() { return cUnitAssignment_2; }

		//Unit
		public RuleCall getUnitUnitParserRuleCall_2_0() { return cUnitUnitParserRuleCall_2_0; }
	}

	public class IntegerTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "IntegerType");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cIntegerTypeAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cIntKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cUnitAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cUnitUnitParserRuleCall_2_0 = (RuleCall)cUnitAssignment_2.eContents().get(0);
		
		//IntegerType:
		//	{IntegerType} "int" unit=Unit;
		public ParserRule getRule() { return rule; }

		//{IntegerType} "int" unit=Unit
		public Group getGroup() { return cGroup; }

		//{IntegerType}
		public Action getIntegerTypeAction_0() { return cIntegerTypeAction_0; }

		//"int"
		public Keyword getIntKeyword_1() { return cIntKeyword_1; }

		//unit=Unit
		public Assignment getUnitAssignment_2() { return cUnitAssignment_2; }

		//Unit
		public RuleCall getUnitUnitParserRuleCall_2_0() { return cUnitUnitParserRuleCall_2_0; }
	}

	public class ComplexTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ComplexType");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cComplexTypeAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cComplexKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cUnitAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cUnitUnitParserRuleCall_2_0 = (RuleCall)cUnitAssignment_2.eContents().get(0);
		
		//ComplexType:
		//	{ComplexType} "complex" unit=Unit;
		public ParserRule getRule() { return rule; }

		//{ComplexType} "complex" unit=Unit
		public Group getGroup() { return cGroup; }

		//{ComplexType}
		public Action getComplexTypeAction_0() { return cComplexTypeAction_0; }

		//"complex"
		public Keyword getComplexKeyword_1() { return cComplexKeyword_1; }

		//unit=Unit
		public Assignment getUnitAssignment_2() { return cUnitAssignment_2; }

		//Unit
		public RuleCall getUnitUnitParserRuleCall_2_0() { return cUnitUnitParserRuleCall_2_0; }
	}

	public class GaussianTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "GaussianType");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cGaussianTypeAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cGaussKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cUnitAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cUnitUnitParserRuleCall_2_0 = (RuleCall)cUnitAssignment_2.eContents().get(0);
		
		//GaussianType:
		//	{GaussianType} "gauss" unit=Unit;
		public ParserRule getRule() { return rule; }

		//{GaussianType} "gauss" unit=Unit
		public Group getGroup() { return cGroup; }

		//{GaussianType}
		public Action getGaussianTypeAction_0() { return cGaussianTypeAction_0; }

		//"gauss"
		public Keyword getGaussKeyword_1() { return cGaussKeyword_1; }

		//unit=Unit
		public Assignment getUnitAssignment_2() { return cUnitAssignment_2; }

		//Unit
		public RuleCall getUnitUnitParserRuleCall_2_0() { return cUnitUnitParserRuleCall_2_0; }
	}

	public class BooleanTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "BooleanType");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cBooleanTypeAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cBoolKeyword_1 = (Keyword)cGroup.eContents().get(1);
		
		//BooleanType:
		//	{BooleanType} "bool";
		public ParserRule getRule() { return rule; }

		//{BooleanType} "bool"
		public Group getGroup() { return cGroup; }

		//{BooleanType}
		public Action getBooleanTypeAction_0() { return cBooleanTypeAction_0; }

		//"bool"
		public Keyword getBoolKeyword_1() { return cBoolKeyword_1; }
	}

	public class StringTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "StringType");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cStringTypeAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cStringKeyword_1 = (Keyword)cGroup.eContents().get(1);
		
		//StringType:
		//	{StringType} "string";
		public ParserRule getRule() { return rule; }

		//{StringType} "string"
		public Group getGroup() { return cGroup; }

		//{StringType}
		public Action getStringTypeAction_0() { return cStringTypeAction_0; }

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

	public class ArrayTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ArrayType");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cTensorTypeParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final Group cGroup_1 = (Group)cAlternatives.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 Assignment cDefinedElementTypeAssignment_1_0_0_0 = (Assignment)cAlternatives_1_0_0.eContents().get(0);
		private final RuleCall cDefinedElementTypePrimitiveTypeParserRuleCall_1_0_0_0_0 = (RuleCall)cDefinedElementTypeAssignment_1_0_0_0.eContents().get(0);
		private final Assignment cElementTypeAssignment_1_0_0_1 = (Assignment)cAlternatives_1_0_0.eContents().get(1);
		private final CrossReference cElementTypeDataTypeCrossReference_1_0_0_1_0 = (CrossReference)cElementTypeAssignment_1_0_0_1.eContents().get(0);
		private final RuleCall cElementTypeDataTypeIDTerminalRuleCall_1_0_0_1_0_1 = (RuleCall)cElementTypeDataTypeCrossReference_1_0_0_1_0.eContents().get(1);
		private final Keyword cLeftSquareBracketKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cDimensionsAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cDimensionsArrayDimensionParserRuleCall_1_2_0 = (RuleCall)cDimensionsAssignment_1_2.eContents().get(0);
		private final Group cGroup_1_3 = (Group)cGroup_1.eContents().get(3);
		private final Keyword cCommaKeyword_1_3_0 = (Keyword)cGroup_1_3.eContents().get(0);
		private final Assignment cDimensionsAssignment_1_3_1 = (Assignment)cGroup_1_3.eContents().get(1);
		private final RuleCall cDimensionsArrayDimensionParserRuleCall_1_3_1_0 = (RuleCall)cDimensionsAssignment_1_3_1.eContents().get(0);
		private final Keyword cRightSquareBracketKeyword_1_4 = (Keyword)cGroup_1.eContents().get(4);
		
		//ArrayType:
		//	TensorType | => (definedElementType=PrimitiveType | elementType=[DataType]) "[" dimensions+=ArrayDimension (","
		//	dimensions+=ArrayDimension)* "]";
		public ParserRule getRule() { return rule; }

		//TensorType | => (definedElementType=PrimitiveType | elementType=[DataType]) "[" dimensions+=ArrayDimension (","
		//dimensions+=ArrayDimension)* "]"
		public Alternatives getAlternatives() { return cAlternatives; }

		//TensorType
		public RuleCall getTensorTypeParserRuleCall_0() { return cTensorTypeParserRuleCall_0; }

		//=> (definedElementType=PrimitiveType | elementType=[DataType]) "[" dimensions+=ArrayDimension (","
		//dimensions+=ArrayDimension)* "]"
		public Group getGroup_1() { return cGroup_1; }

		//=> (definedElementType=PrimitiveType | elementType=[DataType])
		public Group getGroup_1_0() { return cGroup_1_0; }

		//definedElementType=PrimitiveType | elementType=[DataType]
		public Alternatives getAlternatives_1_0_0() { return cAlternatives_1_0_0; }

		//definedElementType=PrimitiveType
		public Assignment getDefinedElementTypeAssignment_1_0_0_0() { return cDefinedElementTypeAssignment_1_0_0_0; }

		//PrimitiveType
		public RuleCall getDefinedElementTypePrimitiveTypeParserRuleCall_1_0_0_0_0() { return cDefinedElementTypePrimitiveTypeParserRuleCall_1_0_0_0_0; }

		//elementType=[DataType]
		public Assignment getElementTypeAssignment_1_0_0_1() { return cElementTypeAssignment_1_0_0_1; }

		//[DataType]
		public CrossReference getElementTypeDataTypeCrossReference_1_0_0_1_0() { return cElementTypeDataTypeCrossReference_1_0_0_1_0; }

		//ID
		public RuleCall getElementTypeDataTypeIDTerminalRuleCall_1_0_0_1_0_1() { return cElementTypeDataTypeIDTerminalRuleCall_1_0_0_1_0_1; }

		//"["
		public Keyword getLeftSquareBracketKeyword_1_1() { return cLeftSquareBracketKeyword_1_1; }

		//dimensions+=ArrayDimension
		public Assignment getDimensionsAssignment_1_2() { return cDimensionsAssignment_1_2; }

		//ArrayDimension
		public RuleCall getDimensionsArrayDimensionParserRuleCall_1_2_0() { return cDimensionsArrayDimensionParserRuleCall_1_2_0; }

		//("," dimensions+=ArrayDimension)*
		public Group getGroup_1_3() { return cGroup_1_3; }

		//","
		public Keyword getCommaKeyword_1_3_0() { return cCommaKeyword_1_3_0; }

		//dimensions+=ArrayDimension
		public Assignment getDimensionsAssignment_1_3_1() { return cDimensionsAssignment_1_3_1; }

		//ArrayDimension
		public RuleCall getDimensionsArrayDimensionParserRuleCall_1_3_1_0() { return cDimensionsArrayDimensionParserRuleCall_1_3_1_0; }

		//"]"
		public Keyword getRightSquareBracketKeyword_1_4() { return cRightSquareBracketKeyword_1_4; }
	}

	public class TensorTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "TensorType");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cDefinedElementTypeAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cDefinedElementTypeNumericTypeParserRuleCall_0_0 = (RuleCall)cDefinedElementTypeAssignment_0.eContents().get(0);
		private final Keyword cLeftSquareBracketKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cDimensionsAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cDimensionsArrayDimensionParserRuleCall_2_0 = (RuleCall)cDimensionsAssignment_2.eContents().get(0);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Keyword cCommaKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final Assignment cDimensionsAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
		private final RuleCall cDimensionsArrayDimensionParserRuleCall_3_1_0 = (RuleCall)cDimensionsAssignment_3_1.eContents().get(0);
		private final Keyword cRightSquareBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		//TensorType:
		//	definedElementType=NumericType "[" dimensions+=ArrayDimension ("," dimensions+=ArrayDimension)* "]";
		public ParserRule getRule() { return rule; }

		//definedElementType=NumericType "[" dimensions+=ArrayDimension ("," dimensions+=ArrayDimension)* "]"
		public Group getGroup() { return cGroup; }

		//definedElementType=NumericType
		public Assignment getDefinedElementTypeAssignment_0() { return cDefinedElementTypeAssignment_0; }

		//NumericType
		public RuleCall getDefinedElementTypeNumericTypeParserRuleCall_0_0() { return cDefinedElementTypeNumericTypeParserRuleCall_0_0; }

		//"["
		public Keyword getLeftSquareBracketKeyword_1() { return cLeftSquareBracketKeyword_1; }

		//dimensions+=ArrayDimension
		public Assignment getDimensionsAssignment_2() { return cDimensionsAssignment_2; }

		//ArrayDimension
		public RuleCall getDimensionsArrayDimensionParserRuleCall_2_0() { return cDimensionsArrayDimensionParserRuleCall_2_0; }

		//("," dimensions+=ArrayDimension)*
		public Group getGroup_3() { return cGroup_3; }

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

		//dimensions+=ArrayDimension
		public Assignment getDimensionsAssignment_3_1() { return cDimensionsAssignment_3_1; }

		//ArrayDimension
		public RuleCall getDimensionsArrayDimensionParserRuleCall_3_1_0() { return cDimensionsArrayDimensionParserRuleCall_3_1_0; }

		//"]"
		public Keyword getRightSquareBracketKeyword_4() { return cRightSquareBracketKeyword_4; }
	}

	public class ArrayDimensionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ArrayDimension");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cArrayDimensionAction_0 = (Action)cGroup.eContents().get(0);
		private final Assignment cSizeAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cSizeExpressionParserRuleCall_1_0 = (RuleCall)cSizeAssignment_1.eContents().get(0);
		
		//ArrayDimension:
		//	{ArrayDimension} size=Expression?;
		public ParserRule getRule() { return rule; }

		//{ArrayDimension} size=Expression?
		public Group getGroup() { return cGroup; }

		//{ArrayDimension}
		public Action getArrayDimensionAction_0() { return cArrayDimensionAction_0; }

		//size=Expression?
		public Assignment getSizeAssignment_1() { return cSizeAssignment_1; }

		//Expression
		public RuleCall getSizeExpressionParserRuleCall_1_0() { return cSizeExpressionParserRuleCall_1_0; }
	}

	public class ExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Expression");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cLetExpressionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cIfExpressionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cSwitchExpressionParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cRangeExpressionParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		
		/// *
		// * Expressions
		// * / Expression:
		//	LetExpression | IfExpression | SwitchExpression | RangeExpression;
		public ParserRule getRule() { return rule; }

		//LetExpression | IfExpression | SwitchExpression | RangeExpression
		public Alternatives getAlternatives() { return cAlternatives; }

		//LetExpression
		public RuleCall getLetExpressionParserRuleCall_0() { return cLetExpressionParserRuleCall_0; }

		//IfExpression
		public RuleCall getIfExpressionParserRuleCall_1() { return cIfExpressionParserRuleCall_1; }

		//SwitchExpression
		public RuleCall getSwitchExpressionParserRuleCall_2() { return cSwitchExpressionParserRuleCall_2; }

		//RangeExpression
		public RuleCall getRangeExpressionParserRuleCall_3() { return cRangeExpressionParserRuleCall_3; }
	}

	public class LetExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "LetExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLetKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cVariableDeclarationsAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cVariableDeclarationsLetExpressionVariableDeclarationParserRuleCall_1_0 = (RuleCall)cVariableDeclarationsAssignment_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cCommaKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cVariableDeclarationsAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cVariableDeclarationsLetExpressionVariableDeclarationParserRuleCall_2_1_0 = (RuleCall)cVariableDeclarationsAssignment_2_1.eContents().get(0);
		private final Keyword cInKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cTargetExpressionAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cTargetExpressionExpressionParserRuleCall_4_0 = (RuleCall)cTargetExpressionAssignment_4.eContents().get(0);
		
		//LetExpression:
		//	"let" variableDeclarations+=LetExpressionVariableDeclaration (","
		//	variableDeclarations+=LetExpressionVariableDeclaration)* "in" targetExpression=Expression;
		public ParserRule getRule() { return rule; }

		//"let" variableDeclarations+=LetExpressionVariableDeclaration (","
		//variableDeclarations+=LetExpressionVariableDeclaration)* "in" targetExpression=Expression
		public Group getGroup() { return cGroup; }

		//"let"
		public Keyword getLetKeyword_0() { return cLetKeyword_0; }

		//variableDeclarations+=LetExpressionVariableDeclaration
		public Assignment getVariableDeclarationsAssignment_1() { return cVariableDeclarationsAssignment_1; }

		//LetExpressionVariableDeclaration
		public RuleCall getVariableDeclarationsLetExpressionVariableDeclarationParserRuleCall_1_0() { return cVariableDeclarationsLetExpressionVariableDeclarationParserRuleCall_1_0; }

		//("," variableDeclarations+=LetExpressionVariableDeclaration)*
		public Group getGroup_2() { return cGroup_2; }

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

		//variableDeclarations+=LetExpressionVariableDeclaration
		public Assignment getVariableDeclarationsAssignment_2_1() { return cVariableDeclarationsAssignment_2_1; }

		//LetExpressionVariableDeclaration
		public RuleCall getVariableDeclarationsLetExpressionVariableDeclarationParserRuleCall_2_1_0() { return cVariableDeclarationsLetExpressionVariableDeclarationParserRuleCall_2_1_0; }

		//"in"
		public Keyword getInKeyword_3() { return cInKeyword_3; }

		//targetExpression=Expression
		public Assignment getTargetExpressionAssignment_4() { return cTargetExpressionAssignment_4; }

		//Expression
		public RuleCall getTargetExpressionExpressionParserRuleCall_4_0() { return cTargetExpressionExpressionParserRuleCall_4_0; }
	}

	public class LetExpressionVariableDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "LetExpressionVariableDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
		private final Assignment cPartsAssignment_0_0 = (Assignment)cAlternatives_0.eContents().get(0);
		private final RuleCall cPartsLetExpressionVariableDeclarationPartParserRuleCall_0_0_0 = (RuleCall)cPartsAssignment_0_0.eContents().get(0);
		private final Group cGroup_0_1 = (Group)cAlternatives_0.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_0_1_0 = (Keyword)cGroup_0_1.eContents().get(0);
		private final Assignment cPartsAssignment_0_1_1 = (Assignment)cGroup_0_1.eContents().get(1);
		private final RuleCall cPartsLetExpressionVariableDeclarationPartParserRuleCall_0_1_1_0 = (RuleCall)cPartsAssignment_0_1_1.eContents().get(0);
		private final Group cGroup_0_1_2 = (Group)cGroup_0_1.eContents().get(2);
		private final Keyword cCommaKeyword_0_1_2_0 = (Keyword)cGroup_0_1_2.eContents().get(0);
		private final Assignment cPartsAssignment_0_1_2_1 = (Assignment)cGroup_0_1_2.eContents().get(1);
		private final RuleCall cPartsLetExpressionVariableDeclarationPartParserRuleCall_0_1_2_1_0 = (RuleCall)cPartsAssignment_0_1_2_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_0_1_3 = (Keyword)cGroup_0_1.eContents().get(3);
		private final Keyword cEqualsSignKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cAssignedExpressionAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cAssignedExpressionExpressionParserRuleCall_2_0 = (RuleCall)cAssignedExpressionAssignment_2.eContents().get(0);
		
		//LetExpressionVariableDeclaration:
		//	(parts+=LetExpressionVariableDeclarationPart | "(" parts+=LetExpressionVariableDeclarationPart (","
		//	parts+=LetExpressionVariableDeclarationPart)+ ")") "=" assignedExpression=Expression;
		public ParserRule getRule() { return rule; }

		//(parts+=LetExpressionVariableDeclarationPart | "(" parts+=LetExpressionVariableDeclarationPart (","
		//parts+=LetExpressionVariableDeclarationPart)+ ")") "=" assignedExpression=Expression
		public Group getGroup() { return cGroup; }

		//parts+=LetExpressionVariableDeclarationPart | "(" parts+=LetExpressionVariableDeclarationPart (","
		//parts+=LetExpressionVariableDeclarationPart)+ ")"
		public Alternatives getAlternatives_0() { return cAlternatives_0; }

		//parts+=LetExpressionVariableDeclarationPart
		public Assignment getPartsAssignment_0_0() { return cPartsAssignment_0_0; }

		//LetExpressionVariableDeclarationPart
		public RuleCall getPartsLetExpressionVariableDeclarationPartParserRuleCall_0_0_0() { return cPartsLetExpressionVariableDeclarationPartParserRuleCall_0_0_0; }

		//"(" parts+=LetExpressionVariableDeclarationPart ("," parts+=LetExpressionVariableDeclarationPart)+ ")"
		public Group getGroup_0_1() { return cGroup_0_1; }

		//"("
		public Keyword getLeftParenthesisKeyword_0_1_0() { return cLeftParenthesisKeyword_0_1_0; }

		//parts+=LetExpressionVariableDeclarationPart
		public Assignment getPartsAssignment_0_1_1() { return cPartsAssignment_0_1_1; }

		//LetExpressionVariableDeclarationPart
		public RuleCall getPartsLetExpressionVariableDeclarationPartParserRuleCall_0_1_1_0() { return cPartsLetExpressionVariableDeclarationPartParserRuleCall_0_1_1_0; }

		//("," parts+=LetExpressionVariableDeclarationPart)+
		public Group getGroup_0_1_2() { return cGroup_0_1_2; }

		//","
		public Keyword getCommaKeyword_0_1_2_0() { return cCommaKeyword_0_1_2_0; }

		//parts+=LetExpressionVariableDeclarationPart
		public Assignment getPartsAssignment_0_1_2_1() { return cPartsAssignment_0_1_2_1; }

		//LetExpressionVariableDeclarationPart
		public RuleCall getPartsLetExpressionVariableDeclarationPartParserRuleCall_0_1_2_1_0() { return cPartsLetExpressionVariableDeclarationPartParserRuleCall_0_1_2_1_0; }

		//")"
		public Keyword getRightParenthesisKeyword_0_1_3() { return cRightParenthesisKeyword_0_1_3; }

		//"="
		public Keyword getEqualsSignKeyword_1() { return cEqualsSignKeyword_1; }

		//assignedExpression=Expression
		public Assignment getAssignedExpressionAssignment_2() { return cAssignedExpressionAssignment_2; }

		//Expression
		public RuleCall getAssignedExpressionExpressionParserRuleCall_2_0() { return cAssignedExpressionExpressionParserRuleCall_2_0; }
	}

	public class LetExpressionVariableDeclarationPartElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "LetExpressionVariableDeclarationPart");
		private final Assignment cNameAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cNameValidIDParserRuleCall_0 = (RuleCall)cNameAssignment.eContents().get(0);
		
		//LetExpressionVariableDeclarationPart:
		//	name=ValidID;
		public ParserRule getRule() { return rule; }

		//name=ValidID
		public Assignment getNameAssignment() { return cNameAssignment; }

		//ValidID
		public RuleCall getNameValidIDParserRuleCall_0() { return cNameValidIDParserRuleCall_0; }
	}

	public class IfExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "IfExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cStaticAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final Keyword cStaticStaticKeyword_0_0 = (Keyword)cStaticAssignment_0.eContents().get(0);
		private final Keyword cIfKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cConditionAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cConditionExpressionParserRuleCall_2_0 = (RuleCall)cConditionAssignment_2.eContents().get(0);
		private final Keyword cThenKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cThenExpressionAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cThenExpressionExpressionParserRuleCall_4_0 = (RuleCall)cThenExpressionAssignment_4.eContents().get(0);
		private final Keyword cElseKeyword_5 = (Keyword)cGroup.eContents().get(5);
		private final Assignment cElseExpressionAssignment_6 = (Assignment)cGroup.eContents().get(6);
		private final RuleCall cElseExpressionExpressionParserRuleCall_6_0 = (RuleCall)cElseExpressionAssignment_6.eContents().get(0);
		
		//IfExpression:
		//	static?="static"? "if" condition=Expression "then" thenExpression=Expression "else" elseExpression=Expression;
		public ParserRule getRule() { return rule; }

		//static?="static"? "if" condition=Expression "then" thenExpression=Expression "else" elseExpression=Expression
		public Group getGroup() { return cGroup; }

		//static?="static"?
		public Assignment getStaticAssignment_0() { return cStaticAssignment_0; }

		//"static"
		public Keyword getStaticStaticKeyword_0_0() { return cStaticStaticKeyword_0_0; }

		//"if"
		public Keyword getIfKeyword_1() { return cIfKeyword_1; }

		//condition=Expression
		public Assignment getConditionAssignment_2() { return cConditionAssignment_2; }

		//Expression
		public RuleCall getConditionExpressionParserRuleCall_2_0() { return cConditionExpressionParserRuleCall_2_0; }

		//"then"
		public Keyword getThenKeyword_3() { return cThenKeyword_3; }

		//thenExpression=Expression
		public Assignment getThenExpressionAssignment_4() { return cThenExpressionAssignment_4; }

		//Expression
		public RuleCall getThenExpressionExpressionParserRuleCall_4_0() { return cThenExpressionExpressionParserRuleCall_4_0; }

		//"else"
		public Keyword getElseKeyword_5() { return cElseKeyword_5; }

		//elseExpression=Expression
		public Assignment getElseExpressionAssignment_6() { return cElseExpressionAssignment_6; }

		//Expression
		public RuleCall getElseExpressionExpressionParserRuleCall_6_0() { return cElseExpressionExpressionParserRuleCall_6_0; }
	}

	public class SwitchExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "SwitchExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cStaticAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final Keyword cStaticStaticKeyword_0_0 = (Keyword)cStaticAssignment_0.eContents().get(0);
		private final Keyword cSwitchKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cControlExpressionAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cControlExpressionExpressionParserRuleCall_2_0 = (RuleCall)cControlExpressionAssignment_2.eContents().get(0);
		private final Assignment cCasesAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cCasesSwitchCaseParserRuleCall_3_0 = (RuleCall)cCasesAssignment_3.eContents().get(0);
		private final Keyword cDefaultKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Keyword cColonKeyword_5 = (Keyword)cGroup.eContents().get(5);
		private final Assignment cDefaultExpressionAssignment_6 = (Assignment)cGroup.eContents().get(6);
		private final RuleCall cDefaultExpressionExpressionParserRuleCall_6_0 = (RuleCall)cDefaultExpressionAssignment_6.eContents().get(0);
		
		//SwitchExpression:
		//	static?="static"? "switch" controlExpression=Expression cases+=SwitchCase* "default" ":" defaultExpression=Expression;
		public ParserRule getRule() { return rule; }

		//static?="static"? "switch" controlExpression=Expression cases+=SwitchCase* "default" ":" defaultExpression=Expression
		public Group getGroup() { return cGroup; }

		//static?="static"?
		public Assignment getStaticAssignment_0() { return cStaticAssignment_0; }

		//"static"
		public Keyword getStaticStaticKeyword_0_0() { return cStaticStaticKeyword_0_0; }

		//"switch"
		public Keyword getSwitchKeyword_1() { return cSwitchKeyword_1; }

		//controlExpression=Expression
		public Assignment getControlExpressionAssignment_2() { return cControlExpressionAssignment_2; }

		//Expression
		public RuleCall getControlExpressionExpressionParserRuleCall_2_0() { return cControlExpressionExpressionParserRuleCall_2_0; }

		//cases+=SwitchCase*
		public Assignment getCasesAssignment_3() { return cCasesAssignment_3; }

		//SwitchCase
		public RuleCall getCasesSwitchCaseParserRuleCall_3_0() { return cCasesSwitchCaseParserRuleCall_3_0; }

		//"default"
		public Keyword getDefaultKeyword_4() { return cDefaultKeyword_4; }

		//":"
		public Keyword getColonKeyword_5() { return cColonKeyword_5; }

		//defaultExpression=Expression
		public Assignment getDefaultExpressionAssignment_6() { return cDefaultExpressionAssignment_6; }

		//Expression
		public RuleCall getDefaultExpressionExpressionParserRuleCall_6_0() { return cDefaultExpressionExpressionParserRuleCall_6_0; }
	}

	public class SwitchCaseElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "SwitchCase");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cCaseKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cCaseExpressionAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cCaseExpressionImpliesExpressionParserRuleCall_1_0 = (RuleCall)cCaseExpressionAssignment_1.eContents().get(0);
		private final Keyword cColonKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cResultExpressionAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cResultExpressionExpressionParserRuleCall_3_0 = (RuleCall)cResultExpressionAssignment_3.eContents().get(0);
		
		//SwitchCase:
		//	"case" caseExpression=ImpliesExpression ":" resultExpression=Expression;
		public ParserRule getRule() { return rule; }

		//"case" caseExpression=ImpliesExpression ":" resultExpression=Expression
		public Group getGroup() { return cGroup; }

		//"case"
		public Keyword getCaseKeyword_0() { return cCaseKeyword_0; }

		//caseExpression=ImpliesExpression
		public Assignment getCaseExpressionAssignment_1() { return cCaseExpressionAssignment_1; }

		//ImpliesExpression
		public RuleCall getCaseExpressionImpliesExpressionParserRuleCall_1_0() { return cCaseExpressionImpliesExpressionParserRuleCall_1_0; }

		//":"
		public Keyword getColonKeyword_2() { return cColonKeyword_2; }

		//resultExpression=Expression
		public Assignment getResultExpressionAssignment_3() { return cResultExpressionAssignment_3; }

		//Expression
		public RuleCall getResultExpressionExpressionParserRuleCall_3_0() { return cResultExpressionExpressionParserRuleCall_3_0; }
	}

	public class RangeExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RangeExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cImpliesExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cRangeExpressionOperandsAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cColonKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cOperandsAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cOperandsImpliesExpressionParserRuleCall_1_2_0 = (RuleCall)cOperandsAssignment_1_2.eContents().get(0);
		private final Group cGroup_1_3 = (Group)cGroup_1.eContents().get(3);
		private final Keyword cColonKeyword_1_3_0 = (Keyword)cGroup_1_3.eContents().get(0);
		private final Assignment cOperandsAssignment_1_3_1 = (Assignment)cGroup_1_3.eContents().get(1);
		private final RuleCall cOperandsImpliesExpressionParserRuleCall_1_3_1_0 = (RuleCall)cOperandsAssignment_1_3_1.eContents().get(0);
		
		//RangeExpression returns Expression:
		//	ImpliesExpression ({RangeExpression.operands+=current} ":" operands+=ImpliesExpression (":"
		//	operands+=ImpliesExpression)?)?;
		public ParserRule getRule() { return rule; }

		//ImpliesExpression ({RangeExpression.operands+=current} ":" operands+=ImpliesExpression (":"
		//operands+=ImpliesExpression)?)?
		public Group getGroup() { return cGroup; }

		//ImpliesExpression
		public RuleCall getImpliesExpressionParserRuleCall_0() { return cImpliesExpressionParserRuleCall_0; }

		//({RangeExpression.operands+=current} ":" operands+=ImpliesExpression (":" operands+=ImpliesExpression)?)?
		public Group getGroup_1() { return cGroup_1; }

		//{RangeExpression.operands+=current}
		public Action getRangeExpressionOperandsAction_1_0() { return cRangeExpressionOperandsAction_1_0; }

		//":"
		public Keyword getColonKeyword_1_1() { return cColonKeyword_1_1; }

		//operands+=ImpliesExpression
		public Assignment getOperandsAssignment_1_2() { return cOperandsAssignment_1_2; }

		//ImpliesExpression
		public RuleCall getOperandsImpliesExpressionParserRuleCall_1_2_0() { return cOperandsImpliesExpressionParserRuleCall_1_2_0; }

		//(":" operands+=ImpliesExpression)?
		public Group getGroup_1_3() { return cGroup_1_3; }

		//":"
		public Keyword getColonKeyword_1_3_0() { return cColonKeyword_1_3_0; }

		//operands+=ImpliesExpression
		public Assignment getOperandsAssignment_1_3_1() { return cOperandsAssignment_1_3_1; }

		//ImpliesExpression
		public RuleCall getOperandsImpliesExpressionParserRuleCall_1_3_1_0() { return cOperandsImpliesExpressionParserRuleCall_1_3_1_0; }
	}

	public class ImpliesExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ImpliesExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cLogicalOrExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cImpliesExpressionLeftOperandAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cEqualsSignGreaterThanSignKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightOperandAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightOperandLogicalOrExpressionParserRuleCall_1_2_0 = (RuleCall)cRightOperandAssignment_1_2.eContents().get(0);
		
		//ImpliesExpression returns Expression:
		//	LogicalOrExpression ({ImpliesExpression.leftOperand=current} "=>" rightOperand=LogicalOrExpression)?;
		public ParserRule getRule() { return rule; }

		//LogicalOrExpression ({ImpliesExpression.leftOperand=current} "=>" rightOperand=LogicalOrExpression)?
		public Group getGroup() { return cGroup; }

		//LogicalOrExpression
		public RuleCall getLogicalOrExpressionParserRuleCall_0() { return cLogicalOrExpressionParserRuleCall_0; }

		//({ImpliesExpression.leftOperand=current} "=>" rightOperand=LogicalOrExpression)?
		public Group getGroup_1() { return cGroup_1; }

		//{ImpliesExpression.leftOperand=current}
		public Action getImpliesExpressionLeftOperandAction_1_0() { return cImpliesExpressionLeftOperandAction_1_0; }

		//"=>"
		public Keyword getEqualsSignGreaterThanSignKeyword_1_1() { return cEqualsSignGreaterThanSignKeyword_1_1; }

		//rightOperand=LogicalOrExpression
		public Assignment getRightOperandAssignment_1_2() { return cRightOperandAssignment_1_2; }

		//LogicalOrExpression
		public RuleCall getRightOperandLogicalOrExpressionParserRuleCall_1_2_0() { return cRightOperandLogicalOrExpressionParserRuleCall_1_2_0; }
	}

	public class LogicalOrExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "LogicalOrExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cLogicalAndExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cLogicalOrExpressionLeftOperandAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cVerticalLineVerticalLineKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightOperandAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightOperandLogicalAndExpressionParserRuleCall_1_2_0 = (RuleCall)cRightOperandAssignment_1_2.eContents().get(0);
		
		//LogicalOrExpression returns Expression:
		//	LogicalAndExpression ({LogicalOrExpression.leftOperand=current} "||" rightOperand=LogicalAndExpression)*;
		public ParserRule getRule() { return rule; }

		//LogicalAndExpression ({LogicalOrExpression.leftOperand=current} "||" rightOperand=LogicalAndExpression)*
		public Group getGroup() { return cGroup; }

		//LogicalAndExpression
		public RuleCall getLogicalAndExpressionParserRuleCall_0() { return cLogicalAndExpressionParserRuleCall_0; }

		//({LogicalOrExpression.leftOperand=current} "||" rightOperand=LogicalAndExpression)*
		public Group getGroup_1() { return cGroup_1; }

		//{LogicalOrExpression.leftOperand=current}
		public Action getLogicalOrExpressionLeftOperandAction_1_0() { return cLogicalOrExpressionLeftOperandAction_1_0; }

		//"||"
		public Keyword getVerticalLineVerticalLineKeyword_1_1() { return cVerticalLineVerticalLineKeyword_1_1; }

		//rightOperand=LogicalAndExpression
		public Assignment getRightOperandAssignment_1_2() { return cRightOperandAssignment_1_2; }

		//LogicalAndExpression
		public RuleCall getRightOperandLogicalAndExpressionParserRuleCall_1_2_0() { return cRightOperandLogicalAndExpressionParserRuleCall_1_2_0; }
	}

	public class LogicalAndExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "LogicalAndExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cEqualityExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cLogicalAndExpressionLeftOperandAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cAmpersandAmpersandKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightOperandAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightOperandEqualityExpressionParserRuleCall_1_2_0 = (RuleCall)cRightOperandAssignment_1_2.eContents().get(0);
		
		//LogicalAndExpression returns Expression:
		//	EqualityExpression ({LogicalAndExpression.leftOperand=current} "&&" rightOperand=EqualityExpression)*;
		public ParserRule getRule() { return rule; }

		//EqualityExpression ({LogicalAndExpression.leftOperand=current} "&&" rightOperand=EqualityExpression)*
		public Group getGroup() { return cGroup; }

		//EqualityExpression
		public RuleCall getEqualityExpressionParserRuleCall_0() { return cEqualityExpressionParserRuleCall_0; }

		//({LogicalAndExpression.leftOperand=current} "&&" rightOperand=EqualityExpression)*
		public Group getGroup_1() { return cGroup_1; }

		//{LogicalAndExpression.leftOperand=current}
		public Action getLogicalAndExpressionLeftOperandAction_1_0() { return cLogicalAndExpressionLeftOperandAction_1_0; }

		//"&&"
		public Keyword getAmpersandAmpersandKeyword_1_1() { return cAmpersandAmpersandKeyword_1_1; }

		//rightOperand=EqualityExpression
		public Assignment getRightOperandAssignment_1_2() { return cRightOperandAssignment_1_2; }

		//EqualityExpression
		public RuleCall getRightOperandEqualityExpressionParserRuleCall_1_2_0() { return cRightOperandEqualityExpressionParserRuleCall_1_2_0; }
	}

	public class EqualityExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "EqualityExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cRelationalExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cEqualityExpressionLeftOperandAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Assignment cOperatorAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cOperatorEqualityOperatorEnumRuleCall_1_1_0 = (RuleCall)cOperatorAssignment_1_1.eContents().get(0);
		private final Assignment cRightOperandAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightOperandRelationalExpressionParserRuleCall_1_2_0 = (RuleCall)cRightOperandAssignment_1_2.eContents().get(0);
		
		//EqualityExpression returns Expression:
		//	RelationalExpression ({EqualityExpression.leftOperand=current} operator=EqualityOperator
		//	rightOperand=RelationalExpression)*;
		public ParserRule getRule() { return rule; }

		//RelationalExpression ({EqualityExpression.leftOperand=current} operator=EqualityOperator
		//rightOperand=RelationalExpression)*
		public Group getGroup() { return cGroup; }

		//RelationalExpression
		public RuleCall getRelationalExpressionParserRuleCall_0() { return cRelationalExpressionParserRuleCall_0; }

		//({EqualityExpression.leftOperand=current} operator=EqualityOperator rightOperand=RelationalExpression)*
		public Group getGroup_1() { return cGroup_1; }

		//{EqualityExpression.leftOperand=current}
		public Action getEqualityExpressionLeftOperandAction_1_0() { return cEqualityExpressionLeftOperandAction_1_0; }

		//operator=EqualityOperator
		public Assignment getOperatorAssignment_1_1() { return cOperatorAssignment_1_1; }

		//EqualityOperator
		public RuleCall getOperatorEqualityOperatorEnumRuleCall_1_1_0() { return cOperatorEqualityOperatorEnumRuleCall_1_1_0; }

		//rightOperand=RelationalExpression
		public Assignment getRightOperandAssignment_1_2() { return cRightOperandAssignment_1_2; }

		//RelationalExpression
		public RuleCall getRightOperandRelationalExpressionParserRuleCall_1_2_0() { return cRightOperandRelationalExpressionParserRuleCall_1_2_0; }
	}

	public class RelationalExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RelationalExpression");
		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 Alternatives cAlternatives_1_0 = (Alternatives)cGroup_1.eContents().get(0);
		private final Group cGroup_1_0_0 = (Group)cAlternatives_1_0.eContents().get(0);
		private final Action cRelationalExpressionLeftOperandAction_1_0_0_0 = (Action)cGroup_1_0_0.eContents().get(0);
		private final Assignment cOperatorAssignment_1_0_0_1 = (Assignment)cGroup_1_0_0.eContents().get(1);
		private final RuleCall cOperatorRelationalOperatorEnumRuleCall_1_0_0_1_0 = (RuleCall)cOperatorAssignment_1_0_0_1.eContents().get(0);
		private final Assignment cRightOperandAssignment_1_0_0_2 = (Assignment)cGroup_1_0_0.eContents().get(2);
		private final RuleCall cRightOperandAdditiveExpressionParserRuleCall_1_0_0_2_0 = (RuleCall)cRightOperandAssignment_1_0_0_2.eContents().get(0);
		private final Group cGroup_1_0_1 = (Group)cAlternatives_1_0.eContents().get(1);
		private final Action cTypeTestExpressionExpressionAction_1_0_1_0 = (Action)cGroup_1_0_1.eContents().get(0);
		private final Keyword cIsKeyword_1_0_1_1 = (Keyword)cGroup_1_0_1.eContents().get(1);
		private final Assignment cTypeAssignment_1_0_1_2 = (Assignment)cGroup_1_0_1.eContents().get(2);
		private final RuleCall cTypeDataTypeSpecifierParserRuleCall_1_0_1_2_0 = (RuleCall)cTypeAssignment_1_0_1_2.eContents().get(0);
		
		//RelationalExpression returns Expression:
		//	AdditiveExpression => ({RelationalExpression.leftOperand=current} operator=RelationalOperator
		//	rightOperand=AdditiveExpression | {TypeTestExpression.expression=current} "is" type=DataTypeSpecifier)?;
		public ParserRule getRule() { return rule; }

		//AdditiveExpression => ({RelationalExpression.leftOperand=current} operator=RelationalOperator
		//rightOperand=AdditiveExpression | {TypeTestExpression.expression=current} "is" type=DataTypeSpecifier)?
		public Group getGroup() { return cGroup; }

		//AdditiveExpression
		public RuleCall getAdditiveExpressionParserRuleCall_0() { return cAdditiveExpressionParserRuleCall_0; }

		//=> ({RelationalExpression.leftOperand=current} operator=RelationalOperator rightOperand=AdditiveExpression |
		//{TypeTestExpression.expression=current} "is" type=DataTypeSpecifier)?
		public Group getGroup_1() { return cGroup_1; }

		//{RelationalExpression.leftOperand=current} operator=RelationalOperator rightOperand=AdditiveExpression |
		//{TypeTestExpression.expression=current} "is" type=DataTypeSpecifier
		public Alternatives getAlternatives_1_0() { return cAlternatives_1_0; }

		//{RelationalExpression.leftOperand=current} operator=RelationalOperator rightOperand=AdditiveExpression
		public Group getGroup_1_0_0() { return cGroup_1_0_0; }

		//{RelationalExpression.leftOperand=current}
		public Action getRelationalExpressionLeftOperandAction_1_0_0_0() { return cRelationalExpressionLeftOperandAction_1_0_0_0; }

		//operator=RelationalOperator
		public Assignment getOperatorAssignment_1_0_0_1() { return cOperatorAssignment_1_0_0_1; }

		//RelationalOperator
		public RuleCall getOperatorRelationalOperatorEnumRuleCall_1_0_0_1_0() { return cOperatorRelationalOperatorEnumRuleCall_1_0_0_1_0; }

		//rightOperand=AdditiveExpression
		public Assignment getRightOperandAssignment_1_0_0_2() { return cRightOperandAssignment_1_0_0_2; }

		//AdditiveExpression
		public RuleCall getRightOperandAdditiveExpressionParserRuleCall_1_0_0_2_0() { return cRightOperandAdditiveExpressionParserRuleCall_1_0_0_2_0; }

		//{TypeTestExpression.expression=current} "is" type=DataTypeSpecifier
		public Group getGroup_1_0_1() { return cGroup_1_0_1; }

		//{TypeTestExpression.expression=current}
		public Action getTypeTestExpressionExpressionAction_1_0_1_0() { return cTypeTestExpressionExpressionAction_1_0_1_0; }

		//"is"
		public Keyword getIsKeyword_1_0_1_1() { return cIsKeyword_1_0_1_1; }

		//type=DataTypeSpecifier
		public Assignment getTypeAssignment_1_0_1_2() { return cTypeAssignment_1_0_1_2; }

		//DataTypeSpecifier
		public RuleCall getTypeDataTypeSpecifierParserRuleCall_1_0_1_2_0() { return cTypeDataTypeSpecifierParserRuleCall_1_0_1_2_0; }
	}

	public class AdditiveExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "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 Action cAdditiveExpressionLeftOperandAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Assignment cOperatorAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cOperatorAdditiveOperatorEnumRuleCall_1_1_0 = (RuleCall)cOperatorAssignment_1_1.eContents().get(0);
		private final Assignment cRightOperandAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightOperandMultiplicativeExpressionParserRuleCall_1_2_0 = (RuleCall)cRightOperandAssignment_1_2.eContents().get(0);
		
		//AdditiveExpression returns Expression:
		//	MultiplicativeExpression ({AdditiveExpression.leftOperand=current} operator=AdditiveOperator
		//	rightOperand=MultiplicativeExpression)*;
		public ParserRule getRule() { return rule; }

		//MultiplicativeExpression ({AdditiveExpression.leftOperand=current} operator=AdditiveOperator
		//rightOperand=MultiplicativeExpression)*
		public Group getGroup() { return cGroup; }

		//MultiplicativeExpression
		public RuleCall getMultiplicativeExpressionParserRuleCall_0() { return cMultiplicativeExpressionParserRuleCall_0; }

		//({AdditiveExpression.leftOperand=current} operator=AdditiveOperator rightOperand=MultiplicativeExpression)*
		public Group getGroup_1() { return cGroup_1; }

		//{AdditiveExpression.leftOperand=current}
		public Action getAdditiveExpressionLeftOperandAction_1_0() { return cAdditiveExpressionLeftOperandAction_1_0; }

		//operator=AdditiveOperator
		public Assignment getOperatorAssignment_1_1() { return cOperatorAssignment_1_1; }

		//AdditiveOperator
		public RuleCall getOperatorAdditiveOperatorEnumRuleCall_1_1_0() { return cOperatorAdditiveOperatorEnumRuleCall_1_1_0; }

		//rightOperand=MultiplicativeExpression
		public Assignment getRightOperandAssignment_1_2() { return cRightOperandAssignment_1_2; }

		//MultiplicativeExpression
		public RuleCall getRightOperandMultiplicativeExpressionParserRuleCall_1_2_0() { return cRightOperandMultiplicativeExpressionParserRuleCall_1_2_0; }
	}

	public class MultiplicativeExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MultiplicativeExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cPowerExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cMultiplicativeExpressionLeftOperandAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Assignment cOperatorAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cOperatorMultiplicativeOperatorEnumRuleCall_1_1_0 = (RuleCall)cOperatorAssignment_1_1.eContents().get(0);
		private final Assignment cRightOperandAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightOperandPowerExpressionParserRuleCall_1_2_0 = (RuleCall)cRightOperandAssignment_1_2.eContents().get(0);
		
		//MultiplicativeExpression returns Expression:
		//	PowerExpression ({MultiplicativeExpression.leftOperand=current} operator=MultiplicativeOperator
		//	rightOperand=PowerExpression)*;
		public ParserRule getRule() { return rule; }

		//PowerExpression ({MultiplicativeExpression.leftOperand=current} operator=MultiplicativeOperator
		//rightOperand=PowerExpression)*
		public Group getGroup() { return cGroup; }

		//PowerExpression
		public RuleCall getPowerExpressionParserRuleCall_0() { return cPowerExpressionParserRuleCall_0; }

		//({MultiplicativeExpression.leftOperand=current} operator=MultiplicativeOperator rightOperand=PowerExpression)*
		public Group getGroup_1() { return cGroup_1; }

		//{MultiplicativeExpression.leftOperand=current}
		public Action getMultiplicativeExpressionLeftOperandAction_1_0() { return cMultiplicativeExpressionLeftOperandAction_1_0; }

		//operator=MultiplicativeOperator
		public Assignment getOperatorAssignment_1_1() { return cOperatorAssignment_1_1; }

		//MultiplicativeOperator
		public RuleCall getOperatorMultiplicativeOperatorEnumRuleCall_1_1_0() { return cOperatorMultiplicativeOperatorEnumRuleCall_1_1_0; }

		//rightOperand=PowerExpression
		public Assignment getRightOperandAssignment_1_2() { return cRightOperandAssignment_1_2; }

		//PowerExpression
		public RuleCall getRightOperandPowerExpressionParserRuleCall_1_2_0() { return cRightOperandPowerExpressionParserRuleCall_1_2_0; }
	}

	public class PowerExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "PowerExpression");
		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 Action cPowerExpressionOperandAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Assignment cOperatorAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cOperatorPowerOperatorEnumRuleCall_1_1_0 = (RuleCall)cOperatorAssignment_1_1.eContents().get(0);
		private final Assignment cExponentAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cExponentUnaryExpressionParserRuleCall_1_2_0 = (RuleCall)cExponentAssignment_1_2.eContents().get(0);
		
		//PowerExpression returns Expression:
		//	UnaryExpression ({PowerExpression.operand=current} operator=PowerOperator exponent=UnaryExpression)?;
		public ParserRule getRule() { return rule; }

		//UnaryExpression ({PowerExpression.operand=current} operator=PowerOperator exponent=UnaryExpression)?
		public Group getGroup() { return cGroup; }

		//UnaryExpression
		public RuleCall getUnaryExpressionParserRuleCall_0() { return cUnaryExpressionParserRuleCall_0; }

		//({PowerExpression.operand=current} operator=PowerOperator exponent=UnaryExpression)?
		public Group getGroup_1() { return cGroup_1; }

		//{PowerExpression.operand=current}
		public Action getPowerExpressionOperandAction_1_0() { return cPowerExpressionOperandAction_1_0; }

		//operator=PowerOperator
		public Assignment getOperatorAssignment_1_1() { return cOperatorAssignment_1_1; }

		//PowerOperator
		public RuleCall getOperatorPowerOperatorEnumRuleCall_1_1_0() { return cOperatorPowerOperatorEnumRuleCall_1_1_0; }

		//exponent=UnaryExpression
		public Assignment getExponentAssignment_1_2() { return cExponentAssignment_1_2; }

		//UnaryExpression
		public RuleCall getExponentUnaryExpressionParserRuleCall_1_2_0() { return cExponentUnaryExpressionParserRuleCall_1_2_0; }
	}

	public class UnaryExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "UnaryExpression");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cPostfixExpressionParserRuleCall_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 Assignment cOperatorAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cOperatorUnaryOperatorEnumRuleCall_1_1_0 = (RuleCall)cOperatorAssignment_1_1.eContents().get(0);
		private final Assignment cOperandAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cOperandPostfixExpressionParserRuleCall_1_2_0 = (RuleCall)cOperandAssignment_1_2.eContents().get(0);
		
		//UnaryExpression returns Expression:
		//	PostfixExpression | {UnaryExpression} operator=UnaryOperator operand=PostfixExpression;
		public ParserRule getRule() { return rule; }

		//PostfixExpression | {UnaryExpression} operator=UnaryOperator operand=PostfixExpression
		public Alternatives getAlternatives() { return cAlternatives; }

		//PostfixExpression
		public RuleCall getPostfixExpressionParserRuleCall_0() { return cPostfixExpressionParserRuleCall_0; }

		//{UnaryExpression} operator=UnaryOperator operand=PostfixExpression
		public Group getGroup_1() { return cGroup_1; }

		//{UnaryExpression}
		public Action getUnaryExpressionAction_1_0() { return cUnaryExpressionAction_1_0; }

		//operator=UnaryOperator
		public Assignment getOperatorAssignment_1_1() { return cOperatorAssignment_1_1; }

		//UnaryOperator
		public RuleCall getOperatorUnaryOperatorEnumRuleCall_1_1_0() { return cOperatorUnaryOperatorEnumRuleCall_1_1_0; }

		//operand=PostfixExpression
		public Assignment getOperandAssignment_1_2() { return cOperandAssignment_1_2; }

		//PostfixExpression
		public RuleCall getOperandPostfixExpressionParserRuleCall_1_2_0() { return cOperandPostfixExpressionParserRuleCall_1_2_0; }
	}

	public class PostfixExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "PostfixExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cArrayElementAccessParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cPostfixExpressionOperandAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Assignment cOperatorAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cOperatorPostfixOperatorEnumRuleCall_1_1_0 = (RuleCall)cOperatorAssignment_1_1.eContents().get(0);
		
		//PostfixExpression returns Expression:
		//	ArrayElementAccess ({PostfixExpression.operand=current} operator=PostfixOperator)?;
		public ParserRule getRule() { return rule; }

		//ArrayElementAccess ({PostfixExpression.operand=current} operator=PostfixOperator)?
		public Group getGroup() { return cGroup; }

		//ArrayElementAccess
		public RuleCall getArrayElementAccessParserRuleCall_0() { return cArrayElementAccessParserRuleCall_0; }

		//({PostfixExpression.operand=current} operator=PostfixOperator)?
		public Group getGroup_1() { return cGroup_1; }

		//{PostfixExpression.operand=current}
		public Action getPostfixExpressionOperandAction_1_0() { return cPostfixExpressionOperandAction_1_0; }

		//operator=PostfixOperator
		public Assignment getOperatorAssignment_1_1() { return cOperatorAssignment_1_1; }

		//PostfixOperator
		public RuleCall getOperatorPostfixOperatorEnumRuleCall_1_1_0() { return cOperatorPostfixOperatorEnumRuleCall_1_1_0; }
	}

	public class ArrayElementAccessElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ArrayElementAccess");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cMemberFeatureCallParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cArrayElementAccessArrayAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cLeftSquareBracketKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cSubscriptsAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cSubscriptsArraySubscriptParserRuleCall_1_2_0 = (RuleCall)cSubscriptsAssignment_1_2.eContents().get(0);
		private final Group cGroup_1_3 = (Group)cGroup_1.eContents().get(3);
		private final Keyword cCommaKeyword_1_3_0 = (Keyword)cGroup_1_3.eContents().get(0);
		private final Assignment cSubscriptsAssignment_1_3_1 = (Assignment)cGroup_1_3.eContents().get(1);
		private final RuleCall cSubscriptsArraySubscriptParserRuleCall_1_3_1_0 = (RuleCall)cSubscriptsAssignment_1_3_1.eContents().get(0);
		private final Keyword cRightSquareBracketKeyword_1_4 = (Keyword)cGroup_1.eContents().get(4);
		
		//ArrayElementAccess returns Expression:
		//	MemberFeatureCall ({ArrayElementAccess.array=current} "[" subscripts+=ArraySubscript ("," subscripts+=ArraySubscript)*
		//	"]")*;
		public ParserRule getRule() { return rule; }

		//MemberFeatureCall ({ArrayElementAccess.array=current} "[" subscripts+=ArraySubscript ("," subscripts+=ArraySubscript)*
		//"]")*
		public Group getGroup() { return cGroup; }

		//MemberFeatureCall
		public RuleCall getMemberFeatureCallParserRuleCall_0() { return cMemberFeatureCallParserRuleCall_0; }

		//({ArrayElementAccess.array=current} "[" subscripts+=ArraySubscript ("," subscripts+=ArraySubscript)* "]")*
		public Group getGroup_1() { return cGroup_1; }

		//{ArrayElementAccess.array=current}
		public Action getArrayElementAccessArrayAction_1_0() { return cArrayElementAccessArrayAction_1_0; }

		//"["
		public Keyword getLeftSquareBracketKeyword_1_1() { return cLeftSquareBracketKeyword_1_1; }

		//subscripts+=ArraySubscript
		public Assignment getSubscriptsAssignment_1_2() { return cSubscriptsAssignment_1_2; }

		//ArraySubscript
		public RuleCall getSubscriptsArraySubscriptParserRuleCall_1_2_0() { return cSubscriptsArraySubscriptParserRuleCall_1_2_0; }

		//("," subscripts+=ArraySubscript)*
		public Group getGroup_1_3() { return cGroup_1_3; }

		//","
		public Keyword getCommaKeyword_1_3_0() { return cCommaKeyword_1_3_0; }

		//subscripts+=ArraySubscript
		public Assignment getSubscriptsAssignment_1_3_1() { return cSubscriptsAssignment_1_3_1; }

		//ArraySubscript
		public RuleCall getSubscriptsArraySubscriptParserRuleCall_1_3_1_0() { return cSubscriptsArraySubscriptParserRuleCall_1_3_1_0; }

		//"]"
		public Keyword getRightSquareBracketKeyword_1_4() { return cRightSquareBracketKeyword_1_4; }
	}

	public class MemberFeatureCallElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MemberFeatureCall");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cPrimaryExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
		private final Group cGroup_1_0 = (Group)cAlternatives_1.eContents().get(0);
		private final Action cMemberVariableAccessTargetAction_1_0_0 = (Action)cGroup_1_0.eContents().get(0);
		private final Keyword cFullStopKeyword_1_0_1 = (Keyword)cGroup_1_0.eContents().get(1);
		private final Assignment cMemberVariableAssignment_1_0_2 = (Assignment)cGroup_1_0.eContents().get(2);
		private final CrossReference cMemberVariableCallableElementCrossReference_1_0_2_0 = (CrossReference)cMemberVariableAssignment_1_0_2.eContents().get(0);
		private final RuleCall cMemberVariableCallableElementValidIDParserRuleCall_1_0_2_0_1 = (RuleCall)cMemberVariableCallableElementCrossReference_1_0_2_0.eContents().get(1);
		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
		private final Action cFunctionCallArgumentsAction_1_1_0 = (Action)cGroup_1_1.eContents().get(0);
		private final Keyword cFullStopKeyword_1_1_1 = (Keyword)cGroup_1_1.eContents().get(1);
		private final Assignment cFeatureAssignment_1_1_2 = (Assignment)cGroup_1_1.eContents().get(2);
		private final CrossReference cFeatureCallableElementCrossReference_1_1_2_0 = (CrossReference)cFeatureAssignment_1_1_2.eContents().get(0);
		private final RuleCall cFeatureCallableElementValidIDParserRuleCall_1_1_2_0_1 = (RuleCall)cFeatureCallableElementCrossReference_1_1_2_0.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_1_1_3 = (Keyword)cGroup_1_1.eContents().get(3);
		private final Group cGroup_1_1_4 = (Group)cGroup_1_1.eContents().get(4);
		private final Assignment cArgumentsAssignment_1_1_4_0 = (Assignment)cGroup_1_1_4.eContents().get(0);
		private final RuleCall cArgumentsExpressionParserRuleCall_1_1_4_0_0 = (RuleCall)cArgumentsAssignment_1_1_4_0.eContents().get(0);
		private final Group cGroup_1_1_4_1 = (Group)cGroup_1_1_4.eContents().get(1);
		private final Keyword cCommaKeyword_1_1_4_1_0 = (Keyword)cGroup_1_1_4_1.eContents().get(0);
		private final Assignment cArgumentsAssignment_1_1_4_1_1 = (Assignment)cGroup_1_1_4_1.eContents().get(1);
		private final RuleCall cArgumentsExpressionParserRuleCall_1_1_4_1_1_0 = (RuleCall)cArgumentsAssignment_1_1_4_1_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_1_1_5 = (Keyword)cGroup_1_1.eContents().get(5);
		private final Group cGroup_1_2 = (Group)cAlternatives_1.eContents().get(2);
		private final Action cIterationCallTargetAction_1_2_0 = (Action)cGroup_1_2.eContents().get(0);
		private final Keyword cFullStopKeyword_1_2_1 = (Keyword)cGroup_1_2.eContents().get(1);
		private final Assignment cIdentifierAssignment_1_2_2 = (Assignment)cGroup_1_2.eContents().get(2);
		private final RuleCall cIdentifierValidIDParserRuleCall_1_2_2_0 = (RuleCall)cIdentifierAssignment_1_2_2.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_1_2_3 = (Keyword)cGroup_1_2.eContents().get(3);
		private final Assignment cVariablesAssignment_1_2_4 = (Assignment)cGroup_1_2.eContents().get(4);
		private final RuleCall cVariablesIterationVariableParserRuleCall_1_2_4_0 = (RuleCall)cVariablesAssignment_1_2_4.eContents().get(0);
		private final Group cGroup_1_2_5 = (Group)cGroup_1_2.eContents().get(5);
		private final Keyword cCommaKeyword_1_2_5_0 = (Keyword)cGroup_1_2_5.eContents().get(0);
		private final Assignment cVariablesAssignment_1_2_5_1 = (Assignment)cGroup_1_2_5.eContents().get(1);
		private final RuleCall cVariablesIterationVariableParserRuleCall_1_2_5_1_0 = (RuleCall)cVariablesAssignment_1_2_5_1.eContents().get(0);
		private final Group cGroup_1_2_6 = (Group)cGroup_1_2.eContents().get(6);
		private final Keyword cSemicolonKeyword_1_2_6_0 = (Keyword)cGroup_1_2_6.eContents().get(0);
		private final Assignment cAccumulatorAssignment_1_2_6_1 = (Assignment)cGroup_1_2_6.eContents().get(1);
		private final RuleCall cAccumulatorIterationAccumulatorParserRuleCall_1_2_6_1_0 = (RuleCall)cAccumulatorAssignment_1_2_6_1.eContents().get(0);
		private final Group cGroup_1_2_7 = (Group)cGroup_1_2.eContents().get(7);
		private final Keyword cSemicolonKeyword_1_2_7_0 = (Keyword)cGroup_1_2_7.eContents().get(0);
		private final Assignment cBreakConditionAssignment_1_2_7_1 = (Assignment)cGroup_1_2_7.eContents().get(1);
		private final RuleCall cBreakConditionExpressionParserRuleCall_1_2_7_1_0 = (RuleCall)cBreakConditionAssignment_1_2_7_1.eContents().get(0);
		private final Keyword cVerticalLineKeyword_1_2_8 = (Keyword)cGroup_1_2.eContents().get(8);
		private final Assignment cExpressionAssignment_1_2_9 = (Assignment)cGroup_1_2.eContents().get(9);
		private final RuleCall cExpressionExpressionParserRuleCall_1_2_9_0 = (RuleCall)cExpressionAssignment_1_2_9.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_1_2_10 = (Keyword)cGroup_1_2.eContents().get(10);
		
		//MemberFeatureCall returns Expression:
		//	PrimaryExpression ({MemberVariableAccess.target=current} "." memberVariable=[CallableElement|ValidID] |
		//	{FunctionCall.arguments+=current} "." feature=[CallableElement|ValidID] "(" (arguments+=Expression (","
		//	arguments+=Expression)*)? ")" | {IterationCall.target=current} "." identifier=ValidID "(" variables+=IterationVariable
		//	("," variables+=IterationVariable)* (";" accumulator=IterationAccumulator)? (";" breakCondition=Expression)? "|"
		//	expression=Expression ")")*;
		public ParserRule getRule() { return rule; }

		//PrimaryExpression ({MemberVariableAccess.target=current} "." memberVariable=[CallableElement|ValidID] |
		//{FunctionCall.arguments+=current} "." feature=[CallableElement|ValidID] "(" (arguments+=Expression (","
		//arguments+=Expression)*)? ")" | {IterationCall.target=current} "." identifier=ValidID "(" variables+=IterationVariable
		//("," variables+=IterationVariable)* (";" accumulator=IterationAccumulator)? (";" breakCondition=Expression)? "|"
		//expression=Expression ")")*
		public Group getGroup() { return cGroup; }

		//PrimaryExpression
		public RuleCall getPrimaryExpressionParserRuleCall_0() { return cPrimaryExpressionParserRuleCall_0; }

		//({MemberVariableAccess.target=current} "." memberVariable=[CallableElement|ValidID] | {FunctionCall.arguments+=current}
		//"." feature=[CallableElement|ValidID] "(" (arguments+=Expression ("," arguments+=Expression)*)? ")" |
		//{IterationCall.target=current} "." identifier=ValidID "(" variables+=IterationVariable (","
		//variables+=IterationVariable)* (";" accumulator=IterationAccumulator)? (";" breakCondition=Expression)? "|"
		//expression=Expression ")")*
		public Alternatives getAlternatives_1() { return cAlternatives_1; }

		//{MemberVariableAccess.target=current} "." memberVariable=[CallableElement|ValidID]
		public Group getGroup_1_0() { return cGroup_1_0; }

		//{MemberVariableAccess.target=current}
		public Action getMemberVariableAccessTargetAction_1_0_0() { return cMemberVariableAccessTargetAction_1_0_0; }

		//"."
		public Keyword getFullStopKeyword_1_0_1() { return cFullStopKeyword_1_0_1; }

		//memberVariable=[CallableElement|ValidID]
		public Assignment getMemberVariableAssignment_1_0_2() { return cMemberVariableAssignment_1_0_2; }

		//[CallableElement|ValidID]
		public CrossReference getMemberVariableCallableElementCrossReference_1_0_2_0() { return cMemberVariableCallableElementCrossReference_1_0_2_0; }

		//ValidID
		public RuleCall getMemberVariableCallableElementValidIDParserRuleCall_1_0_2_0_1() { return cMemberVariableCallableElementValidIDParserRuleCall_1_0_2_0_1; }

		//{FunctionCall.arguments+=current} "." feature=[CallableElement|ValidID] "(" (arguments+=Expression (","
		//arguments+=Expression)*)? ")"
		public Group getGroup_1_1() { return cGroup_1_1; }

		//{FunctionCall.arguments+=current}
		public Action getFunctionCallArgumentsAction_1_1_0() { return cFunctionCallArgumentsAction_1_1_0; }

		//"."
		public Keyword getFullStopKeyword_1_1_1() { return cFullStopKeyword_1_1_1; }

		//feature=[CallableElement|ValidID]
		public Assignment getFeatureAssignment_1_1_2() { return cFeatureAssignment_1_1_2; }

		//[CallableElement|ValidID]
		public CrossReference getFeatureCallableElementCrossReference_1_1_2_0() { return cFeatureCallableElementCrossReference_1_1_2_0; }

		//ValidID
		public RuleCall getFeatureCallableElementValidIDParserRuleCall_1_1_2_0_1() { return cFeatureCallableElementValidIDParserRuleCall_1_1_2_0_1; }

		//"("
		public Keyword getLeftParenthesisKeyword_1_1_3() { return cLeftParenthesisKeyword_1_1_3; }

		//(arguments+=Expression ("," arguments+=Expression)*)?
		public Group getGroup_1_1_4() { return cGroup_1_1_4; }

		//arguments+=Expression
		public Assignment getArgumentsAssignment_1_1_4_0() { return cArgumentsAssignment_1_1_4_0; }

		//Expression
		public RuleCall getArgumentsExpressionParserRuleCall_1_1_4_0_0() { return cArgumentsExpressionParserRuleCall_1_1_4_0_0; }

		//("," arguments+=Expression)*
		public Group getGroup_1_1_4_1() { return cGroup_1_1_4_1; }

		//","
		public Keyword getCommaKeyword_1_1_4_1_0() { return cCommaKeyword_1_1_4_1_0; }

		//arguments+=Expression
		public Assignment getArgumentsAssignment_1_1_4_1_1() { return cArgumentsAssignment_1_1_4_1_1; }

		//Expression
		public RuleCall getArgumentsExpressionParserRuleCall_1_1_4_1_1_0() { return cArgumentsExpressionParserRuleCall_1_1_4_1_1_0; }

		//")"
		public Keyword getRightParenthesisKeyword_1_1_5() { return cRightParenthesisKeyword_1_1_5; }

		//{IterationCall.target=current} "." identifier=ValidID "(" variables+=IterationVariable (","
		//variables+=IterationVariable)* (";" accumulator=IterationAccumulator)? (";" breakCondition=Expression)? "|"
		//expression=Expression ")"
		public Group getGroup_1_2() { return cGroup_1_2; }

		//{IterationCall.target=current}
		public Action getIterationCallTargetAction_1_2_0() { return cIterationCallTargetAction_1_2_0; }

		//"."
		public Keyword getFullStopKeyword_1_2_1() { return cFullStopKeyword_1_2_1; }

		//identifier=ValidID
		public Assignment getIdentifierAssignment_1_2_2() { return cIdentifierAssignment_1_2_2; }

		//ValidID
		public RuleCall getIdentifierValidIDParserRuleCall_1_2_2_0() { return cIdentifierValidIDParserRuleCall_1_2_2_0; }

		//"("
		public Keyword getLeftParenthesisKeyword_1_2_3() { return cLeftParenthesisKeyword_1_2_3; }

		//variables+=IterationVariable
		public Assignment getVariablesAssignment_1_2_4() { return cVariablesAssignment_1_2_4; }

		//IterationVariable
		public RuleCall getVariablesIterationVariableParserRuleCall_1_2_4_0() { return cVariablesIterationVariableParserRuleCall_1_2_4_0; }

		//("," variables+=IterationVariable)*
		public Group getGroup_1_2_5() { return cGroup_1_2_5; }

		//","
		public Keyword getCommaKeyword_1_2_5_0() { return cCommaKeyword_1_2_5_0; }

		//variables+=IterationVariable
		public Assignment getVariablesAssignment_1_2_5_1() { return cVariablesAssignment_1_2_5_1; }

		//IterationVariable
		public RuleCall getVariablesIterationVariableParserRuleCall_1_2_5_1_0() { return cVariablesIterationVariableParserRuleCall_1_2_5_1_0; }

		//(";" accumulator=IterationAccumulator)?
		public Group getGroup_1_2_6() { return cGroup_1_2_6; }

		//";"
		public Keyword getSemicolonKeyword_1_2_6_0() { return cSemicolonKeyword_1_2_6_0; }

		//accumulator=IterationAccumulator
		public Assignment getAccumulatorAssignment_1_2_6_1() { return cAccumulatorAssignment_1_2_6_1; }

		//IterationAccumulator
		public RuleCall getAccumulatorIterationAccumulatorParserRuleCall_1_2_6_1_0() { return cAccumulatorIterationAccumulatorParserRuleCall_1_2_6_1_0; }

		//(";" breakCondition=Expression)?
		public Group getGroup_1_2_7() { return cGroup_1_2_7; }

		//";"
		public Keyword getSemicolonKeyword_1_2_7_0() { return cSemicolonKeyword_1_2_7_0; }

		//breakCondition=Expression
		public Assignment getBreakConditionAssignment_1_2_7_1() { return cBreakConditionAssignment_1_2_7_1; }

		//Expression
		public RuleCall getBreakConditionExpressionParserRuleCall_1_2_7_1_0() { return cBreakConditionExpressionParserRuleCall_1_2_7_1_0; }

		//"|"
		public Keyword getVerticalLineKeyword_1_2_8() { return cVerticalLineKeyword_1_2_8; }

		//expression=Expression
		public Assignment getExpressionAssignment_1_2_9() { return cExpressionAssignment_1_2_9; }

		//Expression
		public RuleCall getExpressionExpressionParserRuleCall_1_2_9_0() { return cExpressionExpressionParserRuleCall_1_2_9_0; }

		//")"
		public Keyword getRightParenthesisKeyword_1_2_10() { return cRightParenthesisKeyword_1_2_10; }
	}

	public class AssignableMemberFeatureCallElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "AssignableMemberFeatureCall");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cAssignablePrimaryExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cMemberVariableAccessTargetAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cFullStopKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cMemberVariableAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final CrossReference cMemberVariableCallableElementCrossReference_1_2_0 = (CrossReference)cMemberVariableAssignment_1_2.eContents().get(0);
		private final RuleCall cMemberVariableCallableElementValidIDParserRuleCall_1_2_0_1 = (RuleCall)cMemberVariableCallableElementCrossReference_1_2_0.eContents().get(1);
		
		//AssignableMemberFeatureCall returns Expression:
		//	AssignablePrimaryExpression ({MemberVariableAccess.target=current} "." memberVariable=[CallableElement|ValidID])*;
		public ParserRule getRule() { return rule; }

		//AssignablePrimaryExpression ({MemberVariableAccess.target=current} "." memberVariable=[CallableElement|ValidID])*
		public Group getGroup() { return cGroup; }

		//AssignablePrimaryExpression
		public RuleCall getAssignablePrimaryExpressionParserRuleCall_0() { return cAssignablePrimaryExpressionParserRuleCall_0; }

		//({MemberVariableAccess.target=current} "." memberVariable=[CallableElement|ValidID])*
		public Group getGroup_1() { return cGroup_1; }

		//{MemberVariableAccess.target=current}
		public Action getMemberVariableAccessTargetAction_1_0() { return cMemberVariableAccessTargetAction_1_0; }

		//"."
		public Keyword getFullStopKeyword_1_1() { return cFullStopKeyword_1_1; }

		//memberVariable=[CallableElement|ValidID]
		public Assignment getMemberVariableAssignment_1_2() { return cMemberVariableAssignment_1_2; }

		//[CallableElement|ValidID]
		public CrossReference getMemberVariableCallableElementCrossReference_1_2_0() { return cMemberVariableCallableElementCrossReference_1_2_0; }

		//ValidID
		public RuleCall getMemberVariableCallableElementValidIDParserRuleCall_1_2_0_1() { return cMemberVariableCallableElementValidIDParserRuleCall_1_2_0_1; }
	}

	public class IterationVariableElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "IterationVariable");
		private final Assignment cNameAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cNameValidIDParserRuleCall_0 = (RuleCall)cNameAssignment.eContents().get(0);
		
		//IterationVariable:
		//	name=ValidID;
		public ParserRule getRule() { return rule; }

		//name=ValidID
		public Assignment getNameAssignment() { return cNameAssignment; }

		//ValidID
		public RuleCall getNameValidIDParserRuleCall_0() { return cNameValidIDParserRuleCall_0; }
	}

	public class IterationAccumulatorElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "IterationAccumulator");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cNameValidIDParserRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
		private final Keyword cEqualsSignKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cInitializerAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cInitializerExpressionParserRuleCall_2_0 = (RuleCall)cInitializerAssignment_2.eContents().get(0);
		
		//IterationAccumulator:
		//	name=ValidID "=" initializer=Expression;
		public ParserRule getRule() { return rule; }

		//name=ValidID "=" initializer=Expression
		public Group getGroup() { return cGroup; }

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

		//ValidID
		public RuleCall getNameValidIDParserRuleCall_0_0() { return cNameValidIDParserRuleCall_0_0; }

		//"="
		public Keyword getEqualsSignKeyword_1() { return cEqualsSignKeyword_1; }

		//initializer=Expression
		public Assignment getInitializerAssignment_2() { return cInitializerAssignment_2; }

		//Expression
		public RuleCall getInitializerExpressionParserRuleCall_2_0() { return cInitializerExpressionParserRuleCall_2_0; }
	}

	public class ArraySubscriptElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ArraySubscript");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Assignment cSliceAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
		private final Keyword cSliceColonKeyword_0_0 = (Keyword)cSliceAssignment_0.eContents().get(0);
		private final Assignment cExpressionAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
		private final RuleCall cExpressionExpressionParserRuleCall_1_0 = (RuleCall)cExpressionAssignment_1.eContents().get(0);
		
		//ArraySubscript:
		//	slice?=":" | expression=Expression;
		public ParserRule getRule() { return rule; }

		//slice?=":" | expression=Expression
		public Alternatives getAlternatives() { return cAlternatives; }

		//slice?=":"
		public Assignment getSliceAssignment_0() { return cSliceAssignment_0; }

		//":"
		public Keyword getSliceColonKeyword_0_0() { return cSliceColonKeyword_0_0; }

		//expression=Expression
		public Assignment getExpressionAssignment_1() { return cExpressionAssignment_1; }

		//Expression
		public RuleCall getExpressionExpressionParserRuleCall_1_0() { return cExpressionExpressionParserRuleCall_1_0; }
	}

	public class PrimaryExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "PrimaryExpression");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cLiteralParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cFeatureCallParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cDerivativeOperatorParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cUnitConstructionOperatorParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		private final RuleCall cArrayConstructionOperatorParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
		private final RuleCall cArrayConcatenationOperatorParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
		private final RuleCall cParenthesizedExpressionParserRuleCall_6 = (RuleCall)cAlternatives.eContents().get(6);
		private final RuleCall cEndExpressionParserRuleCall_7 = (RuleCall)cAlternatives.eContents().get(7);
		private final RuleCall cAlgorithmExpressionParserRuleCall_8 = (RuleCall)cAlternatives.eContents().get(8);
		
		//PrimaryExpression returns Expression:
		//	Literal | FeatureCall | DerivativeOperator | UnitConstructionOperator | ArrayConstructionOperator |
		//	ArrayConcatenationOperator | ParenthesizedExpression | EndExpression | AlgorithmExpression;
		public ParserRule getRule() { return rule; }

		//Literal | FeatureCall | DerivativeOperator | UnitConstructionOperator | ArrayConstructionOperator |
		//ArrayConcatenationOperator | ParenthesizedExpression | EndExpression | AlgorithmExpression
		public Alternatives getAlternatives() { return cAlternatives; }

		//Literal
		public RuleCall getLiteralParserRuleCall_0() { return cLiteralParserRuleCall_0; }

		//FeatureCall
		public RuleCall getFeatureCallParserRuleCall_1() { return cFeatureCallParserRuleCall_1; }

		//DerivativeOperator
		public RuleCall getDerivativeOperatorParserRuleCall_2() { return cDerivativeOperatorParserRuleCall_2; }

		//UnitConstructionOperator
		public RuleCall getUnitConstructionOperatorParserRuleCall_3() { return cUnitConstructionOperatorParserRuleCall_3; }

		//ArrayConstructionOperator
		public RuleCall getArrayConstructionOperatorParserRuleCall_4() { return cArrayConstructionOperatorParserRuleCall_4; }

		//ArrayConcatenationOperator
		public RuleCall getArrayConcatenationOperatorParserRuleCall_5() { return cArrayConcatenationOperatorParserRuleCall_5; }

		//ParenthesizedExpression
		public RuleCall getParenthesizedExpressionParserRuleCall_6() { return cParenthesizedExpressionParserRuleCall_6; }

		//EndExpression
		public RuleCall getEndExpressionParserRuleCall_7() { return cEndExpressionParserRuleCall_7; }

		//AlgorithmExpression
		public RuleCall getAlgorithmExpressionParserRuleCall_8() { return cAlgorithmExpressionParserRuleCall_8; }
	}

	public class AssignablePrimaryExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "AssignablePrimaryExpression");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cFeatureCallParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cParenthesizedExpressionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//AssignablePrimaryExpression returns Expression:
		//	FeatureCall | ParenthesizedExpression;
		public ParserRule getRule() { return rule; }

		//FeatureCall | ParenthesizedExpression
		public Alternatives getAlternatives() { return cAlternatives; }

		//FeatureCall
		public RuleCall getFeatureCallParserRuleCall_0() { return cFeatureCallParserRuleCall_0; }

		//ParenthesizedExpression
		public RuleCall getParenthesizedExpressionParserRuleCall_1() { return cParenthesizedExpressionParserRuleCall_1; }
	}

	public class LiteralElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Literal");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cNumericLiteralParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cBooleanLiteralParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cStringLiteralParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		
		//Literal:
		//	NumericLiteral | BooleanLiteral | StringLiteral;
		public ParserRule getRule() { return rule; }

		//NumericLiteral | BooleanLiteral | StringLiteral
		public Alternatives getAlternatives() { return cAlternatives; }

		//NumericLiteral
		public RuleCall getNumericLiteralParserRuleCall_0() { return cNumericLiteralParserRuleCall_0; }

		//BooleanLiteral
		public RuleCall getBooleanLiteralParserRuleCall_1() { return cBooleanLiteralParserRuleCall_1; }

		//StringLiteral
		public RuleCall getStringLiteralParserRuleCall_2() { return cStringLiteralParserRuleCall_2; }
	}

	public class NumericLiteralElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "NumericLiteral");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cRealLiteralParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cIntegerLiteralParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//NumericLiteral:
		//	RealLiteral | IntegerLiteral;
		public ParserRule getRule() { return rule; }

		//RealLiteral | IntegerLiteral
		public Alternatives getAlternatives() { return cAlternatives; }

		//RealLiteral
		public RuleCall getRealLiteralParserRuleCall_0() { return cRealLiteralParserRuleCall_0; }

		//IntegerLiteral
		public RuleCall getIntegerLiteralParserRuleCall_1() { return cIntegerLiteralParserRuleCall_1; }
	}

	public class RealLiteralElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RealLiteral");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cValueAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cValueValidDoubleParserRuleCall_0_0 = (RuleCall)cValueAssignment_0.eContents().get(0);
		private final Assignment cModifierAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cModifierValidIDParserRuleCall_1_0 = (RuleCall)cModifierAssignment_1.eContents().get(0);
		private final Assignment cUnitAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cUnitUnitParserRuleCall_2_0 = (RuleCall)cUnitAssignment_2.eContents().get(0);
		
		//RealLiteral:
		//	value=ValidDouble modifier=ValidID? unit=Unit;
		public ParserRule getRule() { return rule; }

		//value=ValidDouble modifier=ValidID? unit=Unit
		public Group getGroup() { return cGroup; }

		//value=ValidDouble
		public Assignment getValueAssignment_0() { return cValueAssignment_0; }

		//ValidDouble
		public RuleCall getValueValidDoubleParserRuleCall_0_0() { return cValueValidDoubleParserRuleCall_0_0; }

		//modifier=ValidID?
		public Assignment getModifierAssignment_1() { return cModifierAssignment_1; }

		//ValidID
		public RuleCall getModifierValidIDParserRuleCall_1_0() { return cModifierValidIDParserRuleCall_1_0; }

		//unit=Unit
		public Assignment getUnitAssignment_2() { return cUnitAssignment_2; }

		//Unit
		public RuleCall getUnitUnitParserRuleCall_2_0() { return cUnitUnitParserRuleCall_2_0; }
	}

	public class IntegerLiteralElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "IntegerLiteral");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cValueAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cValueValidLongParserRuleCall_0_0 = (RuleCall)cValueAssignment_0.eContents().get(0);
		private final Assignment cModifierAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cModifierValidIDParserRuleCall_1_0 = (RuleCall)cModifierAssignment_1.eContents().get(0);
		private final Assignment cUnitAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cUnitUnitParserRuleCall_2_0 = (RuleCall)cUnitAssignment_2.eContents().get(0);
		
		//IntegerLiteral:
		//	value=ValidLong modifier=ValidID? unit=Unit;
		public ParserRule getRule() { return rule; }

		//value=ValidLong modifier=ValidID? unit=Unit
		public Group getGroup() { return cGroup; }

		//value=ValidLong
		public Assignment getValueAssignment_0() { return cValueAssignment_0; }

		//ValidLong
		public RuleCall getValueValidLongParserRuleCall_0_0() { return cValueValidLongParserRuleCall_0_0; }

		//modifier=ValidID?
		public Assignment getModifierAssignment_1() { return cModifierAssignment_1; }

		//ValidID
		public RuleCall getModifierValidIDParserRuleCall_1_0() { return cModifierValidIDParserRuleCall_1_0; }

		//unit=Unit
		public Assignment getUnitAssignment_2() { return cUnitAssignment_2; }

		//Unit
		public RuleCall getUnitUnitParserRuleCall_2_0() { return cUnitUnitParserRuleCall_2_0; }
	}

	public class BooleanLiteralElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "BooleanLiteral");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cBooleanLiteralAction_0 = (Action)cGroup.eContents().get(0);
		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
		private final Assignment cTrueAssignment_1_0 = (Assignment)cAlternatives_1.eContents().get(0);
		private final Keyword cTrueTrueKeyword_1_0_0 = (Keyword)cTrueAssignment_1_0.eContents().get(0);
		private final Keyword cFalseKeyword_1_1 = (Keyword)cAlternatives_1.eContents().get(1);
		
		//BooleanLiteral:
		//	{BooleanLiteral} (true?="true" | "false");
		public ParserRule getRule() { return rule; }

		//{BooleanLiteral} (true?="true" | "false")
		public Group getGroup() { return cGroup; }

		//{BooleanLiteral}
		public Action getBooleanLiteralAction_0() { return cBooleanLiteralAction_0; }

		//true?="true" | "false"
		public Alternatives getAlternatives_1() { return cAlternatives_1; }

		//true?="true"
		public Assignment getTrueAssignment_1_0() { return cTrueAssignment_1_0; }

		//"true"
		public Keyword getTrueTrueKeyword_1_0_0() { return cTrueTrueKeyword_1_0_0; }

		//"false"
		public Keyword getFalseKeyword_1_1() { return cFalseKeyword_1_1; }
	}

	public class StringLiteralElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "StringLiteral");
		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cValueSTRINGTerminalRuleCall_0 = (RuleCall)cValueAssignment.eContents().get(0);
		
		//StringLiteral:
		//	value=STRING;
		public ParserRule getRule() { return rule; }

		//value=STRING
		public Assignment getValueAssignment() { return cValueAssignment; }

		//STRING
		public RuleCall getValueSTRINGTerminalRuleCall_0() { return cValueSTRINGTerminalRuleCall_0; }
	}

	public class FeatureCallElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "FeatureCall");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cVariableAccessParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cFunctionCallParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//FeatureCall returns Expression:
		//	VariableAccess | FunctionCall;
		public ParserRule getRule() { return rule; }

		//VariableAccess | FunctionCall
		public Alternatives getAlternatives() { return cAlternatives; }

		//VariableAccess
		public RuleCall getVariableAccessParserRuleCall_0() { return cVariableAccessParserRuleCall_0; }

		//FunctionCall
		public RuleCall getFunctionCallParserRuleCall_1() { return cFunctionCallParserRuleCall_1; }
	}

	public class VariableAccessElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "VariableAccess");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cVariableAccessAction_0 = (Action)cGroup.eContents().get(0);
		private final Assignment cFeatureAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final CrossReference cFeatureCallableElementCrossReference_1_0 = (CrossReference)cFeatureAssignment_1.eContents().get(0);
		private final RuleCall cFeatureCallableElementQualifiedNameParserRuleCall_1_0_1 = (RuleCall)cFeatureCallableElementCrossReference_1_0.eContents().get(1);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cLeftCurlyBracketKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cStepExpressionAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cStepExpressionStepExpressionParserRuleCall_2_1_0 = (RuleCall)cStepExpressionAssignment_2_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
		
		//VariableAccess returns Expression:
		//	{VariableAccess} feature=[CallableElement|QualifiedName] ("{" stepExpression=StepExpression "}")?;
		public ParserRule getRule() { return rule; }

		//{VariableAccess} feature=[CallableElement|QualifiedName] ("{" stepExpression=StepExpression "}")?
		public Group getGroup() { return cGroup; }

		//{VariableAccess}
		public Action getVariableAccessAction_0() { return cVariableAccessAction_0; }

		//feature=[CallableElement|QualifiedName]
		public Assignment getFeatureAssignment_1() { return cFeatureAssignment_1; }

		//[CallableElement|QualifiedName]
		public CrossReference getFeatureCallableElementCrossReference_1_0() { return cFeatureCallableElementCrossReference_1_0; }

		//QualifiedName
		public RuleCall getFeatureCallableElementQualifiedNameParserRuleCall_1_0_1() { return cFeatureCallableElementQualifiedNameParserRuleCall_1_0_1; }

		//("{" stepExpression=StepExpression "}")?
		public Group getGroup_2() { return cGroup_2; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_2_0() { return cLeftCurlyBracketKeyword_2_0; }

		//stepExpression=StepExpression
		public Assignment getStepExpressionAssignment_2_1() { return cStepExpressionAssignment_2_1; }

		//StepExpression
		public RuleCall getStepExpressionStepExpressionParserRuleCall_2_1_0() { return cStepExpressionStepExpressionParserRuleCall_2_1_0; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_2_2() { return cRightCurlyBracketKeyword_2_2; }
	}

	public class FunctionCallElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "FunctionCall");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cFunctionCallAction_0 = (Action)cGroup.eContents().get(0);
		private final Assignment cFeatureAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final CrossReference cFeatureCallableElementCrossReference_1_0 = (CrossReference)cFeatureAssignment_1.eContents().get(0);
		private final RuleCall cFeatureCallableElementQualifiedNameParserRuleCall_1_0_1 = (RuleCall)cFeatureCallableElementCrossReference_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 cArgumentsAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
		private final RuleCall cArgumentsExpressionParserRuleCall_3_0_0 = (RuleCall)cArgumentsAssignment_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 cArgumentsAssignment_3_1_1 = (Assignment)cGroup_3_1.eContents().get(1);
		private final RuleCall cArgumentsExpressionParserRuleCall_3_1_1_0 = (RuleCall)cArgumentsAssignment_3_1_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		//FunctionCall returns Expression:
		//	{FunctionCall} feature=[CallableElement|QualifiedName] "(" (arguments+=Expression ("," arguments+=Expression)*)? ")";
		public ParserRule getRule() { return rule; }

		//{FunctionCall} feature=[CallableElement|QualifiedName] "(" (arguments+=Expression ("," arguments+=Expression)*)? ")"
		public Group getGroup() { return cGroup; }

		//{FunctionCall}
		public Action getFunctionCallAction_0() { return cFunctionCallAction_0; }

		//feature=[CallableElement|QualifiedName]
		public Assignment getFeatureAssignment_1() { return cFeatureAssignment_1; }

		//[CallableElement|QualifiedName]
		public CrossReference getFeatureCallableElementCrossReference_1_0() { return cFeatureCallableElementCrossReference_1_0; }

		//QualifiedName
		public RuleCall getFeatureCallableElementQualifiedNameParserRuleCall_1_0_1() { return cFeatureCallableElementQualifiedNameParserRuleCall_1_0_1; }

		//"("
		public Keyword getLeftParenthesisKeyword_2() { return cLeftParenthesisKeyword_2; }

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

		//arguments+=Expression
		public Assignment getArgumentsAssignment_3_0() { return cArgumentsAssignment_3_0; }

		//Expression
		public RuleCall getArgumentsExpressionParserRuleCall_3_0_0() { return cArgumentsExpressionParserRuleCall_3_0_0; }

		//("," arguments+=Expression)*
		public Group getGroup_3_1() { return cGroup_3_1; }

		//","
		public Keyword getCommaKeyword_3_1_0() { return cCommaKeyword_3_1_0; }

		//arguments+=Expression
		public Assignment getArgumentsAssignment_3_1_1() { return cArgumentsAssignment_3_1_1; }

		//Expression
		public RuleCall getArgumentsExpressionParserRuleCall_3_1_1_0() { return cArgumentsExpressionParserRuleCall_3_1_1_0; }

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

	public class StepExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "StepExpression");
		private final RuleCall cRangeStepExpressionParserRuleCall = (RuleCall)rule.eContents().get(1);
		
		//StepExpression:
		//	RangeStepExpression;
		public ParserRule getRule() { return rule; }

		//RangeStepExpression
		public RuleCall getRangeStepExpressionParserRuleCall() { return cRangeStepExpressionParserRuleCall; }
	}

	public class RangeStepExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RangeStepExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cAdditiveStepExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cRangeStepExpressionStartAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cFullStopFullStopKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cEndAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cEndAdditiveStepExpressionParserRuleCall_1_2_0 = (RuleCall)cEndAssignment_1_2.eContents().get(0);
		
		//RangeStepExpression returns StepExpression:
		//	AdditiveStepExpression ({RangeStepExpression.start=current} ".." end=AdditiveStepExpression)?;
		public ParserRule getRule() { return rule; }

		//AdditiveStepExpression ({RangeStepExpression.start=current} ".." end=AdditiveStepExpression)?
		public Group getGroup() { return cGroup; }

		//AdditiveStepExpression
		public RuleCall getAdditiveStepExpressionParserRuleCall_0() { return cAdditiveStepExpressionParserRuleCall_0; }

		//({RangeStepExpression.start=current} ".." end=AdditiveStepExpression)?
		public Group getGroup_1() { return cGroup_1; }

		//{RangeStepExpression.start=current}
		public Action getRangeStepExpressionStartAction_1_0() { return cRangeStepExpressionStartAction_1_0; }

		//".."
		public Keyword getFullStopFullStopKeyword_1_1() { return cFullStopFullStopKeyword_1_1; }

		//end=AdditiveStepExpression
		public Assignment getEndAssignment_1_2() { return cEndAssignment_1_2; }

		//AdditiveStepExpression
		public RuleCall getEndAdditiveStepExpressionParserRuleCall_1_2_0() { return cEndAdditiveStepExpressionParserRuleCall_1_2_0; }
	}

	public class AdditiveStepExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "AdditiveStepExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cNegateStepExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cAdditiveStepExpressionLeftOperandAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Assignment cOperatorAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cOperatorAdditiveOperatorEnumRuleCall_1_1_0 = (RuleCall)cOperatorAssignment_1_1.eContents().get(0);
		private final Assignment cRightOperandAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightOperandNegateStepExpressionParserRuleCall_1_2_0 = (RuleCall)cRightOperandAssignment_1_2.eContents().get(0);
		
		//AdditiveStepExpression returns StepExpression:
		//	NegateStepExpression ({AdditiveStepExpression.leftOperand=current} operator=AdditiveOperator
		//	rightOperand=NegateStepExpression)*;
		public ParserRule getRule() { return rule; }

		//NegateStepExpression ({AdditiveStepExpression.leftOperand=current} operator=AdditiveOperator
		//rightOperand=NegateStepExpression)*
		public Group getGroup() { return cGroup; }

		//NegateStepExpression
		public RuleCall getNegateStepExpressionParserRuleCall_0() { return cNegateStepExpressionParserRuleCall_0; }

		//({AdditiveStepExpression.leftOperand=current} operator=AdditiveOperator rightOperand=NegateStepExpression)*
		public Group getGroup_1() { return cGroup_1; }

		//{AdditiveStepExpression.leftOperand=current}
		public Action getAdditiveStepExpressionLeftOperandAction_1_0() { return cAdditiveStepExpressionLeftOperandAction_1_0; }

		//operator=AdditiveOperator
		public Assignment getOperatorAssignment_1_1() { return cOperatorAssignment_1_1; }

		//AdditiveOperator
		public RuleCall getOperatorAdditiveOperatorEnumRuleCall_1_1_0() { return cOperatorAdditiveOperatorEnumRuleCall_1_1_0; }

		//rightOperand=NegateStepExpression
		public Assignment getRightOperandAssignment_1_2() { return cRightOperandAssignment_1_2; }

		//NegateStepExpression
		public RuleCall getRightOperandNegateStepExpressionParserRuleCall_1_2_0() { return cRightOperandNegateStepExpressionParserRuleCall_1_2_0; }
	}

	public class NegateStepExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "NegateStepExpression");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cPrimitiveStepExpressionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Action cNegateStepExpressionAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cHyphenMinusKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cOperandAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cOperandPrimitiveStepExpressionParserRuleCall_1_2_0 = (RuleCall)cOperandAssignment_1_2.eContents().get(0);
		
		//NegateStepExpression returns StepExpression:
		//	PrimitiveStepExpression | {NegateStepExpression} "-" operand=PrimitiveStepExpression;
		public ParserRule getRule() { return rule; }

		//PrimitiveStepExpression | {NegateStepExpression} "-" operand=PrimitiveStepExpression
		public Alternatives getAlternatives() { return cAlternatives; }

		//PrimitiveStepExpression
		public RuleCall getPrimitiveStepExpressionParserRuleCall_0() { return cPrimitiveStepExpressionParserRuleCall_0; }

		//{NegateStepExpression} "-" operand=PrimitiveStepExpression
		public Group getGroup_1() { return cGroup_1; }

		//{NegateStepExpression}
		public Action getNegateStepExpressionAction_1_0() { return cNegateStepExpressionAction_1_0; }

		//"-"
		public Keyword getHyphenMinusKeyword_1_1() { return cHyphenMinusKeyword_1_1; }

		//operand=PrimitiveStepExpression
		public Assignment getOperandAssignment_1_2() { return cOperandAssignment_1_2; }

		//PrimitiveStepExpression
		public RuleCall getOperandPrimitiveStepExpressionParserRuleCall_1_2_0() { return cOperandPrimitiveStepExpressionParserRuleCall_1_2_0; }
	}

	public class PrimitiveStepExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "PrimitiveStepExpression");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cStepLiteralParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cStepNParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//PrimitiveStepExpression returns StepExpression:
		//	StepLiteral | StepN;
		public ParserRule getRule() { return rule; }

		//StepLiteral | StepN
		public Alternatives getAlternatives() { return cAlternatives; }

		//StepLiteral
		public RuleCall getStepLiteralParserRuleCall_0() { return cStepLiteralParserRuleCall_0; }

		//StepN
		public RuleCall getStepNParserRuleCall_1() { return cStepNParserRuleCall_1; }
	}

	public class StepLiteralElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "StepLiteral");
		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cValueValidIntParserRuleCall_0 = (RuleCall)cValueAssignment.eContents().get(0);
		
		//StepLiteral:
		//	value=ValidInt;
		public ParserRule getRule() { return rule; }

		//value=ValidInt
		public Assignment getValueAssignment() { return cValueAssignment; }

		//ValidInt
		public RuleCall getValueValidIntParserRuleCall_0() { return cValueValidIntParserRuleCall_0; }
	}

	public class StepNElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "StepN");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cStepNAction_0 = (Action)cGroup.eContents().get(0);
		private final RuleCall cNTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
		
		//StepN:
		//	{StepN} N;
		public ParserRule getRule() { return rule; }

		//{StepN} N
		public Group getGroup() { return cGroup; }

		//{StepN}
		public Action getStepNAction_0() { return cStepNAction_0; }

		//N
		public RuleCall getNTerminalRuleCall_1() { return cNTerminalRuleCall_1; }
	}

	public class DerivativeOperatorElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "DerivativeOperator");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cDerKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cVariableAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final CrossReference cVariableCallableElementCrossReference_1_0 = (CrossReference)cVariableAssignment_1.eContents().get(0);
		private final RuleCall cVariableCallableElementValidIDParserRuleCall_1_0_1 = (RuleCall)cVariableCallableElementCrossReference_1_0.eContents().get(1);
		
		//DerivativeOperator:
		//	"der" variable=[CallableElement|ValidID];
		public ParserRule getRule() { return rule; }

		//"der" variable=[CallableElement|ValidID]
		public Group getGroup() { return cGroup; }

		//"der"
		public Keyword getDerKeyword_0() { return cDerKeyword_0; }

		//variable=[CallableElement|ValidID]
		public Assignment getVariableAssignment_1() { return cVariableAssignment_1; }

		//[CallableElement|ValidID]
		public CrossReference getVariableCallableElementCrossReference_1_0() { return cVariableCallableElementCrossReference_1_0; }

		//ValidID
		public RuleCall getVariableCallableElementValidIDParserRuleCall_1_0_1() { return cVariableCallableElementValidIDParserRuleCall_1_0_1; }
	}

	public class ArrayConstructionOperatorElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ArrayConstructionOperator");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLeftCurlyBracketKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cExpressionsAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cExpressionsExpressionParserRuleCall_1_0 = (RuleCall)cExpressionsAssignment_1.eContents().get(0);
		private final Alternatives cAlternatives_2 = (Alternatives)cGroup.eContents().get(2);
		private final Group cGroup_2_0 = (Group)cAlternatives_2.eContents().get(0);
		private final Keyword cCommaKeyword_2_0_0 = (Keyword)cGroup_2_0.eContents().get(0);
		private final Assignment cExpressionsAssignment_2_0_1 = (Assignment)cGroup_2_0.eContents().get(1);
		private final RuleCall cExpressionsExpressionParserRuleCall_2_0_1_0 = (RuleCall)cExpressionsAssignment_2_0_1.eContents().get(0);
		private final Group cGroup_2_1 = (Group)cAlternatives_2.eContents().get(1);
		private final Keyword cForKeyword_2_1_0 = (Keyword)cGroup_2_1.eContents().get(0);
		private final Assignment cIterationClausesAssignment_2_1_1 = (Assignment)cGroup_2_1.eContents().get(1);
		private final RuleCall cIterationClausesArrayConstructionIterationClauseParserRuleCall_2_1_1_0 = (RuleCall)cIterationClausesAssignment_2_1_1.eContents().get(0);
		private final Group cGroup_2_1_2 = (Group)cGroup_2_1.eContents().get(2);
		private final Keyword cCommaKeyword_2_1_2_0 = (Keyword)cGroup_2_1_2.eContents().get(0);
		private final Assignment cIterationClausesAssignment_2_1_2_1 = (Assignment)cGroup_2_1_2.eContents().get(1);
		private final RuleCall cIterationClausesArrayConstructionIterationClauseParserRuleCall_2_1_2_1_0 = (RuleCall)cIterationClausesAssignment_2_1_2_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_3 = (Keyword)cGroup.eContents().get(3);
		
		//ArrayConstructionOperator:
		//	"{" expressions+=Expression (("," expressions+=Expression)* | "for" iterationClauses+=ArrayConstructionIterationClause
		//	("," iterationClauses+=ArrayConstructionIterationClause)*) "}";
		public ParserRule getRule() { return rule; }

		//"{" expressions+=Expression (("," expressions+=Expression)* | "for" iterationClauses+=ArrayConstructionIterationClause
		//("," iterationClauses+=ArrayConstructionIterationClause)*) "}"
		public Group getGroup() { return cGroup; }

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

		//expressions+=Expression
		public Assignment getExpressionsAssignment_1() { return cExpressionsAssignment_1; }

		//Expression
		public RuleCall getExpressionsExpressionParserRuleCall_1_0() { return cExpressionsExpressionParserRuleCall_1_0; }

		//("," expressions+=Expression)* | "for" iterationClauses+=ArrayConstructionIterationClause (","
		//iterationClauses+=ArrayConstructionIterationClause)*
		public Alternatives getAlternatives_2() { return cAlternatives_2; }

		//("," expressions+=Expression)*
		public Group getGroup_2_0() { return cGroup_2_0; }

		//","
		public Keyword getCommaKeyword_2_0_0() { return cCommaKeyword_2_0_0; }

		//expressions+=Expression
		public Assignment getExpressionsAssignment_2_0_1() { return cExpressionsAssignment_2_0_1; }

		//Expression
		public RuleCall getExpressionsExpressionParserRuleCall_2_0_1_0() { return cExpressionsExpressionParserRuleCall_2_0_1_0; }

		//"for" iterationClauses+=ArrayConstructionIterationClause ("," iterationClauses+=ArrayConstructionIterationClause)*
		public Group getGroup_2_1() { return cGroup_2_1; }

		//"for"
		public Keyword getForKeyword_2_1_0() { return cForKeyword_2_1_0; }

		//iterationClauses+=ArrayConstructionIterationClause
		public Assignment getIterationClausesAssignment_2_1_1() { return cIterationClausesAssignment_2_1_1; }

		//ArrayConstructionIterationClause
		public RuleCall getIterationClausesArrayConstructionIterationClauseParserRuleCall_2_1_1_0() { return cIterationClausesArrayConstructionIterationClauseParserRuleCall_2_1_1_0; }

		//("," iterationClauses+=ArrayConstructionIterationClause)*
		public Group getGroup_2_1_2() { return cGroup_2_1_2; }

		//","
		public Keyword getCommaKeyword_2_1_2_0() { return cCommaKeyword_2_1_2_0; }

		//iterationClauses+=ArrayConstructionIterationClause
		public Assignment getIterationClausesAssignment_2_1_2_1() { return cIterationClausesAssignment_2_1_2_1; }

		//ArrayConstructionIterationClause
		public RuleCall getIterationClausesArrayConstructionIterationClauseParserRuleCall_2_1_2_1_0() { return cIterationClausesArrayConstructionIterationClauseParserRuleCall_2_1_2_1_0; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_3() { return cRightCurlyBracketKeyword_3; }
	}

	public class ArrayConstructionIterationClauseElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ArrayConstructionIterationClause");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cVariableNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cVariableNameValidIDParserRuleCall_0_0 = (RuleCall)cVariableNameAssignment_0.eContents().get(0);
		private final Keyword cInKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cCollectionExpressionAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cCollectionExpressionExpressionParserRuleCall_2_0 = (RuleCall)cCollectionExpressionAssignment_2.eContents().get(0);
		
		//ArrayConstructionIterationClause:
		//	variableName=ValidID "in" collectionExpression=Expression;
		public ParserRule getRule() { return rule; }

		//variableName=ValidID "in" collectionExpression=Expression
		public Group getGroup() { return cGroup; }

		//variableName=ValidID
		public Assignment getVariableNameAssignment_0() { return cVariableNameAssignment_0; }

		//ValidID
		public RuleCall getVariableNameValidIDParserRuleCall_0_0() { return cVariableNameValidIDParserRuleCall_0_0; }

		//"in"
		public Keyword getInKeyword_1() { return cInKeyword_1; }

		//collectionExpression=Expression
		public Assignment getCollectionExpressionAssignment_2() { return cCollectionExpressionAssignment_2; }

		//Expression
		public RuleCall getCollectionExpressionExpressionParserRuleCall_2_0() { return cCollectionExpressionExpressionParserRuleCall_2_0; }
	}

	public class ArrayConcatenationOperatorElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ArrayConcatenationOperator");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLeftSquareBracketKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cRowsAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cRowsExpressionListParserRuleCall_1_0 = (RuleCall)cRowsAssignment_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cSemicolonKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cRowsAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cRowsExpressionListParserRuleCall_2_1_0 = (RuleCall)cRowsAssignment_2_1.eContents().get(0);
		private final Keyword cRightSquareBracketKeyword_3 = (Keyword)cGroup.eContents().get(3);
		
		//ArrayConcatenationOperator:
		//	"[" rows+=ExpressionList (";" rows+=ExpressionList)* "]";
		public ParserRule getRule() { return rule; }

		//"[" rows+=ExpressionList (";" rows+=ExpressionList)* "]"
		public Group getGroup() { return cGroup; }

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

		//rows+=ExpressionList
		public Assignment getRowsAssignment_1() { return cRowsAssignment_1; }

		//ExpressionList
		public RuleCall getRowsExpressionListParserRuleCall_1_0() { return cRowsExpressionListParserRuleCall_1_0; }

		//(";" rows+=ExpressionList)*
		public Group getGroup_2() { return cGroup_2; }

		//";"
		public Keyword getSemicolonKeyword_2_0() { return cSemicolonKeyword_2_0; }

		//rows+=ExpressionList
		public Assignment getRowsAssignment_2_1() { return cRowsAssignment_2_1; }

		//ExpressionList
		public RuleCall getRowsExpressionListParserRuleCall_2_1_0() { return cRowsExpressionListParserRuleCall_2_1_0; }

		//"]"
		public Keyword getRightSquareBracketKeyword_3() { return cRightSquareBracketKeyword_3; }
	}

	public class ExpressionListElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ExpressionList");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cExpressionsAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cExpressionsExpressionParserRuleCall_0_0 = (RuleCall)cExpressionsAssignment_0.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cCommaKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Assignment cExpressionsAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cExpressionsExpressionParserRuleCall_1_1_0 = (RuleCall)cExpressionsAssignment_1_1.eContents().get(0);
		
		//ExpressionList:
		//	expressions+=Expression ("," expressions+=Expression)*;
		public ParserRule getRule() { return rule; }

		//expressions+=Expression ("," expressions+=Expression)*
		public Group getGroup() { return cGroup; }

		//expressions+=Expression
		public Assignment getExpressionsAssignment_0() { return cExpressionsAssignment_0; }

		//Expression
		public RuleCall getExpressionsExpressionParserRuleCall_0_0() { return cExpressionsExpressionParserRuleCall_0_0; }

		//("," expressions+=Expression)*
		public Group getGroup_1() { return cGroup_1; }

		//","
		public Keyword getCommaKeyword_1_0() { return cCommaKeyword_1_0; }

		//expressions+=Expression
		public Assignment getExpressionsAssignment_1_1() { return cExpressionsAssignment_1_1; }

		//Expression
		public RuleCall getExpressionsExpressionParserRuleCall_1_1_0() { return cExpressionsExpressionParserRuleCall_1_1_0; }
	}

	public class UnitConstructionOperatorElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "UnitConstructionOperator");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cDollarSignKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cUnitAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cUnitExplicitUnitParserRuleCall_1_0 = (RuleCall)cUnitAssignment_1.eContents().get(0);
		
		//UnitConstructionOperator:
		//	"$" unit=ExplicitUnit;
		public ParserRule getRule() { return rule; }

		//"$" unit=ExplicitUnit
		public Group getGroup() { return cGroup; }

		//"$"
		public Keyword getDollarSignKeyword_0() { return cDollarSignKeyword_0; }

		//unit=ExplicitUnit
		public Assignment getUnitAssignment_1() { return cUnitAssignment_1; }

		//ExplicitUnit
		public RuleCall getUnitExplicitUnitParserRuleCall_1_0() { return cUnitExplicitUnitParserRuleCall_1_0; }
	}

	public class ParenthesizedExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ParenthesizedExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cExpressionsAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cExpressionsExpressionParserRuleCall_1_0 = (RuleCall)cExpressionsAssignment_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cCommaKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cExpressionsAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cExpressionsExpressionParserRuleCall_2_1_0 = (RuleCall)cExpressionsAssignment_2_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_3 = (Keyword)cGroup.eContents().get(3);
		
		//ParenthesizedExpression:
		//	"(" expressions+=Expression ("," expressions+=Expression)* ")";
		public ParserRule getRule() { return rule; }

		//"(" expressions+=Expression ("," expressions+=Expression)* ")"
		public Group getGroup() { return cGroup; }

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

		//expressions+=Expression
		public Assignment getExpressionsAssignment_1() { return cExpressionsAssignment_1; }

		//Expression
		public RuleCall getExpressionsExpressionParserRuleCall_1_0() { return cExpressionsExpressionParserRuleCall_1_0; }

		//("," expressions+=Expression)*
		public Group getGroup_2() { return cGroup_2; }

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

		//expressions+=Expression
		public Assignment getExpressionsAssignment_2_1() { return cExpressionsAssignment_2_1; }

		//Expression
		public RuleCall getExpressionsExpressionParserRuleCall_2_1_0() { return cExpressionsExpressionParserRuleCall_2_1_0; }

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

	public class EndExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "EndExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cEndExpressionAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cEndKeyword_1 = (Keyword)cGroup.eContents().get(1);
		
		//EndExpression:
		//	{EndExpression} "end";
		public ParserRule getRule() { return rule; }

		//{EndExpression} "end"
		public Group getGroup() { return cGroup; }

		//{EndExpression}
		public Action getEndExpressionAction_0() { return cEndExpressionAction_0; }

		//"end"
		public Keyword getEndKeyword_1() { return cEndKeyword_1; }
	}

	public class AlgorithmExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "AlgorithmExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cAlgorithmExpressionAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cAlgoKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cBodyAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cBodyCompoundParserRuleCall_2_0 = (RuleCall)cBodyAssignment_2.eContents().get(0);
		
		//AlgorithmExpression returns Expression:
		//	{AlgorithmExpression} "algo" body=Compound;
		public ParserRule getRule() { return rule; }

		//{AlgorithmExpression} "algo" body=Compound
		public Group getGroup() { return cGroup; }

		//{AlgorithmExpression}
		public Action getAlgorithmExpressionAction_0() { return cAlgorithmExpressionAction_0; }

		//"algo"
		public Keyword getAlgoKeyword_1() { return cAlgoKeyword_1; }

		//body=Compound
		public Assignment getBodyAssignment_2() { return cBodyAssignment_2; }

		//Compound
		public RuleCall getBodyCompoundParserRuleCall_2_0() { return cBodyCompoundParserRuleCall_2_0; }
	}

	public class CompoundElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Compound");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cCompoundAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cLeftCurlyBracketKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cStatementsAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cStatementsStatementParserRuleCall_2_0 = (RuleCall)cStatementsAssignment_2.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_3 = (Keyword)cGroup.eContents().get(3);
		
		//Compound:
		//	{Compound} "{" statements+=Statement* "}";
		public ParserRule getRule() { return rule; }

		//{Compound} "{" statements+=Statement* "}"
		public Group getGroup() { return cGroup; }

		//{Compound}
		public Action getCompoundAction_0() { return cCompoundAction_0; }

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

		//statements+=Statement*
		public Assignment getStatementsAssignment_2() { return cStatementsAssignment_2; }

		//Statement
		public RuleCall getStatementsStatementParserRuleCall_2_0() { return cStatementsStatementParserRuleCall_2_0; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_3() { return cRightCurlyBracketKeyword_3; }
	}

	public class StatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Statement");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cCompoundParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cAssignmentParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cVariableDeclarationParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cIfStatementParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		private final RuleCall cWhileStatementParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
		private final RuleCall cDoWhileStatementParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
		private final RuleCall cForStatementParserRuleCall_6 = (RuleCall)cAlternatives.eContents().get(6);
		private final RuleCall cContinueStatementParserRuleCall_7 = (RuleCall)cAlternatives.eContents().get(7);
		private final RuleCall cBreakStatementParserRuleCall_8 = (RuleCall)cAlternatives.eContents().get(8);
		private final RuleCall cReturnStatementParserRuleCall_9 = (RuleCall)cAlternatives.eContents().get(9);
		
		//Statement:
		//	Compound | Assignment | VariableDeclaration | IfStatement | WhileStatement | DoWhileStatement | ForStatement |
		//	ContinueStatement | BreakStatement | ReturnStatement;
		public ParserRule getRule() { return rule; }

		//Compound | Assignment | VariableDeclaration | IfStatement | WhileStatement | DoWhileStatement | ForStatement |
		//ContinueStatement | BreakStatement | ReturnStatement
		public Alternatives getAlternatives() { return cAlternatives; }

		//Compound
		public RuleCall getCompoundParserRuleCall_0() { return cCompoundParserRuleCall_0; }

		//Assignment
		public RuleCall getAssignmentParserRuleCall_1() { return cAssignmentParserRuleCall_1; }

		//VariableDeclaration
		public RuleCall getVariableDeclarationParserRuleCall_2() { return cVariableDeclarationParserRuleCall_2; }

		//IfStatement
		public RuleCall getIfStatementParserRuleCall_3() { return cIfStatementParserRuleCall_3; }

		//WhileStatement
		public RuleCall getWhileStatementParserRuleCall_4() { return cWhileStatementParserRuleCall_4; }

		//DoWhileStatement
		public RuleCall getDoWhileStatementParserRuleCall_5() { return cDoWhileStatementParserRuleCall_5; }

		//ForStatement
		public RuleCall getForStatementParserRuleCall_6() { return cForStatementParserRuleCall_6; }

		//ContinueStatement
		public RuleCall getContinueStatementParserRuleCall_7() { return cContinueStatementParserRuleCall_7; }

		//BreakStatement
		public RuleCall getBreakStatementParserRuleCall_8() { return cBreakStatementParserRuleCall_8; }

		//ReturnStatement
		public RuleCall getReturnStatementParserRuleCall_9() { return cReturnStatementParserRuleCall_9; }
	}

	public class AssignmentElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Assignment");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cTargetAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cTargetAssignableMemberFeatureCallParserRuleCall_0_0 = (RuleCall)cTargetAssignment_0.eContents().get(0);
		private final Keyword cEqualsSignKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cExpressionAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cExpressionExpressionParserRuleCall_2_0 = (RuleCall)cExpressionAssignment_2.eContents().get(0);
		private final Keyword cSemicolonKeyword_3 = (Keyword)cGroup.eContents().get(3);
		
		//Assignment:
		//	target=AssignableMemberFeatureCall "=" expression=Expression ";";
		public ParserRule getRule() { return rule; }

		//target=AssignableMemberFeatureCall "=" expression=Expression ";"
		public Group getGroup() { return cGroup; }

		//target=AssignableMemberFeatureCall
		public Assignment getTargetAssignment_0() { return cTargetAssignment_0; }

		//AssignableMemberFeatureCall
		public RuleCall getTargetAssignableMemberFeatureCallParserRuleCall_0_0() { return cTargetAssignableMemberFeatureCallParserRuleCall_0_0; }

		//"="
		public Keyword getEqualsSignKeyword_1() { return cEqualsSignKeyword_1; }

		//expression=Expression
		public Assignment getExpressionAssignment_2() { return cExpressionAssignment_2; }

		//Expression
		public RuleCall getExpressionExpressionParserRuleCall_2_0() { return cExpressionExpressionParserRuleCall_2_0; }

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

	public class VariableDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "VariableDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cVarKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameValidIDParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Keyword cEqualsSignKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cInitializerAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cInitializerExpressionParserRuleCall_3_0 = (RuleCall)cInitializerAssignment_3.eContents().get(0);
		private final Keyword cSemicolonKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		//VariableDeclaration:
		//	"var" name=ValidID "=" initializer=Expression ";";
		public ParserRule getRule() { return rule; }

		//"var" name=ValidID "=" initializer=Expression ";"
		public Group getGroup() { return cGroup; }

		//"var"
		public Keyword getVarKeyword_0() { return cVarKeyword_0; }

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

		//ValidID
		public RuleCall getNameValidIDParserRuleCall_1_0() { return cNameValidIDParserRuleCall_1_0; }

		//"="
		public Keyword getEqualsSignKeyword_2() { return cEqualsSignKeyword_2; }

		//initializer=Expression
		public Assignment getInitializerAssignment_3() { return cInitializerAssignment_3; }

		//Expression
		public RuleCall getInitializerExpressionParserRuleCall_3_0() { return cInitializerExpressionParserRuleCall_3_0; }

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

	public class IfStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "IfStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cIfKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cConditionAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cConditionExpressionParserRuleCall_2_0 = (RuleCall)cConditionAssignment_2.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cThenStatementAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cThenStatementStatementParserRuleCall_4_0 = (RuleCall)cThenStatementAssignment_4.eContents().get(0);
		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
		private final Keyword cElseKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
		private final Assignment cElseStatementAssignment_5_1 = (Assignment)cGroup_5.eContents().get(1);
		private final RuleCall cElseStatementStatementParserRuleCall_5_1_0 = (RuleCall)cElseStatementAssignment_5_1.eContents().get(0);
		
		//IfStatement:
		//	"if" "(" condition=Expression ")" thenStatement=Statement ("else" elseStatement=Statement)?;
		public ParserRule getRule() { return rule; }

		//"if" "(" condition=Expression ")" thenStatement=Statement ("else" elseStatement=Statement)?
		public Group getGroup() { return cGroup; }

		//"if"
		public Keyword getIfKeyword_0() { return cIfKeyword_0; }

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

		//condition=Expression
		public Assignment getConditionAssignment_2() { return cConditionAssignment_2; }

		//Expression
		public RuleCall getConditionExpressionParserRuleCall_2_0() { return cConditionExpressionParserRuleCall_2_0; }

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

		//thenStatement=Statement
		public Assignment getThenStatementAssignment_4() { return cThenStatementAssignment_4; }

		//Statement
		public RuleCall getThenStatementStatementParserRuleCall_4_0() { return cThenStatementStatementParserRuleCall_4_0; }

		//(=> "else" elseStatement=Statement)?
		public Group getGroup_5() { return cGroup_5; }

		//=> "else"
		public Keyword getElseKeyword_5_0() { return cElseKeyword_5_0; }

		//elseStatement=Statement
		public Assignment getElseStatementAssignment_5_1() { return cElseStatementAssignment_5_1; }

		//Statement
		public RuleCall getElseStatementStatementParserRuleCall_5_1_0() { return cElseStatementStatementParserRuleCall_5_1_0; }
	}

	public class WhileStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "WhileStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cWhileKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cConditionAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cConditionExpressionParserRuleCall_2_0 = (RuleCall)cConditionAssignment_2.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cBodyAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cBodyStatementParserRuleCall_4_0 = (RuleCall)cBodyAssignment_4.eContents().get(0);
		
		//WhileStatement:
		//	"while" "(" condition=Expression ")" body=Statement;
		public ParserRule getRule() { return rule; }

		//"while" "(" condition=Expression ")" body=Statement
		public Group getGroup() { return cGroup; }

		//"while"
		public Keyword getWhileKeyword_0() { return cWhileKeyword_0; }

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

		//condition=Expression
		public Assignment getConditionAssignment_2() { return cConditionAssignment_2; }

		//Expression
		public RuleCall getConditionExpressionParserRuleCall_2_0() { return cConditionExpressionParserRuleCall_2_0; }

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

		//body=Statement
		public Assignment getBodyAssignment_4() { return cBodyAssignment_4; }

		//Statement
		public RuleCall getBodyStatementParserRuleCall_4_0() { return cBodyStatementParserRuleCall_4_0; }
	}

	public class ForStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ForStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cForKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cIterationVariableAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cIterationVariableIterationVariableParserRuleCall_2_0 = (RuleCall)cIterationVariableAssignment_2.eContents().get(0);
		private final Keyword cInKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cCollectionExpressionAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cCollectionExpressionExpressionParserRuleCall_4_0 = (RuleCall)cCollectionExpressionAssignment_4.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
		private final Assignment cBodyAssignment_6 = (Assignment)cGroup.eContents().get(6);
		private final RuleCall cBodyStatementParserRuleCall_6_0 = (RuleCall)cBodyAssignment_6.eContents().get(0);
		
		//ForStatement:
		//	"for" "(" iterationVariable=IterationVariable "in" collectionExpression=Expression ")" body=Statement;
		public ParserRule getRule() { return rule; }

		//"for" "(" iterationVariable=IterationVariable "in" collectionExpression=Expression ")" body=Statement
		public Group getGroup() { return cGroup; }

		//"for"
		public Keyword getForKeyword_0() { return cForKeyword_0; }

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

		//iterationVariable=IterationVariable
		public Assignment getIterationVariableAssignment_2() { return cIterationVariableAssignment_2; }

		//IterationVariable
		public RuleCall getIterationVariableIterationVariableParserRuleCall_2_0() { return cIterationVariableIterationVariableParserRuleCall_2_0; }

		//"in"
		public Keyword getInKeyword_3() { return cInKeyword_3; }

		//collectionExpression=Expression
		public Assignment getCollectionExpressionAssignment_4() { return cCollectionExpressionAssignment_4; }

		//Expression
		public RuleCall getCollectionExpressionExpressionParserRuleCall_4_0() { return cCollectionExpressionExpressionParserRuleCall_4_0; }

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

		//body=Statement
		public Assignment getBodyAssignment_6() { return cBodyAssignment_6; }

		//Statement
		public RuleCall getBodyStatementParserRuleCall_6_0() { return cBodyStatementParserRuleCall_6_0; }
	}

	public class DoWhileStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "DoWhileStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cDoKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cBodyAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cBodyStatementParserRuleCall_1_0 = (RuleCall)cBodyAssignment_1.eContents().get(0);
		private final Keyword cWhileKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Keyword cLeftParenthesisKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cConditionAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cConditionExpressionParserRuleCall_4_0 = (RuleCall)cConditionAssignment_4.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
		private final Keyword cSemicolonKeyword_6 = (Keyword)cGroup.eContents().get(6);
		
		//DoWhileStatement:
		//	"do" body=Statement "while" "(" condition=Expression ")" ";";
		public ParserRule getRule() { return rule; }

		//"do" body=Statement "while" "(" condition=Expression ")" ";"
		public Group getGroup() { return cGroup; }

		//"do"
		public Keyword getDoKeyword_0() { return cDoKeyword_0; }

		//body=Statement
		public Assignment getBodyAssignment_1() { return cBodyAssignment_1; }

		//Statement
		public RuleCall getBodyStatementParserRuleCall_1_0() { return cBodyStatementParserRuleCall_1_0; }

		//"while"
		public Keyword getWhileKeyword_2() { return cWhileKeyword_2; }

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

		//condition=Expression
		public Assignment getConditionAssignment_4() { return cConditionAssignment_4; }

		//Expression
		public RuleCall getConditionExpressionParserRuleCall_4_0() { return cConditionExpressionParserRuleCall_4_0; }

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

		//";"
		public Keyword getSemicolonKeyword_6() { return cSemicolonKeyword_6; }
	}

	public class ContinueStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ContinueStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cContinueStatementAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cContinueKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Keyword cSemicolonKeyword_2 = (Keyword)cGroup.eContents().get(2);
		
		//ContinueStatement:
		//	{ContinueStatement} "continue" ";";
		public ParserRule getRule() { return rule; }

		//{ContinueStatement} "continue" ";"
		public Group getGroup() { return cGroup; }

		//{ContinueStatement}
		public Action getContinueStatementAction_0() { return cContinueStatementAction_0; }

		//"continue"
		public Keyword getContinueKeyword_1() { return cContinueKeyword_1; }

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

	public class BreakStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "BreakStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cBreakStatementAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cBreakKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Keyword cSemicolonKeyword_2 = (Keyword)cGroup.eContents().get(2);
		
		//BreakStatement:
		//	{BreakStatement} "break" ";";
		public ParserRule getRule() { return rule; }

		//{BreakStatement} "break" ";"
		public Group getGroup() { return cGroup; }

		//{BreakStatement}
		public Action getBreakStatementAction_0() { return cBreakStatementAction_0; }

		//"break"
		public Keyword getBreakKeyword_1() { return cBreakKeyword_1; }

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

	public class ReturnStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ReturnStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cReturnKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cExpressionAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cExpressionExpressionParserRuleCall_1_0 = (RuleCall)cExpressionAssignment_1.eContents().get(0);
		private final Keyword cSemicolonKeyword_2 = (Keyword)cGroup.eContents().get(2);
		
		//ReturnStatement:
		//	"return" expression=Expression ";";
		public ParserRule getRule() { return rule; }

		//"return" expression=Expression ";"
		public Group getGroup() { return cGroup; }

		//"return"
		public Keyword getReturnKeyword_0() { return cReturnKeyword_0; }

		//expression=Expression
		public Assignment getExpressionAssignment_1() { return cExpressionAssignment_1; }

		//Expression
		public RuleCall getExpressionExpressionParserRuleCall_1_0() { return cExpressionExpressionParserRuleCall_1_0; }

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

	public class UnitElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Unit");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cUnitAction_0 = (Action)cGroup.eContents().get(0);
		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
		private final Group cGroup_1_0 = (Group)cAlternatives_1.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_1_0_0 = (Keyword)cGroup_1_0.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_1_0_1 = (Keyword)cGroup_1_0.eContents().get(1);
		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
		private final Assignment cNumeratorAssignment_1_1_1 = (Assignment)cGroup_1_1.eContents().get(1);
		private final RuleCall cNumeratorUnitNumeratorParserRuleCall_1_1_1_0 = (RuleCall)cNumeratorAssignment_1_1_1.eContents().get(0);
		private final Group cGroup_1_1_2 = (Group)cGroup_1_1.eContents().get(2);
		private final Keyword cSolidusKeyword_1_1_2_0 = (Keyword)cGroup_1_1_2.eContents().get(0);
		private final Assignment cDenominatorAssignment_1_1_2_1 = (Assignment)cGroup_1_1_2.eContents().get(1);
		private final RuleCall cDenominatorUnitDenominatorParserRuleCall_1_1_2_1_0 = (RuleCall)cDenominatorAssignment_1_1_2_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_1_1_3 = (Keyword)cGroup_1_1.eContents().get(3);
		private final Assignment cNumeratorAssignment_1_2 = (Assignment)cAlternatives_1.eContents().get(2);
		private final RuleCall cNumeratorImplicitUnitNumeratorParserRuleCall_1_2_0 = (RuleCall)cNumeratorAssignment_1_2.eContents().get(0);
		
		/// *
		// * Unit expressions
		// * / Unit:
		//	{Unit} ("(" ")" | "(" numerator=UnitNumerator ("/" denominator=UnitDenominator)? ")" |
		//	numerator=ImplicitUnitNumerator);
		public ParserRule getRule() { return rule; }

		//{Unit} ("(" ")" | "(" numerator=UnitNumerator ("/" denominator=UnitDenominator)? ")" | numerator=ImplicitUnitNumerator)
		public Group getGroup() { return cGroup; }

		//{Unit}
		public Action getUnitAction_0() { return cUnitAction_0; }

		//"(" ")" | "(" numerator=UnitNumerator ("/" denominator=UnitDenominator)? ")" | numerator=ImplicitUnitNumerator
		public Alternatives getAlternatives_1() { return cAlternatives_1; }

		//"(" ")"
		public Group getGroup_1_0() { return cGroup_1_0; }

		//"("
		public Keyword getLeftParenthesisKeyword_1_0_0() { return cLeftParenthesisKeyword_1_0_0; }

		//")"
		public Keyword getRightParenthesisKeyword_1_0_1() { return cRightParenthesisKeyword_1_0_1; }

		//"(" numerator=UnitNumerator ("/" denominator=UnitDenominator)? ")"
		public Group getGroup_1_1() { return cGroup_1_1; }

		//"("
		public Keyword getLeftParenthesisKeyword_1_1_0() { return cLeftParenthesisKeyword_1_1_0; }

		//numerator=UnitNumerator
		public Assignment getNumeratorAssignment_1_1_1() { return cNumeratorAssignment_1_1_1; }

		//UnitNumerator
		public RuleCall getNumeratorUnitNumeratorParserRuleCall_1_1_1_0() { return cNumeratorUnitNumeratorParserRuleCall_1_1_1_0; }

		//("/" denominator=UnitDenominator)?
		public Group getGroup_1_1_2() { return cGroup_1_1_2; }

		//"/"
		public Keyword getSolidusKeyword_1_1_2_0() { return cSolidusKeyword_1_1_2_0; }

		//denominator=UnitDenominator
		public Assignment getDenominatorAssignment_1_1_2_1() { return cDenominatorAssignment_1_1_2_1; }

		//UnitDenominator
		public RuleCall getDenominatorUnitDenominatorParserRuleCall_1_1_2_1_0() { return cDenominatorUnitDenominatorParserRuleCall_1_1_2_1_0; }

		//")"
		public Keyword getRightParenthesisKeyword_1_1_3() { return cRightParenthesisKeyword_1_1_3; }

		//numerator=ImplicitUnitNumerator
		public Assignment getNumeratorAssignment_1_2() { return cNumeratorAssignment_1_2; }

		//ImplicitUnitNumerator
		public RuleCall getNumeratorImplicitUnitNumeratorParserRuleCall_1_2_0() { return cNumeratorImplicitUnitNumeratorParserRuleCall_1_2_0; }
	}

	public class ExplicitUnitElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ExplicitUnit");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNumeratorAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNumeratorUnitNumeratorParserRuleCall_1_0 = (RuleCall)cNumeratorAssignment_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cSolidusKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cDenominatorAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cDenominatorUnitDenominatorParserRuleCall_2_1_0 = (RuleCall)cDenominatorAssignment_2_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_3 = (Keyword)cGroup.eContents().get(3);
		
		//ExplicitUnit returns Unit:
		//	"(" numerator=UnitNumerator ("/" denominator=UnitDenominator)? ")";
		public ParserRule getRule() { return rule; }

		//"(" numerator=UnitNumerator ("/" denominator=UnitDenominator)? ")"
		public Group getGroup() { return cGroup; }

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

		//numerator=UnitNumerator
		public Assignment getNumeratorAssignment_1() { return cNumeratorAssignment_1; }

		//UnitNumerator
		public RuleCall getNumeratorUnitNumeratorParserRuleCall_1_0() { return cNumeratorUnitNumeratorParserRuleCall_1_0; }

		//("/" denominator=UnitDenominator)?
		public Group getGroup_2() { return cGroup_2; }

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

		//denominator=UnitDenominator
		public Assignment getDenominatorAssignment_2_1() { return cDenominatorAssignment_2_1; }

		//UnitDenominator
		public RuleCall getDenominatorUnitDenominatorParserRuleCall_2_1_0() { return cDenominatorUnitDenominatorParserRuleCall_2_1_0; }

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

	public class UnitNumeratorElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "UnitNumerator");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Action cUnitNumeratorAction_0_0 = (Action)cGroup_0.eContents().get(0);
		private final RuleCall cONETerminalRuleCall_0_1 = (RuleCall)cGroup_0.eContents().get(1);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Assignment cFactorsAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
		private final RuleCall cFactorsUnitFactorParserRuleCall_1_0_0 = (RuleCall)cFactorsAssignment_1_0.eContents().get(0);
		private final Group cGroup_1_1 = (Group)cGroup_1.eContents().get(1);
		private final Keyword cAsteriskKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
		private final Assignment cFactorsAssignment_1_1_1 = (Assignment)cGroup_1_1.eContents().get(1);
		private final RuleCall cFactorsUnitFactorParserRuleCall_1_1_1_0 = (RuleCall)cFactorsAssignment_1_1_1.eContents().get(0);
		
		//UnitNumerator:
		//	{UnitNumerator} ONE | factors+=UnitFactor ("*" factors+=UnitFactor)*;
		public ParserRule getRule() { return rule; }

		//{UnitNumerator} ONE | factors+=UnitFactor ("*" factors+=UnitFactor)*
		public Alternatives getAlternatives() { return cAlternatives; }

		//{UnitNumerator} ONE
		public Group getGroup_0() { return cGroup_0; }

		//{UnitNumerator}
		public Action getUnitNumeratorAction_0_0() { return cUnitNumeratorAction_0_0; }

		//ONE
		public RuleCall getONETerminalRuleCall_0_1() { return cONETerminalRuleCall_0_1; }

		//factors+=UnitFactor ("*" factors+=UnitFactor)*
		public Group getGroup_1() { return cGroup_1; }

		//factors+=UnitFactor
		public Assignment getFactorsAssignment_1_0() { return cFactorsAssignment_1_0; }

		//UnitFactor
		public RuleCall getFactorsUnitFactorParserRuleCall_1_0_0() { return cFactorsUnitFactorParserRuleCall_1_0_0; }

		//("*" factors+=UnitFactor)*
		public Group getGroup_1_1() { return cGroup_1_1; }

		//"*"
		public Keyword getAsteriskKeyword_1_1_0() { return cAsteriskKeyword_1_1_0; }

		//factors+=UnitFactor
		public Assignment getFactorsAssignment_1_1_1() { return cFactorsAssignment_1_1_1; }

		//UnitFactor
		public RuleCall getFactorsUnitFactorParserRuleCall_1_1_1_0() { return cFactorsUnitFactorParserRuleCall_1_1_1_0; }
	}

	public class ImplicitUnitNumeratorElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ImplicitUnitNumerator");
		private final Action cUnitNumeratorAction = (Action)rule.eContents().get(1);
		
		//ImplicitUnitNumerator returns UnitNumerator:
		//	{UnitNumerator};
		public ParserRule getRule() { return rule; }

		//{UnitNumerator}
		public Action getUnitNumeratorAction() { return cUnitNumeratorAction; }
	}

	public class UnitDenominatorElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "UnitDenominator");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Assignment cFactorsAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
		private final RuleCall cFactorsUnitFactorParserRuleCall_0_0 = (RuleCall)cFactorsAssignment_0.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 Assignment cFactorsAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cFactorsUnitFactorParserRuleCall_1_1_0 = (RuleCall)cFactorsAssignment_1_1.eContents().get(0);
		private final Group cGroup_1_2 = (Group)cGroup_1.eContents().get(2);
		private final Keyword cAsteriskKeyword_1_2_0 = (Keyword)cGroup_1_2.eContents().get(0);
		private final Assignment cFactorsAssignment_1_2_1 = (Assignment)cGroup_1_2.eContents().get(1);
		private final RuleCall cFactorsUnitFactorParserRuleCall_1_2_1_0 = (RuleCall)cFactorsAssignment_1_2_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_1_3 = (Keyword)cGroup_1.eContents().get(3);
		
		//UnitDenominator:
		//	factors+=UnitFactor | "(" factors+=UnitFactor ("*" factors+=UnitFactor)* ")";
		public ParserRule getRule() { return rule; }

		//factors+=UnitFactor | "(" factors+=UnitFactor ("*" factors+=UnitFactor)* ")"
		public Alternatives getAlternatives() { return cAlternatives; }

		//factors+=UnitFactor
		public Assignment getFactorsAssignment_0() { return cFactorsAssignment_0; }

		//UnitFactor
		public RuleCall getFactorsUnitFactorParserRuleCall_0_0() { return cFactorsUnitFactorParserRuleCall_0_0; }

		//"(" factors+=UnitFactor ("*" factors+=UnitFactor)* ")"
		public Group getGroup_1() { return cGroup_1; }

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

		//factors+=UnitFactor
		public Assignment getFactorsAssignment_1_1() { return cFactorsAssignment_1_1; }

		//UnitFactor
		public RuleCall getFactorsUnitFactorParserRuleCall_1_1_0() { return cFactorsUnitFactorParserRuleCall_1_1_0; }

		//("*" factors+=UnitFactor)*
		public Group getGroup_1_2() { return cGroup_1_2; }

		//"*"
		public Keyword getAsteriskKeyword_1_2_0() { return cAsteriskKeyword_1_2_0; }

		//factors+=UnitFactor
		public Assignment getFactorsAssignment_1_2_1() { return cFactorsAssignment_1_2_1; }

		//UnitFactor
		public RuleCall getFactorsUnitFactorParserRuleCall_1_2_1_0() { return cFactorsUnitFactorParserRuleCall_1_2_1_0; }

		//")"
		public Keyword getRightParenthesisKeyword_1_3() { return cRightParenthesisKeyword_1_3; }
	}

	public class UnitFactorElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "UnitFactor");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cSymbolAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cSymbolValidIDParserRuleCall_0_0 = (RuleCall)cSymbolAssignment_0.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cCircumflexAccentKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Assignment cExponentAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cExponentUnitExponentParserRuleCall_1_1_0 = (RuleCall)cExponentAssignment_1_1.eContents().get(0);
		
		//UnitFactor:
		//	symbol=ValidID ("^" exponent=UnitExponent)?;
		public ParserRule getRule() { return rule; }

		//symbol=ValidID ("^" exponent=UnitExponent)?
		public Group getGroup() { return cGroup; }

		//symbol=ValidID
		public Assignment getSymbolAssignment_0() { return cSymbolAssignment_0; }

		//ValidID
		public RuleCall getSymbolValidIDParserRuleCall_0_0() { return cSymbolValidIDParserRuleCall_0_0; }

		//("^" exponent=UnitExponent)?
		public Group getGroup_1() { return cGroup_1; }

		//"^"
		public Keyword getCircumflexAccentKeyword_1_0() { return cCircumflexAccentKeyword_1_0; }

		//exponent=UnitExponent
		public Assignment getExponentAssignment_1_1() { return cExponentAssignment_1_1; }

		//UnitExponent
		public RuleCall getExponentUnitExponentParserRuleCall_1_1_0() { return cExponentUnitExponentParserRuleCall_1_1_0; }
	}

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

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

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

		//ValidInt
		public RuleCall getValidIntParserRuleCall_1() { return cValidIntParserRuleCall_1; }
	}

	public class QualifiedNameElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "QualifiedName");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cValidIDParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cColonColonKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final RuleCall cValidIDParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
		
		//QualifiedName:
		//	ValidID ("::" ValidID)*;
		public ParserRule getRule() { return rule; }

		//ValidID ("::" ValidID)*
		public Group getGroup() { return cGroup; }

		//ValidID
		public RuleCall getValidIDParserRuleCall_0() { return cValidIDParserRuleCall_0; }

		//("::" ValidID)*
		public Group getGroup_1() { return cGroup_1; }

		//"::"
		public Keyword getColonColonKeyword_1_0() { return cColonColonKeyword_1_0; }

		//ValidID
		public RuleCall getValidIDParserRuleCall_1_1() { return cValidIDParserRuleCall_1_1; }
	}

	public class ValidDoubleElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ValidDouble");
		private final RuleCall cREALTerminalRuleCall = (RuleCall)rule.eContents().get(1);
		
		//ValidDouble returns ecore::EDouble:
		//	REAL;
		public ParserRule getRule() { return rule; }

		//REAL
		public RuleCall getREALTerminalRuleCall() { return cREALTerminalRuleCall; }
	}

	public class ValidIntElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ValidInt");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cONETerminalRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cINTTerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//ValidInt returns ecore::EInt:
		//	ONE | INT;
		public ParserRule getRule() { return rule; }

		//ONE | INT
		public Alternatives getAlternatives() { return cAlternatives; }

		//ONE
		public RuleCall getONETerminalRuleCall_0() { return cONETerminalRuleCall_0; }

		//INT
		public RuleCall getINTTerminalRuleCall_1() { return cINTTerminalRuleCall_1; }
	}

	public class ValidLongElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ValidLong");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cONETerminalRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cINTTerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//ValidLong returns ecore::ELong:
		//	ONE | INT;
		public ParserRule getRule() { return rule; }

		//ONE | INT
		public Alternatives getAlternatives() { return cAlternatives; }

		//ONE
		public RuleCall getONETerminalRuleCall_0() { return cONETerminalRuleCall_0; }

		//INT
		public RuleCall getINTTerminalRuleCall_1() { return cINTTerminalRuleCall_1; }
	}

	public class ValidIDElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ValidID");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cNTerminalRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cIDTerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//ValidID:
		//	N | ID;
		public ParserRule getRule() { return rule; }

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

		//N
		public RuleCall getNTerminalRuleCall_0() { return cNTerminalRuleCall_0; }

		//ID
		public RuleCall getIDTerminalRuleCall_1() { return cIDTerminalRuleCall_1; }
	}
	
	
	public class FunctionKindElements extends AbstractEnumRuleElementFinder {
		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "FunctionKind");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final EnumLiteralDeclaration cStatefulEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
		private final Keyword cStatefulStatefulKeyword_0_0 = (Keyword)cStatefulEnumLiteralDeclaration_0.eContents().get(0);
		private final EnumLiteralDeclaration cContinuousEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
		private final Keyword cContinuousContinuousKeyword_1_0 = (Keyword)cContinuousEnumLiteralDeclaration_1.eContents().get(0);
		
		//enum FunctionKind:
		//	Stateful="stateful" | Continuous="continuous";
		public EnumRule getRule() { return rule; }

		//Stateful="stateful" | Continuous="continuous"
		public Alternatives getAlternatives() { return cAlternatives; }

		//Stateful="stateful"
		public EnumLiteralDeclaration getStatefulEnumLiteralDeclaration_0() { return cStatefulEnumLiteralDeclaration_0; }

		//"stateful"
		public Keyword getStatefulStatefulKeyword_0_0() { return cStatefulStatefulKeyword_0_0; }

		//Continuous="continuous"
		public EnumLiteralDeclaration getContinuousEnumLiteralDeclaration_1() { return cContinuousEnumLiteralDeclaration_1; }

		//"continuous"
		public Keyword getContinuousContinuousKeyword_1_0() { return cContinuousContinuousKeyword_1_0; }
	}

	public class AssertionStatusKindElements extends AbstractEnumRuleElementFinder {
		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "AssertionStatusKind");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final EnumLiteralDeclaration cInfoEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
		private final Keyword cInfoInfoKeyword_0_0 = (Keyword)cInfoEnumLiteralDeclaration_0.eContents().get(0);
		private final EnumLiteralDeclaration cWarningEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
		private final Keyword cWarningWarningKeyword_1_0 = (Keyword)cWarningEnumLiteralDeclaration_1.eContents().get(0);
		private final EnumLiteralDeclaration cErrorEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
		private final Keyword cErrorErrorKeyword_2_0 = (Keyword)cErrorEnumLiteralDeclaration_2.eContents().get(0);
		private final EnumLiteralDeclaration cFatalEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
		private final Keyword cFatalFatalKeyword_3_0 = (Keyword)cFatalEnumLiteralDeclaration_3.eContents().get(0);
		
		//enum AssertionStatusKind:
		//	Info="info" | Warning="warning" | Error="error" | Fatal="fatal";
		public EnumRule getRule() { return rule; }

		//Info="info" | Warning="warning" | Error="error" | Fatal="fatal"
		public Alternatives getAlternatives() { return cAlternatives; }

		//Info="info"
		public EnumLiteralDeclaration getInfoEnumLiteralDeclaration_0() { return cInfoEnumLiteralDeclaration_0; }

		//"info"
		public Keyword getInfoInfoKeyword_0_0() { return cInfoInfoKeyword_0_0; }

		//Warning="warning"
		public EnumLiteralDeclaration getWarningEnumLiteralDeclaration_1() { return cWarningEnumLiteralDeclaration_1; }

		//"warning"
		public Keyword getWarningWarningKeyword_1_0() { return cWarningWarningKeyword_1_0; }

		//Error="error"
		public EnumLiteralDeclaration getErrorEnumLiteralDeclaration_2() { return cErrorEnumLiteralDeclaration_2; }

		//"error"
		public Keyword getErrorErrorKeyword_2_0() { return cErrorErrorKeyword_2_0; }

		//Fatal="fatal"
		public EnumLiteralDeclaration getFatalEnumLiteralDeclaration_3() { return cFatalEnumLiteralDeclaration_3; }

		//"fatal"
		public Keyword getFatalFatalKeyword_3_0() { return cFatalFatalKeyword_3_0; }
	}

	public class EqualityOperatorElements extends AbstractEnumRuleElementFinder {
		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "EqualityOperator");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final EnumLiteralDeclaration cEqualToEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
		private final Keyword cEqualToEqualsSignEqualsSignKeyword_0_0 = (Keyword)cEqualToEnumLiteralDeclaration_0.eContents().get(0);
		private final EnumLiteralDeclaration cNotEqualToEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
		private final Keyword cNotEqualToExclamationMarkEqualsSignKeyword_1_0 = (Keyword)cNotEqualToEnumLiteralDeclaration_1.eContents().get(0);
		
		//enum EqualityOperator:
		//	EqualTo="==" | NotEqualTo="!=";
		public EnumRule getRule() { return rule; }

		//EqualTo="==" | NotEqualTo="!="
		public Alternatives getAlternatives() { return cAlternatives; }

		//EqualTo="=="
		public EnumLiteralDeclaration getEqualToEnumLiteralDeclaration_0() { return cEqualToEnumLiteralDeclaration_0; }

		//"=="
		public Keyword getEqualToEqualsSignEqualsSignKeyword_0_0() { return cEqualToEqualsSignEqualsSignKeyword_0_0; }

		//NotEqualTo="!="
		public EnumLiteralDeclaration getNotEqualToEnumLiteralDeclaration_1() { return cNotEqualToEnumLiteralDeclaration_1; }

		//"!="
		public Keyword getNotEqualToExclamationMarkEqualsSignKeyword_1_0() { return cNotEqualToExclamationMarkEqualsSignKeyword_1_0; }
	}

	public class RelationalOperatorElements extends AbstractEnumRuleElementFinder {
		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "RelationalOperator");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final EnumLiteralDeclaration cLessThanEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
		private final Keyword cLessThanLessThanSignKeyword_0_0 = (Keyword)cLessThanEnumLiteralDeclaration_0.eContents().get(0);
		private final EnumLiteralDeclaration cLessThanOrEqualToEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
		private final Keyword cLessThanOrEqualToLessThanSignEqualsSignKeyword_1_0 = (Keyword)cLessThanOrEqualToEnumLiteralDeclaration_1.eContents().get(0);
		private final EnumLiteralDeclaration cGreaterThanEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
		private final Keyword cGreaterThanGreaterThanSignKeyword_2_0 = (Keyword)cGreaterThanEnumLiteralDeclaration_2.eContents().get(0);
		private final EnumLiteralDeclaration cGreaterThanOrEqualToEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
		private final Keyword cGreaterThanOrEqualToGreaterThanSignEqualsSignKeyword_3_0 = (Keyword)cGreaterThanOrEqualToEnumLiteralDeclaration_3.eContents().get(0);
		
		//enum RelationalOperator:
		//	LessThan="<" | LessThanOrEqualTo="<=" | GreaterThan=">" | GreaterThanOrEqualTo=">=";
		public EnumRule getRule() { return rule; }

		//LessThan="<" | LessThanOrEqualTo="<=" | GreaterThan=">" | GreaterThanOrEqualTo=">="
		public Alternatives getAlternatives() { return cAlternatives; }

		//LessThan="<"
		public EnumLiteralDeclaration getLessThanEnumLiteralDeclaration_0() { return cLessThanEnumLiteralDeclaration_0; }

		//"<"
		public Keyword getLessThanLessThanSignKeyword_0_0() { return cLessThanLessThanSignKeyword_0_0; }

		//LessThanOrEqualTo="<="
		public EnumLiteralDeclaration getLessThanOrEqualToEnumLiteralDeclaration_1() { return cLessThanOrEqualToEnumLiteralDeclaration_1; }

		//"<="
		public Keyword getLessThanOrEqualToLessThanSignEqualsSignKeyword_1_0() { return cLessThanOrEqualToLessThanSignEqualsSignKeyword_1_0; }

		//GreaterThan=">"
		public EnumLiteralDeclaration getGreaterThanEnumLiteralDeclaration_2() { return cGreaterThanEnumLiteralDeclaration_2; }

		//">"
		public Keyword getGreaterThanGreaterThanSignKeyword_2_0() { return cGreaterThanGreaterThanSignKeyword_2_0; }

		//GreaterThanOrEqualTo=">="
		public EnumLiteralDeclaration getGreaterThanOrEqualToEnumLiteralDeclaration_3() { return cGreaterThanOrEqualToEnumLiteralDeclaration_3; }

		//">="
		public Keyword getGreaterThanOrEqualToGreaterThanSignEqualsSignKeyword_3_0() { return cGreaterThanOrEqualToGreaterThanSignEqualsSignKeyword_3_0; }
	}

	public class AdditiveOperatorElements extends AbstractEnumRuleElementFinder {
		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "AdditiveOperator");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final EnumLiteralDeclaration cAddEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
		private final Keyword cAddPlusSignKeyword_0_0 = (Keyword)cAddEnumLiteralDeclaration_0.eContents().get(0);
		private final EnumLiteralDeclaration cSubtractEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
		private final Keyword cSubtractHyphenMinusKeyword_1_0 = (Keyword)cSubtractEnumLiteralDeclaration_1.eContents().get(0);
		
		//enum AdditiveOperator:
		//	Add="+" | Subtract="-";
		public EnumRule getRule() { return rule; }

		//Add="+" | Subtract="-"
		public Alternatives getAlternatives() { return cAlternatives; }

		//Add="+"
		public EnumLiteralDeclaration getAddEnumLiteralDeclaration_0() { return cAddEnumLiteralDeclaration_0; }

		//"+"
		public Keyword getAddPlusSignKeyword_0_0() { return cAddPlusSignKeyword_0_0; }

		//Subtract="-"
		public EnumLiteralDeclaration getSubtractEnumLiteralDeclaration_1() { return cSubtractEnumLiteralDeclaration_1; }

		//"-"
		public Keyword getSubtractHyphenMinusKeyword_1_0() { return cSubtractHyphenMinusKeyword_1_0; }
	}

	public class MultiplicativeOperatorElements extends AbstractEnumRuleElementFinder {
		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "MultiplicativeOperator");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final EnumLiteralDeclaration cMultiplyEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
		private final Keyword cMultiplyAsteriskKeyword_0_0 = (Keyword)cMultiplyEnumLiteralDeclaration_0.eContents().get(0);
		private final EnumLiteralDeclaration cDivideEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
		private final Keyword cDivideSolidusKeyword_1_0 = (Keyword)cDivideEnumLiteralDeclaration_1.eContents().get(0);
		private final EnumLiteralDeclaration cElementWiseMultiplyEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
		private final Keyword cElementWiseMultiplyFullStopAsteriskKeyword_2_0 = (Keyword)cElementWiseMultiplyEnumLiteralDeclaration_2.eContents().get(0);
		private final EnumLiteralDeclaration cElementWiseDivideEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
		private final Keyword cElementWiseDivideFullStopSolidusKeyword_3_0 = (Keyword)cElementWiseDivideEnumLiteralDeclaration_3.eContents().get(0);
		
		//enum MultiplicativeOperator:
		//	Multiply="*" | Divide="/" | ElementWiseMultiply=".*" | ElementWiseDivide="./";
		public EnumRule getRule() { return rule; }

		//Multiply="*" | Divide="/" | ElementWiseMultiply=".*" | ElementWiseDivide="./"
		public Alternatives getAlternatives() { return cAlternatives; }

		//Multiply="*"
		public EnumLiteralDeclaration getMultiplyEnumLiteralDeclaration_0() { return cMultiplyEnumLiteralDeclaration_0; }

		//"*"
		public Keyword getMultiplyAsteriskKeyword_0_0() { return cMultiplyAsteriskKeyword_0_0; }

		//Divide="/"
		public EnumLiteralDeclaration getDivideEnumLiteralDeclaration_1() { return cDivideEnumLiteralDeclaration_1; }

		//"/"
		public Keyword getDivideSolidusKeyword_1_0() { return cDivideSolidusKeyword_1_0; }

		//ElementWiseMultiply=".*"
		public EnumLiteralDeclaration getElementWiseMultiplyEnumLiteralDeclaration_2() { return cElementWiseMultiplyEnumLiteralDeclaration_2; }

		//".*"
		public Keyword getElementWiseMultiplyFullStopAsteriskKeyword_2_0() { return cElementWiseMultiplyFullStopAsteriskKeyword_2_0; }

		//ElementWiseDivide="./"
		public EnumLiteralDeclaration getElementWiseDivideEnumLiteralDeclaration_3() { return cElementWiseDivideEnumLiteralDeclaration_3; }

		//"./"
		public Keyword getElementWiseDivideFullStopSolidusKeyword_3_0() { return cElementWiseDivideFullStopSolidusKeyword_3_0; }
	}

	public class PowerOperatorElements extends AbstractEnumRuleElementFinder {
		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "PowerOperator");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final EnumLiteralDeclaration cPowerEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
		private final Keyword cPowerCircumflexAccentKeyword_0_0 = (Keyword)cPowerEnumLiteralDeclaration_0.eContents().get(0);
		private final EnumLiteralDeclaration cElementWisePowerEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
		private final Keyword cElementWisePowerFullStopCircumflexAccentKeyword_1_0 = (Keyword)cElementWisePowerEnumLiteralDeclaration_1.eContents().get(0);
		
		//enum PowerOperator:
		//	Power="^" | ElementWisePower=".^";
		public EnumRule getRule() { return rule; }

		//Power="^" | ElementWisePower=".^"
		public Alternatives getAlternatives() { return cAlternatives; }

		//Power="^"
		public EnumLiteralDeclaration getPowerEnumLiteralDeclaration_0() { return cPowerEnumLiteralDeclaration_0; }

		//"^"
		public Keyword getPowerCircumflexAccentKeyword_0_0() { return cPowerCircumflexAccentKeyword_0_0; }

		//ElementWisePower=".^"
		public EnumLiteralDeclaration getElementWisePowerEnumLiteralDeclaration_1() { return cElementWisePowerEnumLiteralDeclaration_1; }

		//".^"
		public Keyword getElementWisePowerFullStopCircumflexAccentKeyword_1_0() { return cElementWisePowerFullStopCircumflexAccentKeyword_1_0; }
	}

	public class UnaryOperatorElements extends AbstractEnumRuleElementFinder {
		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "UnaryOperator");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final EnumLiteralDeclaration cNegateEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
		private final Keyword cNegateHyphenMinusKeyword_0_0 = (Keyword)cNegateEnumLiteralDeclaration_0.eContents().get(0);
		private final EnumLiteralDeclaration cLogicalNotEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
		private final Keyword cLogicalNotExclamationMarkKeyword_1_0 = (Keyword)cLogicalNotEnumLiteralDeclaration_1.eContents().get(0);
		
		//enum UnaryOperator:
		//	Negate="-" | LogicalNot="!";
		public EnumRule getRule() { return rule; }

		//Negate="-" | LogicalNot="!"
		public Alternatives getAlternatives() { return cAlternatives; }

		//Negate="-"
		public EnumLiteralDeclaration getNegateEnumLiteralDeclaration_0() { return cNegateEnumLiteralDeclaration_0; }

		//"-"
		public Keyword getNegateHyphenMinusKeyword_0_0() { return cNegateHyphenMinusKeyword_0_0; }

		//LogicalNot="!"
		public EnumLiteralDeclaration getLogicalNotEnumLiteralDeclaration_1() { return cLogicalNotEnumLiteralDeclaration_1; }

		//"!"
		public Keyword getLogicalNotExclamationMarkKeyword_1_0() { return cLogicalNotExclamationMarkKeyword_1_0; }
	}

	public class PostfixOperatorElements extends AbstractEnumRuleElementFinder {
		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "PostfixOperator");
		private final EnumLiteralDeclaration cTransposeEnumLiteralDeclaration = (EnumLiteralDeclaration)rule.eContents().get(1);
		private final Keyword cTransposeApostropheKeyword_0 = (Keyword)cTransposeEnumLiteralDeclaration.eContents().get(0);
		
		//enum PostfixOperator:
		//	Transpose="\'";
		public EnumRule getRule() { return rule; }

		//Transpose="\'"
		public EnumLiteralDeclaration getTransposeEnumLiteralDeclaration() { return cTransposeEnumLiteralDeclaration; }

		//"\'"
		public Keyword getTransposeApostropheKeyword_0() { return cTransposeApostropheKeyword_0; }
	}
	
	private ModuleElements pModule;
	private DefinitionElements pDefinition;
	private DataTypeDefinitionElements pDataTypeDefinition;
	private EnumerationDefinitionElements pEnumerationDefinition;
	private EnumerationLiteralDeclarationElements pEnumerationLiteralDeclaration;
	private TypeAliasDefinitionElements pTypeAliasDefinition;
	private RecordDefinitionElements pRecordDefinition;
	private RecordFieldDeclarationElements pRecordFieldDeclaration;
	private FunctionDefinitionElements pFunctionDefinition;
	private FunctionKindElements unknownRuleFunctionKind;
	private TemplateParameterDeclarationElements pTemplateParameterDeclaration;
	private InputParameterDeclarationElements pInputParameterDeclaration;
	private OutputParameterDeclarationElements pOutputParameterDeclaration;
	private CheckElements pCheck;
	private AssertionStatusKindElements unknownRuleAssertionStatusKind;
	private AssertionElements pAssertion;
	private StateVariableDeclarationElements pStateVariableDeclaration;
	private FunctionObjectDeclarationElements pFunctionObjectDeclaration;
	private EquationElements pEquation;
	private DataTypeSpecifierElements pDataTypeSpecifier;
	private PrimitiveTypeElements pPrimitiveType;
	private NumericTypeElements pNumericType;
	private RealTypeElements pRealType;
	private IntegerTypeElements pIntegerType;
	private ComplexTypeElements pComplexType;
	private GaussianTypeElements pGaussianType;
	private BooleanTypeElements pBooleanType;
	private StringTypeElements pStringType;
	private ArrayTypeElements pArrayType;
	private TensorTypeElements pTensorType;
	private ArrayDimensionElements pArrayDimension;
	private ExpressionElements pExpression;
	private LetExpressionElements pLetExpression;
	private LetExpressionVariableDeclarationElements pLetExpressionVariableDeclaration;
	private LetExpressionVariableDeclarationPartElements pLetExpressionVariableDeclarationPart;
	private IfExpressionElements pIfExpression;
	private SwitchExpressionElements pSwitchExpression;
	private SwitchCaseElements pSwitchCase;
	private RangeExpressionElements pRangeExpression;
	private ImpliesExpressionElements pImpliesExpression;
	private LogicalOrExpressionElements pLogicalOrExpression;
	private LogicalAndExpressionElements pLogicalAndExpression;
	private EqualityExpressionElements pEqualityExpression;
	private EqualityOperatorElements unknownRuleEqualityOperator;
	private RelationalExpressionElements pRelationalExpression;
	private RelationalOperatorElements unknownRuleRelationalOperator;
	private AdditiveExpressionElements pAdditiveExpression;
	private AdditiveOperatorElements unknownRuleAdditiveOperator;
	private MultiplicativeExpressionElements pMultiplicativeExpression;
	private MultiplicativeOperatorElements unknownRuleMultiplicativeOperator;
	private PowerExpressionElements pPowerExpression;
	private PowerOperatorElements unknownRulePowerOperator;
	private UnaryExpressionElements pUnaryExpression;
	private UnaryOperatorElements unknownRuleUnaryOperator;
	private PostfixExpressionElements pPostfixExpression;
	private PostfixOperatorElements unknownRulePostfixOperator;
	private ArrayElementAccessElements pArrayElementAccess;
	private MemberFeatureCallElements pMemberFeatureCall;
	private AssignableMemberFeatureCallElements pAssignableMemberFeatureCall;
	private IterationVariableElements pIterationVariable;
	private IterationAccumulatorElements pIterationAccumulator;
	private ArraySubscriptElements pArraySubscript;
	private PrimaryExpressionElements pPrimaryExpression;
	private AssignablePrimaryExpressionElements pAssignablePrimaryExpression;
	private LiteralElements pLiteral;
	private NumericLiteralElements pNumericLiteral;
	private RealLiteralElements pRealLiteral;
	private IntegerLiteralElements pIntegerLiteral;
	private BooleanLiteralElements pBooleanLiteral;
	private StringLiteralElements pStringLiteral;
	private FeatureCallElements pFeatureCall;
	private VariableAccessElements pVariableAccess;
	private FunctionCallElements pFunctionCall;
	private StepExpressionElements pStepExpression;
	private RangeStepExpressionElements pRangeStepExpression;
	private AdditiveStepExpressionElements pAdditiveStepExpression;
	private NegateStepExpressionElements pNegateStepExpression;
	private PrimitiveStepExpressionElements pPrimitiveStepExpression;
	private StepLiteralElements pStepLiteral;
	private StepNElements pStepN;
	private DerivativeOperatorElements pDerivativeOperator;
	private ArrayConstructionOperatorElements pArrayConstructionOperator;
	private ArrayConstructionIterationClauseElements pArrayConstructionIterationClause;
	private ArrayConcatenationOperatorElements pArrayConcatenationOperator;
	private ExpressionListElements pExpressionList;
	private UnitConstructionOperatorElements pUnitConstructionOperator;
	private ParenthesizedExpressionElements pParenthesizedExpression;
	private EndExpressionElements pEndExpression;
	private AlgorithmExpressionElements pAlgorithmExpression;
	private CompoundElements pCompound;
	private StatementElements pStatement;
	private AssignmentElements pAssignment;
	private VariableDeclarationElements pVariableDeclaration;
	private IfStatementElements pIfStatement;
	private WhileStatementElements pWhileStatement;
	private ForStatementElements pForStatement;
	private DoWhileStatementElements pDoWhileStatement;
	private ContinueStatementElements pContinueStatement;
	private BreakStatementElements pBreakStatement;
	private ReturnStatementElements pReturnStatement;
	private UnitElements pUnit;
	private ExplicitUnitElements pExplicitUnit;
	private UnitNumeratorElements pUnitNumerator;
	private ImplicitUnitNumeratorElements pImplicitUnitNumerator;
	private UnitDenominatorElements pUnitDenominator;
	private UnitFactorElements pUnitFactor;
	private UnitExponentElements pUnitExponent;
	private QualifiedNameElements pQualifiedName;
	private ValidDoubleElements pValidDouble;
	private ValidIntElements pValidInt;
	private ValidLongElements pValidLong;
	private ValidIDElements pValidID;
	private TerminalRule tN;
	private TerminalRule tID;
	private TerminalRule tSTRING;
	private TerminalRule tONE;
	private TerminalRule tREAL;
	private TerminalRule tINT;
	private TerminalRule tML_COMMENT;
	private TerminalRule tSL_COMMENT;
	private TerminalRule tWS;
	private TerminalRule tANY_OTHER;
	
	private final GrammarProvider grammarProvider;

	@Inject
	public MscriptGrammarAccess(GrammarProvider grammarProvider) {
		this.grammarProvider = grammarProvider;
	}
	
	public Grammar getGrammar() {	
		return grammarProvider.getGrammar(this);
	}
	

	
	//Module:
	//	definitions+=Definition*;
	public ModuleElements getModuleAccess() {
		return (pModule != null) ? pModule : (pModule = new ModuleElements());
	}
	
	public ParserRule getModuleRule() {
		return getModuleAccess().getRule();
	}

	//Definition:
	//	DataTypeDefinition | FunctionDefinition;
	public DefinitionElements getDefinitionAccess() {
		return (pDefinition != null) ? pDefinition : (pDefinition = new DefinitionElements());
	}
	
	public ParserRule getDefinitionRule() {
		return getDefinitionAccess().getRule();
	}

	/// *
	// * DataTypeDefinition
	// * / DataTypeDefinition:
	//	EnumerationDefinition | RecordDefinition | TypeAliasDefinition;
	public DataTypeDefinitionElements getDataTypeDefinitionAccess() {
		return (pDataTypeDefinition != null) ? pDataTypeDefinition : (pDataTypeDefinition = new DataTypeDefinitionElements());
	}
	
	public ParserRule getDataTypeDefinitionRule() {
		return getDataTypeDefinitionAccess().getRule();
	}

	/// *
	// * Enumeration
	// * / EnumerationDefinition:
	//	"enum" name=ValidID "{" (literalDeclarations+=EnumerationLiteralDeclaration (","
	//	literalDeclarations+=EnumerationLiteralDeclaration)*)? "}";
	public EnumerationDefinitionElements getEnumerationDefinitionAccess() {
		return (pEnumerationDefinition != null) ? pEnumerationDefinition : (pEnumerationDefinition = new EnumerationDefinitionElements());
	}
	
	public ParserRule getEnumerationDefinitionRule() {
		return getEnumerationDefinitionAccess().getRule();
	}

	//EnumerationLiteralDeclaration:
	//	name=ValidID;
	public EnumerationLiteralDeclarationElements getEnumerationLiteralDeclarationAccess() {
		return (pEnumerationLiteralDeclaration != null) ? pEnumerationLiteralDeclaration : (pEnumerationLiteralDeclaration = new EnumerationLiteralDeclarationElements());
	}
	
	public ParserRule getEnumerationLiteralDeclarationRule() {
		return getEnumerationLiteralDeclarationAccess().getRule();
	}

	/// *
	// * TypeAlias
	// * / TypeAliasDefinition:
	//	"type" name=ValidID "=" type=PrimitiveType ";";
	public TypeAliasDefinitionElements getTypeAliasDefinitionAccess() {
		return (pTypeAliasDefinition != null) ? pTypeAliasDefinition : (pTypeAliasDefinition = new TypeAliasDefinitionElements());
	}
	
	public ParserRule getTypeAliasDefinitionRule() {
		return getTypeAliasDefinitionAccess().getRule();
	}

	/// *
	// * Record
	// * / RecordDefinition:
	//	"record" name=ValidID "{" fieldDeclarations+=RecordFieldDeclaration* "}";
	public RecordDefinitionElements getRecordDefinitionAccess() {
		return (pRecordDefinition != null) ? pRecordDefinition : (pRecordDefinition = new RecordDefinitionElements());
	}
	
	public ParserRule getRecordDefinitionRule() {
		return getRecordDefinitionAccess().getRule();
	}

	//RecordFieldDeclaration:
	//	name=ValidID ":" type=DataTypeSpecifier ";";
	public RecordFieldDeclarationElements getRecordFieldDeclarationAccess() {
		return (pRecordFieldDeclaration != null) ? pRecordFieldDeclaration : (pRecordFieldDeclaration = new RecordFieldDeclarationElements());
	}
	
	public ParserRule getRecordFieldDeclarationRule() {
		return getRecordFieldDeclarationAccess().getRule();
	}

	/// *
	// * Function
	// * / FunctionDefinition:
	//	kind=FunctionKind? "func" name=ValidID ("<" templateParameterDeclarations+=TemplateParameterDeclaration (","
	//	templateParameterDeclarations+=TemplateParameterDeclaration)* ">")? "("
	//	(inputParameterDeclarations+=InputParameterDeclaration ("," inputParameterDeclarations+=InputParameterDeclaration)*)?
	//	")" "->" outputParameterDeclarations+=OutputParameterDeclaration (","
	//	outputParameterDeclarations+=OutputParameterDeclaration)* "{" (checks+=Check | assertions+=Assertion |
	//	functionObjectDeclarations+=FunctionObjectDeclaration | stateVariableDeclarations+=StateVariableDeclaration |
	//	equations+=Equation)* "}";
	public FunctionDefinitionElements getFunctionDefinitionAccess() {
		return (pFunctionDefinition != null) ? pFunctionDefinition : (pFunctionDefinition = new FunctionDefinitionElements());
	}
	
	public ParserRule getFunctionDefinitionRule() {
		return getFunctionDefinitionAccess().getRule();
	}

	//enum FunctionKind:
	//	Stateful="stateful" | Continuous="continuous";
	public FunctionKindElements getFunctionKindAccess() {
		return (unknownRuleFunctionKind != null) ? unknownRuleFunctionKind : (unknownRuleFunctionKind = new FunctionKindElements());
	}
	
	public EnumRule getFunctionKindRule() {
		return getFunctionKindAccess().getRule();
	}

	//TemplateParameterDeclaration:
	//	name=ValidID;
	public TemplateParameterDeclarationElements getTemplateParameterDeclarationAccess() {
		return (pTemplateParameterDeclaration != null) ? pTemplateParameterDeclaration : (pTemplateParameterDeclaration = new TemplateParameterDeclarationElements());
	}
	
	public ParserRule getTemplateParameterDeclarationRule() {
		return getTemplateParameterDeclarationAccess().getRule();
	}

	//InputParameterDeclaration:
	//	name=ValidID;
	public InputParameterDeclarationElements getInputParameterDeclarationAccess() {
		return (pInputParameterDeclaration != null) ? pInputParameterDeclaration : (pInputParameterDeclaration = new InputParameterDeclarationElements());
	}
	
	public ParserRule getInputParameterDeclarationRule() {
		return getInputParameterDeclarationAccess().getRule();
	}

	//OutputParameterDeclaration:
	//	name=ValidID;
	public OutputParameterDeclarationElements getOutputParameterDeclarationAccess() {
		return (pOutputParameterDeclaration != null) ? pOutputParameterDeclaration : (pOutputParameterDeclaration = new OutputParameterDeclarationElements());
	}
	
	public ParserRule getOutputParameterDeclarationRule() {
		return getOutputParameterDeclarationAccess().getRule();
	}

	//Check:
	//	"check" ("<" templateArguments+=Expression ("," templateArguments+=Expression)* ">")? "("
	//	(inputParameterTypes+=DataTypeSpecifier ("," inputParameterTypes+=DataTypeSpecifier)*)? ")" "->"
	//	outputParameterTypes+=DataTypeSpecifier ("," outputParameterTypes+=DataTypeSpecifier)* ";";
	public CheckElements getCheckAccess() {
		return (pCheck != null) ? pCheck : (pCheck = new CheckElements());
	}
	
	public ParserRule getCheckRule() {
		return getCheckAccess().getRule();
	}

	//enum AssertionStatusKind:
	//	Info="info" | Warning="warning" | Error="error" | Fatal="fatal";
	public AssertionStatusKindElements getAssertionStatusKindAccess() {
		return (unknownRuleAssertionStatusKind != null) ? unknownRuleAssertionStatusKind : (unknownRuleAssertionStatusKind = new AssertionStatusKindElements());
	}
	
	public EnumRule getAssertionStatusKindRule() {
		return getAssertionStatusKindAccess().getRule();
	}

	//Assertion:
	//	static?="static"? "assert" condition=Expression ":" statusKind=AssertionStatusKind message=Expression ";";
	public AssertionElements getAssertionAccess() {
		return (pAssertion != null) ? pAssertion : (pAssertion = new AssertionElements());
	}
	
	public ParserRule getAssertionRule() {
		return getAssertionAccess().getRule();
	}

	//StateVariableDeclaration:
	//	"var" name=ValidID ";";
	public StateVariableDeclarationElements getStateVariableDeclarationAccess() {
		return (pStateVariableDeclaration != null) ? pStateVariableDeclaration : (pStateVariableDeclaration = new StateVariableDeclarationElements());
	}
	
	public ParserRule getStateVariableDeclarationRule() {
		return getStateVariableDeclarationAccess().getRule();
	}

	//FunctionObjectDeclaration:
	//	"fob" name=ValidID ":" functionName=[FunctionDefinition|QualifiedName] ("<" templateArguments+=Expression (","
	//	templateArguments+=Expression)* ">")? ";";
	public FunctionObjectDeclarationElements getFunctionObjectDeclarationAccess() {
		return (pFunctionObjectDeclaration != null) ? pFunctionObjectDeclaration : (pFunctionObjectDeclaration = new FunctionObjectDeclarationElements());
	}
	
	public ParserRule getFunctionObjectDeclarationRule() {
		return getFunctionObjectDeclarationAccess().getRule();
	}

	//Equation:
	//	initial?="initial"? leftHandSide=Expression "=" rightHandSide=Expression ";";
	public EquationElements getEquationAccess() {
		return (pEquation != null) ? pEquation : (pEquation = new EquationElements());
	}
	
	public ParserRule getEquationRule() {
		return getEquationAccess().getRule();
	}

	/// *
	// * Data type specifier
	// * / DataTypeSpecifier:
	//	definedType=(PrimitiveType | ArrayType) | type=[DataType];
	public DataTypeSpecifierElements getDataTypeSpecifierAccess() {
		return (pDataTypeSpecifier != null) ? pDataTypeSpecifier : (pDataTypeSpecifier = new DataTypeSpecifierElements());
	}
	
	public ParserRule getDataTypeSpecifierRule() {
		return getDataTypeSpecifierAccess().getRule();
	}

	//PrimitiveType:
	//	NumericType | BooleanType | StringType;
	public PrimitiveTypeElements getPrimitiveTypeAccess() {
		return (pPrimitiveType != null) ? pPrimitiveType : (pPrimitiveType = new PrimitiveTypeElements());
	}
	
	public ParserRule getPrimitiveTypeRule() {
		return getPrimitiveTypeAccess().getRule();
	}

	//NumericType:
	//	RealType | IntegerType | ComplexType | GaussianType;
	public NumericTypeElements getNumericTypeAccess() {
		return (pNumericType != null) ? pNumericType : (pNumericType = new NumericTypeElements());
	}
	
	public ParserRule getNumericTypeRule() {
		return getNumericTypeAccess().getRule();
	}

	//RealType:
	//	{RealType} "real" unit=Unit;
	public RealTypeElements getRealTypeAccess() {
		return (pRealType != null) ? pRealType : (pRealType = new RealTypeElements());
	}
	
	public ParserRule getRealTypeRule() {
		return getRealTypeAccess().getRule();
	}

	//IntegerType:
	//	{IntegerType} "int" unit=Unit;
	public IntegerTypeElements getIntegerTypeAccess() {
		return (pIntegerType != null) ? pIntegerType : (pIntegerType = new IntegerTypeElements());
	}
	
	public ParserRule getIntegerTypeRule() {
		return getIntegerTypeAccess().getRule();
	}

	//ComplexType:
	//	{ComplexType} "complex" unit=Unit;
	public ComplexTypeElements getComplexTypeAccess() {
		return (pComplexType != null) ? pComplexType : (pComplexType = new ComplexTypeElements());
	}
	
	public ParserRule getComplexTypeRule() {
		return getComplexTypeAccess().getRule();
	}

	//GaussianType:
	//	{GaussianType} "gauss" unit=Unit;
	public GaussianTypeElements getGaussianTypeAccess() {
		return (pGaussianType != null) ? pGaussianType : (pGaussianType = new GaussianTypeElements());
	}
	
	public ParserRule getGaussianTypeRule() {
		return getGaussianTypeAccess().getRule();
	}

	//BooleanType:
	//	{BooleanType} "bool";
	public BooleanTypeElements getBooleanTypeAccess() {
		return (pBooleanType != null) ? pBooleanType : (pBooleanType = new BooleanTypeElements());
	}
	
	public ParserRule getBooleanTypeRule() {
		return getBooleanTypeAccess().getRule();
	}

	//StringType:
	//	{StringType} "string";
	public StringTypeElements getStringTypeAccess() {
		return (pStringType != null) ? pStringType : (pStringType = new StringTypeElements());
	}
	
	public ParserRule getStringTypeRule() {
		return getStringTypeAccess().getRule();
	}

	//ArrayType:
	//	TensorType | => (definedElementType=PrimitiveType | elementType=[DataType]) "[" dimensions+=ArrayDimension (","
	//	dimensions+=ArrayDimension)* "]";
	public ArrayTypeElements getArrayTypeAccess() {
		return (pArrayType != null) ? pArrayType : (pArrayType = new ArrayTypeElements());
	}
	
	public ParserRule getArrayTypeRule() {
		return getArrayTypeAccess().getRule();
	}

	//TensorType:
	//	definedElementType=NumericType "[" dimensions+=ArrayDimension ("," dimensions+=ArrayDimension)* "]";
	public TensorTypeElements getTensorTypeAccess() {
		return (pTensorType != null) ? pTensorType : (pTensorType = new TensorTypeElements());
	}
	
	public ParserRule getTensorTypeRule() {
		return getTensorTypeAccess().getRule();
	}

	//ArrayDimension:
	//	{ArrayDimension} size=Expression?;
	public ArrayDimensionElements getArrayDimensionAccess() {
		return (pArrayDimension != null) ? pArrayDimension : (pArrayDimension = new ArrayDimensionElements());
	}
	
	public ParserRule getArrayDimensionRule() {
		return getArrayDimensionAccess().getRule();
	}

	/// *
	// * Expressions
	// * / Expression:
	//	LetExpression | IfExpression | SwitchExpression | RangeExpression;
	public ExpressionElements getExpressionAccess() {
		return (pExpression != null) ? pExpression : (pExpression = new ExpressionElements());
	}
	
	public ParserRule getExpressionRule() {
		return getExpressionAccess().getRule();
	}

	//LetExpression:
	//	"let" variableDeclarations+=LetExpressionVariableDeclaration (","
	//	variableDeclarations+=LetExpressionVariableDeclaration)* "in" targetExpression=Expression;
	public LetExpressionElements getLetExpressionAccess() {
		return (pLetExpression != null) ? pLetExpression : (pLetExpression = new LetExpressionElements());
	}
	
	public ParserRule getLetExpressionRule() {
		return getLetExpressionAccess().getRule();
	}

	//LetExpressionVariableDeclaration:
	//	(parts+=LetExpressionVariableDeclarationPart | "(" parts+=LetExpressionVariableDeclarationPart (","
	//	parts+=LetExpressionVariableDeclarationPart)+ ")") "=" assignedExpression=Expression;
	public LetExpressionVariableDeclarationElements getLetExpressionVariableDeclarationAccess() {
		return (pLetExpressionVariableDeclaration != null) ? pLetExpressionVariableDeclaration : (pLetExpressionVariableDeclaration = new LetExpressionVariableDeclarationElements());
	}
	
	public ParserRule getLetExpressionVariableDeclarationRule() {
		return getLetExpressionVariableDeclarationAccess().getRule();
	}

	//LetExpressionVariableDeclarationPart:
	//	name=ValidID;
	public LetExpressionVariableDeclarationPartElements getLetExpressionVariableDeclarationPartAccess() {
		return (pLetExpressionVariableDeclarationPart != null) ? pLetExpressionVariableDeclarationPart : (pLetExpressionVariableDeclarationPart = new LetExpressionVariableDeclarationPartElements());
	}
	
	public ParserRule getLetExpressionVariableDeclarationPartRule() {
		return getLetExpressionVariableDeclarationPartAccess().getRule();
	}

	//IfExpression:
	//	static?="static"? "if" condition=Expression "then" thenExpression=Expression "else" elseExpression=Expression;
	public IfExpressionElements getIfExpressionAccess() {
		return (pIfExpression != null) ? pIfExpression : (pIfExpression = new IfExpressionElements());
	}
	
	public ParserRule getIfExpressionRule() {
		return getIfExpressionAccess().getRule();
	}

	//SwitchExpression:
	//	static?="static"? "switch" controlExpression=Expression cases+=SwitchCase* "default" ":" defaultExpression=Expression;
	public SwitchExpressionElements getSwitchExpressionAccess() {
		return (pSwitchExpression != null) ? pSwitchExpression : (pSwitchExpression = new SwitchExpressionElements());
	}
	
	public ParserRule getSwitchExpressionRule() {
		return getSwitchExpressionAccess().getRule();
	}

	//SwitchCase:
	//	"case" caseExpression=ImpliesExpression ":" resultExpression=Expression;
	public SwitchCaseElements getSwitchCaseAccess() {
		return (pSwitchCase != null) ? pSwitchCase : (pSwitchCase = new SwitchCaseElements());
	}
	
	public ParserRule getSwitchCaseRule() {
		return getSwitchCaseAccess().getRule();
	}

	//RangeExpression returns Expression:
	//	ImpliesExpression ({RangeExpression.operands+=current} ":" operands+=ImpliesExpression (":"
	//	operands+=ImpliesExpression)?)?;
	public RangeExpressionElements getRangeExpressionAccess() {
		return (pRangeExpression != null) ? pRangeExpression : (pRangeExpression = new RangeExpressionElements());
	}
	
	public ParserRule getRangeExpressionRule() {
		return getRangeExpressionAccess().getRule();
	}

	//ImpliesExpression returns Expression:
	//	LogicalOrExpression ({ImpliesExpression.leftOperand=current} "=>" rightOperand=LogicalOrExpression)?;
	public ImpliesExpressionElements getImpliesExpressionAccess() {
		return (pImpliesExpression != null) ? pImpliesExpression : (pImpliesExpression = new ImpliesExpressionElements());
	}
	
	public ParserRule getImpliesExpressionRule() {
		return getImpliesExpressionAccess().getRule();
	}

	//LogicalOrExpression returns Expression:
	//	LogicalAndExpression ({LogicalOrExpression.leftOperand=current} "||" rightOperand=LogicalAndExpression)*;
	public LogicalOrExpressionElements getLogicalOrExpressionAccess() {
		return (pLogicalOrExpression != null) ? pLogicalOrExpression : (pLogicalOrExpression = new LogicalOrExpressionElements());
	}
	
	public ParserRule getLogicalOrExpressionRule() {
		return getLogicalOrExpressionAccess().getRule();
	}

	//LogicalAndExpression returns Expression:
	//	EqualityExpression ({LogicalAndExpression.leftOperand=current} "&&" rightOperand=EqualityExpression)*;
	public LogicalAndExpressionElements getLogicalAndExpressionAccess() {
		return (pLogicalAndExpression != null) ? pLogicalAndExpression : (pLogicalAndExpression = new LogicalAndExpressionElements());
	}
	
	public ParserRule getLogicalAndExpressionRule() {
		return getLogicalAndExpressionAccess().getRule();
	}

	//EqualityExpression returns Expression:
	//	RelationalExpression ({EqualityExpression.leftOperand=current} operator=EqualityOperator
	//	rightOperand=RelationalExpression)*;
	public EqualityExpressionElements getEqualityExpressionAccess() {
		return (pEqualityExpression != null) ? pEqualityExpression : (pEqualityExpression = new EqualityExpressionElements());
	}
	
	public ParserRule getEqualityExpressionRule() {
		return getEqualityExpressionAccess().getRule();
	}

	//enum EqualityOperator:
	//	EqualTo="==" | NotEqualTo="!=";
	public EqualityOperatorElements getEqualityOperatorAccess() {
		return (unknownRuleEqualityOperator != null) ? unknownRuleEqualityOperator : (unknownRuleEqualityOperator = new EqualityOperatorElements());
	}
	
	public EnumRule getEqualityOperatorRule() {
		return getEqualityOperatorAccess().getRule();
	}

	//RelationalExpression returns Expression:
	//	AdditiveExpression => ({RelationalExpression.leftOperand=current} operator=RelationalOperator
	//	rightOperand=AdditiveExpression | {TypeTestExpression.expression=current} "is" type=DataTypeSpecifier)?;
	public RelationalExpressionElements getRelationalExpressionAccess() {
		return (pRelationalExpression != null) ? pRelationalExpression : (pRelationalExpression = new RelationalExpressionElements());
	}
	
	public ParserRule getRelationalExpressionRule() {
		return getRelationalExpressionAccess().getRule();
	}

	//enum RelationalOperator:
	//	LessThan="<" | LessThanOrEqualTo="<=" | GreaterThan=">" | GreaterThanOrEqualTo=">=";
	public RelationalOperatorElements getRelationalOperatorAccess() {
		return (unknownRuleRelationalOperator != null) ? unknownRuleRelationalOperator : (unknownRuleRelationalOperator = new RelationalOperatorElements());
	}
	
	public EnumRule getRelationalOperatorRule() {
		return getRelationalOperatorAccess().getRule();
	}

	//AdditiveExpression returns Expression:
	//	MultiplicativeExpression ({AdditiveExpression.leftOperand=current} operator=AdditiveOperator
	//	rightOperand=MultiplicativeExpression)*;
	public AdditiveExpressionElements getAdditiveExpressionAccess() {
		return (pAdditiveExpression != null) ? pAdditiveExpression : (pAdditiveExpression = new AdditiveExpressionElements());
	}
	
	public ParserRule getAdditiveExpressionRule() {
		return getAdditiveExpressionAccess().getRule();
	}

	//enum AdditiveOperator:
	//	Add="+" | Subtract="-";
	public AdditiveOperatorElements getAdditiveOperatorAccess() {
		return (unknownRuleAdditiveOperator != null) ? unknownRuleAdditiveOperator : (unknownRuleAdditiveOperator = new AdditiveOperatorElements());
	}
	
	public EnumRule getAdditiveOperatorRule() {
		return getAdditiveOperatorAccess().getRule();
	}

	//MultiplicativeExpression returns Expression:
	//	PowerExpression ({MultiplicativeExpression.leftOperand=current} operator=MultiplicativeOperator
	//	rightOperand=PowerExpression)*;
	public MultiplicativeExpressionElements getMultiplicativeExpressionAccess() {
		return (pMultiplicativeExpression != null) ? pMultiplicativeExpression : (pMultiplicativeExpression = new MultiplicativeExpressionElements());
	}
	
	public ParserRule getMultiplicativeExpressionRule() {
		return getMultiplicativeExpressionAccess().getRule();
	}

	//enum MultiplicativeOperator:
	//	Multiply="*" | Divide="/" | ElementWiseMultiply=".*" | ElementWiseDivide="./";
	public MultiplicativeOperatorElements getMultiplicativeOperatorAccess() {
		return (unknownRuleMultiplicativeOperator != null) ? unknownRuleMultiplicativeOperator : (unknownRuleMultiplicativeOperator = new MultiplicativeOperatorElements());
	}
	
	public EnumRule getMultiplicativeOperatorRule() {
		return getMultiplicativeOperatorAccess().getRule();
	}

	//PowerExpression returns Expression:
	//	UnaryExpression ({PowerExpression.operand=current} operator=PowerOperator exponent=UnaryExpression)?;
	public PowerExpressionElements getPowerExpressionAccess() {
		return (pPowerExpression != null) ? pPowerExpression : (pPowerExpression = new PowerExpressionElements());
	}
	
	public ParserRule getPowerExpressionRule() {
		return getPowerExpressionAccess().getRule();
	}

	//enum PowerOperator:
	//	Power="^" | ElementWisePower=".^";
	public PowerOperatorElements getPowerOperatorAccess() {
		return (unknownRulePowerOperator != null) ? unknownRulePowerOperator : (unknownRulePowerOperator = new PowerOperatorElements());
	}
	
	public EnumRule getPowerOperatorRule() {
		return getPowerOperatorAccess().getRule();
	}

	//UnaryExpression returns Expression:
	//	PostfixExpression | {UnaryExpression} operator=UnaryOperator operand=PostfixExpression;
	public UnaryExpressionElements getUnaryExpressionAccess() {
		return (pUnaryExpression != null) ? pUnaryExpression : (pUnaryExpression = new UnaryExpressionElements());
	}
	
	public ParserRule getUnaryExpressionRule() {
		return getUnaryExpressionAccess().getRule();
	}

	//enum UnaryOperator:
	//	Negate="-" | LogicalNot="!";
	public UnaryOperatorElements getUnaryOperatorAccess() {
		return (unknownRuleUnaryOperator != null) ? unknownRuleUnaryOperator : (unknownRuleUnaryOperator = new UnaryOperatorElements());
	}
	
	public EnumRule getUnaryOperatorRule() {
		return getUnaryOperatorAccess().getRule();
	}

	//PostfixExpression returns Expression:
	//	ArrayElementAccess ({PostfixExpression.operand=current} operator=PostfixOperator)?;
	public PostfixExpressionElements getPostfixExpressionAccess() {
		return (pPostfixExpression != null) ? pPostfixExpression : (pPostfixExpression = new PostfixExpressionElements());
	}
	
	public ParserRule getPostfixExpressionRule() {
		return getPostfixExpressionAccess().getRule();
	}

	//enum PostfixOperator:
	//	Transpose="\'";
	public PostfixOperatorElements getPostfixOperatorAccess() {
		return (unknownRulePostfixOperator != null) ? unknownRulePostfixOperator : (unknownRulePostfixOperator = new PostfixOperatorElements());
	}
	
	public EnumRule getPostfixOperatorRule() {
		return getPostfixOperatorAccess().getRule();
	}

	//ArrayElementAccess returns Expression:
	//	MemberFeatureCall ({ArrayElementAccess.array=current} "[" subscripts+=ArraySubscript ("," subscripts+=ArraySubscript)*
	//	"]")*;
	public ArrayElementAccessElements getArrayElementAccessAccess() {
		return (pArrayElementAccess != null) ? pArrayElementAccess : (pArrayElementAccess = new ArrayElementAccessElements());
	}
	
	public ParserRule getArrayElementAccessRule() {
		return getArrayElementAccessAccess().getRule();
	}

	//MemberFeatureCall returns Expression:
	//	PrimaryExpression ({MemberVariableAccess.target=current} "." memberVariable=[CallableElement|ValidID] |
	//	{FunctionCall.arguments+=current} "." feature=[CallableElement|ValidID] "(" (arguments+=Expression (","
	//	arguments+=Expression)*)? ")" | {IterationCall.target=current} "." identifier=ValidID "(" variables+=IterationVariable
	//	("," variables+=IterationVariable)* (";" accumulator=IterationAccumulator)? (";" breakCondition=Expression)? "|"
	//	expression=Expression ")")*;
	public MemberFeatureCallElements getMemberFeatureCallAccess() {
		return (pMemberFeatureCall != null) ? pMemberFeatureCall : (pMemberFeatureCall = new MemberFeatureCallElements());
	}
	
	public ParserRule getMemberFeatureCallRule() {
		return getMemberFeatureCallAccess().getRule();
	}

	//AssignableMemberFeatureCall returns Expression:
	//	AssignablePrimaryExpression ({MemberVariableAccess.target=current} "." memberVariable=[CallableElement|ValidID])*;
	public AssignableMemberFeatureCallElements getAssignableMemberFeatureCallAccess() {
		return (pAssignableMemberFeatureCall != null) ? pAssignableMemberFeatureCall : (pAssignableMemberFeatureCall = new AssignableMemberFeatureCallElements());
	}
	
	public ParserRule getAssignableMemberFeatureCallRule() {
		return getAssignableMemberFeatureCallAccess().getRule();
	}

	//IterationVariable:
	//	name=ValidID;
	public IterationVariableElements getIterationVariableAccess() {
		return (pIterationVariable != null) ? pIterationVariable : (pIterationVariable = new IterationVariableElements());
	}
	
	public ParserRule getIterationVariableRule() {
		return getIterationVariableAccess().getRule();
	}

	//IterationAccumulator:
	//	name=ValidID "=" initializer=Expression;
	public IterationAccumulatorElements getIterationAccumulatorAccess() {
		return (pIterationAccumulator != null) ? pIterationAccumulator : (pIterationAccumulator = new IterationAccumulatorElements());
	}
	
	public ParserRule getIterationAccumulatorRule() {
		return getIterationAccumulatorAccess().getRule();
	}

	//ArraySubscript:
	//	slice?=":" | expression=Expression;
	public ArraySubscriptElements getArraySubscriptAccess() {
		return (pArraySubscript != null) ? pArraySubscript : (pArraySubscript = new ArraySubscriptElements());
	}
	
	public ParserRule getArraySubscriptRule() {
		return getArraySubscriptAccess().getRule();
	}

	//PrimaryExpression returns Expression:
	//	Literal | FeatureCall | DerivativeOperator | UnitConstructionOperator | ArrayConstructionOperator |
	//	ArrayConcatenationOperator | ParenthesizedExpression | EndExpression | AlgorithmExpression;
	public PrimaryExpressionElements getPrimaryExpressionAccess() {
		return (pPrimaryExpression != null) ? pPrimaryExpression : (pPrimaryExpression = new PrimaryExpressionElements());
	}
	
	public ParserRule getPrimaryExpressionRule() {
		return getPrimaryExpressionAccess().getRule();
	}

	//AssignablePrimaryExpression returns Expression:
	//	FeatureCall | ParenthesizedExpression;
	public AssignablePrimaryExpressionElements getAssignablePrimaryExpressionAccess() {
		return (pAssignablePrimaryExpression != null) ? pAssignablePrimaryExpression : (pAssignablePrimaryExpression = new AssignablePrimaryExpressionElements());
	}
	
	public ParserRule getAssignablePrimaryExpressionRule() {
		return getAssignablePrimaryExpressionAccess().getRule();
	}

	//Literal:
	//	NumericLiteral | BooleanLiteral | StringLiteral;
	public LiteralElements getLiteralAccess() {
		return (pLiteral != null) ? pLiteral : (pLiteral = new LiteralElements());
	}
	
	public ParserRule getLiteralRule() {
		return getLiteralAccess().getRule();
	}

	//NumericLiteral:
	//	RealLiteral | IntegerLiteral;
	public NumericLiteralElements getNumericLiteralAccess() {
		return (pNumericLiteral != null) ? pNumericLiteral : (pNumericLiteral = new NumericLiteralElements());
	}
	
	public ParserRule getNumericLiteralRule() {
		return getNumericLiteralAccess().getRule();
	}

	//RealLiteral:
	//	value=ValidDouble modifier=ValidID? unit=Unit;
	public RealLiteralElements getRealLiteralAccess() {
		return (pRealLiteral != null) ? pRealLiteral : (pRealLiteral = new RealLiteralElements());
	}
	
	public ParserRule getRealLiteralRule() {
		return getRealLiteralAccess().getRule();
	}

	//IntegerLiteral:
	//	value=ValidLong modifier=ValidID? unit=Unit;
	public IntegerLiteralElements getIntegerLiteralAccess() {
		return (pIntegerLiteral != null) ? pIntegerLiteral : (pIntegerLiteral = new IntegerLiteralElements());
	}
	
	public ParserRule getIntegerLiteralRule() {
		return getIntegerLiteralAccess().getRule();
	}

	//BooleanLiteral:
	//	{BooleanLiteral} (true?="true" | "false");
	public BooleanLiteralElements getBooleanLiteralAccess() {
		return (pBooleanLiteral != null) ? pBooleanLiteral : (pBooleanLiteral = new BooleanLiteralElements());
	}
	
	public ParserRule getBooleanLiteralRule() {
		return getBooleanLiteralAccess().getRule();
	}

	//StringLiteral:
	//	value=STRING;
	public StringLiteralElements getStringLiteralAccess() {
		return (pStringLiteral != null) ? pStringLiteral : (pStringLiteral = new StringLiteralElements());
	}
	
	public ParserRule getStringLiteralRule() {
		return getStringLiteralAccess().getRule();
	}

	//FeatureCall returns Expression:
	//	VariableAccess | FunctionCall;
	public FeatureCallElements getFeatureCallAccess() {
		return (pFeatureCall != null) ? pFeatureCall : (pFeatureCall = new FeatureCallElements());
	}
	
	public ParserRule getFeatureCallRule() {
		return getFeatureCallAccess().getRule();
	}

	//VariableAccess returns Expression:
	//	{VariableAccess} feature=[CallableElement|QualifiedName] ("{" stepExpression=StepExpression "}")?;
	public VariableAccessElements getVariableAccessAccess() {
		return (pVariableAccess != null) ? pVariableAccess : (pVariableAccess = new VariableAccessElements());
	}
	
	public ParserRule getVariableAccessRule() {
		return getVariableAccessAccess().getRule();
	}

	//FunctionCall returns Expression:
	//	{FunctionCall} feature=[CallableElement|QualifiedName] "(" (arguments+=Expression ("," arguments+=Expression)*)? ")";
	public FunctionCallElements getFunctionCallAccess() {
		return (pFunctionCall != null) ? pFunctionCall : (pFunctionCall = new FunctionCallElements());
	}
	
	public ParserRule getFunctionCallRule() {
		return getFunctionCallAccess().getRule();
	}

	//StepExpression:
	//	RangeStepExpression;
	public StepExpressionElements getStepExpressionAccess() {
		return (pStepExpression != null) ? pStepExpression : (pStepExpression = new StepExpressionElements());
	}
	
	public ParserRule getStepExpressionRule() {
		return getStepExpressionAccess().getRule();
	}

	//RangeStepExpression returns StepExpression:
	//	AdditiveStepExpression ({RangeStepExpression.start=current} ".." end=AdditiveStepExpression)?;
	public RangeStepExpressionElements getRangeStepExpressionAccess() {
		return (pRangeStepExpression != null) ? pRangeStepExpression : (pRangeStepExpression = new RangeStepExpressionElements());
	}
	
	public ParserRule getRangeStepExpressionRule() {
		return getRangeStepExpressionAccess().getRule();
	}

	//AdditiveStepExpression returns StepExpression:
	//	NegateStepExpression ({AdditiveStepExpression.leftOperand=current} operator=AdditiveOperator
	//	rightOperand=NegateStepExpression)*;
	public AdditiveStepExpressionElements getAdditiveStepExpressionAccess() {
		return (pAdditiveStepExpression != null) ? pAdditiveStepExpression : (pAdditiveStepExpression = new AdditiveStepExpressionElements());
	}
	
	public ParserRule getAdditiveStepExpressionRule() {
		return getAdditiveStepExpressionAccess().getRule();
	}

	//NegateStepExpression returns StepExpression:
	//	PrimitiveStepExpression | {NegateStepExpression} "-" operand=PrimitiveStepExpression;
	public NegateStepExpressionElements getNegateStepExpressionAccess() {
		return (pNegateStepExpression != null) ? pNegateStepExpression : (pNegateStepExpression = new NegateStepExpressionElements());
	}
	
	public ParserRule getNegateStepExpressionRule() {
		return getNegateStepExpressionAccess().getRule();
	}

	//PrimitiveStepExpression returns StepExpression:
	//	StepLiteral | StepN;
	public PrimitiveStepExpressionElements getPrimitiveStepExpressionAccess() {
		return (pPrimitiveStepExpression != null) ? pPrimitiveStepExpression : (pPrimitiveStepExpression = new PrimitiveStepExpressionElements());
	}
	
	public ParserRule getPrimitiveStepExpressionRule() {
		return getPrimitiveStepExpressionAccess().getRule();
	}

	//StepLiteral:
	//	value=ValidInt;
	public StepLiteralElements getStepLiteralAccess() {
		return (pStepLiteral != null) ? pStepLiteral : (pStepLiteral = new StepLiteralElements());
	}
	
	public ParserRule getStepLiteralRule() {
		return getStepLiteralAccess().getRule();
	}

	//StepN:
	//	{StepN} N;
	public StepNElements getStepNAccess() {
		return (pStepN != null) ? pStepN : (pStepN = new StepNElements());
	}
	
	public ParserRule getStepNRule() {
		return getStepNAccess().getRule();
	}

	//DerivativeOperator:
	//	"der" variable=[CallableElement|ValidID];
	public DerivativeOperatorElements getDerivativeOperatorAccess() {
		return (pDerivativeOperator != null) ? pDerivativeOperator : (pDerivativeOperator = new DerivativeOperatorElements());
	}
	
	public ParserRule getDerivativeOperatorRule() {
		return getDerivativeOperatorAccess().getRule();
	}

	//ArrayConstructionOperator:
	//	"{" expressions+=Expression (("," expressions+=Expression)* | "for" iterationClauses+=ArrayConstructionIterationClause
	//	("," iterationClauses+=ArrayConstructionIterationClause)*) "}";
	public ArrayConstructionOperatorElements getArrayConstructionOperatorAccess() {
		return (pArrayConstructionOperator != null) ? pArrayConstructionOperator : (pArrayConstructionOperator = new ArrayConstructionOperatorElements());
	}
	
	public ParserRule getArrayConstructionOperatorRule() {
		return getArrayConstructionOperatorAccess().getRule();
	}

	//ArrayConstructionIterationClause:
	//	variableName=ValidID "in" collectionExpression=Expression;
	public ArrayConstructionIterationClauseElements getArrayConstructionIterationClauseAccess() {
		return (pArrayConstructionIterationClause != null) ? pArrayConstructionIterationClause : (pArrayConstructionIterationClause = new ArrayConstructionIterationClauseElements());
	}
	
	public ParserRule getArrayConstructionIterationClauseRule() {
		return getArrayConstructionIterationClauseAccess().getRule();
	}

	//ArrayConcatenationOperator:
	//	"[" rows+=ExpressionList (";" rows+=ExpressionList)* "]";
	public ArrayConcatenationOperatorElements getArrayConcatenationOperatorAccess() {
		return (pArrayConcatenationOperator != null) ? pArrayConcatenationOperator : (pArrayConcatenationOperator = new ArrayConcatenationOperatorElements());
	}
	
	public ParserRule getArrayConcatenationOperatorRule() {
		return getArrayConcatenationOperatorAccess().getRule();
	}

	//ExpressionList:
	//	expressions+=Expression ("," expressions+=Expression)*;
	public ExpressionListElements getExpressionListAccess() {
		return (pExpressionList != null) ? pExpressionList : (pExpressionList = new ExpressionListElements());
	}
	
	public ParserRule getExpressionListRule() {
		return getExpressionListAccess().getRule();
	}

	//UnitConstructionOperator:
	//	"$" unit=ExplicitUnit;
	public UnitConstructionOperatorElements getUnitConstructionOperatorAccess() {
		return (pUnitConstructionOperator != null) ? pUnitConstructionOperator : (pUnitConstructionOperator = new UnitConstructionOperatorElements());
	}
	
	public ParserRule getUnitConstructionOperatorRule() {
		return getUnitConstructionOperatorAccess().getRule();
	}

	//ParenthesizedExpression:
	//	"(" expressions+=Expression ("," expressions+=Expression)* ")";
	public ParenthesizedExpressionElements getParenthesizedExpressionAccess() {
		return (pParenthesizedExpression != null) ? pParenthesizedExpression : (pParenthesizedExpression = new ParenthesizedExpressionElements());
	}
	
	public ParserRule getParenthesizedExpressionRule() {
		return getParenthesizedExpressionAccess().getRule();
	}

	//EndExpression:
	//	{EndExpression} "end";
	public EndExpressionElements getEndExpressionAccess() {
		return (pEndExpression != null) ? pEndExpression : (pEndExpression = new EndExpressionElements());
	}
	
	public ParserRule getEndExpressionRule() {
		return getEndExpressionAccess().getRule();
	}

	//AlgorithmExpression returns Expression:
	//	{AlgorithmExpression} "algo" body=Compound;
	public AlgorithmExpressionElements getAlgorithmExpressionAccess() {
		return (pAlgorithmExpression != null) ? pAlgorithmExpression : (pAlgorithmExpression = new AlgorithmExpressionElements());
	}
	
	public ParserRule getAlgorithmExpressionRule() {
		return getAlgorithmExpressionAccess().getRule();
	}

	//Compound:
	//	{Compound} "{" statements+=Statement* "}";
	public CompoundElements getCompoundAccess() {
		return (pCompound != null) ? pCompound : (pCompound = new CompoundElements());
	}
	
	public ParserRule getCompoundRule() {
		return getCompoundAccess().getRule();
	}

	//Statement:
	//	Compound | Assignment | VariableDeclaration | IfStatement | WhileStatement | DoWhileStatement | ForStatement |
	//	ContinueStatement | BreakStatement | ReturnStatement;
	public StatementElements getStatementAccess() {
		return (pStatement != null) ? pStatement : (pStatement = new StatementElements());
	}
	
	public ParserRule getStatementRule() {
		return getStatementAccess().getRule();
	}

	//Assignment:
	//	target=AssignableMemberFeatureCall "=" expression=Expression ";";
	public AssignmentElements getAssignmentAccess() {
		return (pAssignment != null) ? pAssignment : (pAssignment = new AssignmentElements());
	}
	
	public ParserRule getAssignmentRule() {
		return getAssignmentAccess().getRule();
	}

	//VariableDeclaration:
	//	"var" name=ValidID "=" initializer=Expression ";";
	public VariableDeclarationElements getVariableDeclarationAccess() {
		return (pVariableDeclaration != null) ? pVariableDeclaration : (pVariableDeclaration = new VariableDeclarationElements());
	}
	
	public ParserRule getVariableDeclarationRule() {
		return getVariableDeclarationAccess().getRule();
	}

	//IfStatement:
	//	"if" "(" condition=Expression ")" thenStatement=Statement ("else" elseStatement=Statement)?;
	public IfStatementElements getIfStatementAccess() {
		return (pIfStatement != null) ? pIfStatement : (pIfStatement = new IfStatementElements());
	}
	
	public ParserRule getIfStatementRule() {
		return getIfStatementAccess().getRule();
	}

	//WhileStatement:
	//	"while" "(" condition=Expression ")" body=Statement;
	public WhileStatementElements getWhileStatementAccess() {
		return (pWhileStatement != null) ? pWhileStatement : (pWhileStatement = new WhileStatementElements());
	}
	
	public ParserRule getWhileStatementRule() {
		return getWhileStatementAccess().getRule();
	}

	//ForStatement:
	//	"for" "(" iterationVariable=IterationVariable "in" collectionExpression=Expression ")" body=Statement;
	public ForStatementElements getForStatementAccess() {
		return (pForStatement != null) ? pForStatement : (pForStatement = new ForStatementElements());
	}
	
	public ParserRule getForStatementRule() {
		return getForStatementAccess().getRule();
	}

	//DoWhileStatement:
	//	"do" body=Statement "while" "(" condition=Expression ")" ";";
	public DoWhileStatementElements getDoWhileStatementAccess() {
		return (pDoWhileStatement != null) ? pDoWhileStatement : (pDoWhileStatement = new DoWhileStatementElements());
	}
	
	public ParserRule getDoWhileStatementRule() {
		return getDoWhileStatementAccess().getRule();
	}

	//ContinueStatement:
	//	{ContinueStatement} "continue" ";";
	public ContinueStatementElements getContinueStatementAccess() {
		return (pContinueStatement != null) ? pContinueStatement : (pContinueStatement = new ContinueStatementElements());
	}
	
	public ParserRule getContinueStatementRule() {
		return getContinueStatementAccess().getRule();
	}

	//BreakStatement:
	//	{BreakStatement} "break" ";";
	public BreakStatementElements getBreakStatementAccess() {
		return (pBreakStatement != null) ? pBreakStatement : (pBreakStatement = new BreakStatementElements());
	}
	
	public ParserRule getBreakStatementRule() {
		return getBreakStatementAccess().getRule();
	}

	//ReturnStatement:
	//	"return" expression=Expression ";";
	public ReturnStatementElements getReturnStatementAccess() {
		return (pReturnStatement != null) ? pReturnStatement : (pReturnStatement = new ReturnStatementElements());
	}
	
	public ParserRule getReturnStatementRule() {
		return getReturnStatementAccess().getRule();
	}

	/// *
	// * Unit expressions
	// * / Unit:
	//	{Unit} ("(" ")" | "(" numerator=UnitNumerator ("/" denominator=UnitDenominator)? ")" |
	//	numerator=ImplicitUnitNumerator);
	public UnitElements getUnitAccess() {
		return (pUnit != null) ? pUnit : (pUnit = new UnitElements());
	}
	
	public ParserRule getUnitRule() {
		return getUnitAccess().getRule();
	}

	//ExplicitUnit returns Unit:
	//	"(" numerator=UnitNumerator ("/" denominator=UnitDenominator)? ")";
	public ExplicitUnitElements getExplicitUnitAccess() {
		return (pExplicitUnit != null) ? pExplicitUnit : (pExplicitUnit = new ExplicitUnitElements());
	}
	
	public ParserRule getExplicitUnitRule() {
		return getExplicitUnitAccess().getRule();
	}

	//UnitNumerator:
	//	{UnitNumerator} ONE | factors+=UnitFactor ("*" factors+=UnitFactor)*;
	public UnitNumeratorElements getUnitNumeratorAccess() {
		return (pUnitNumerator != null) ? pUnitNumerator : (pUnitNumerator = new UnitNumeratorElements());
	}
	
	public ParserRule getUnitNumeratorRule() {
		return getUnitNumeratorAccess().getRule();
	}

	//ImplicitUnitNumerator returns UnitNumerator:
	//	{UnitNumerator};
	public ImplicitUnitNumeratorElements getImplicitUnitNumeratorAccess() {
		return (pImplicitUnitNumerator != null) ? pImplicitUnitNumerator : (pImplicitUnitNumerator = new ImplicitUnitNumeratorElements());
	}
	
	public ParserRule getImplicitUnitNumeratorRule() {
		return getImplicitUnitNumeratorAccess().getRule();
	}

	//UnitDenominator:
	//	factors+=UnitFactor | "(" factors+=UnitFactor ("*" factors+=UnitFactor)* ")";
	public UnitDenominatorElements getUnitDenominatorAccess() {
		return (pUnitDenominator != null) ? pUnitDenominator : (pUnitDenominator = new UnitDenominatorElements());
	}
	
	public ParserRule getUnitDenominatorRule() {
		return getUnitDenominatorAccess().getRule();
	}

	//UnitFactor:
	//	symbol=ValidID ("^" exponent=UnitExponent)?;
	public UnitFactorElements getUnitFactorAccess() {
		return (pUnitFactor != null) ? pUnitFactor : (pUnitFactor = new UnitFactorElements());
	}
	
	public ParserRule getUnitFactorRule() {
		return getUnitFactorAccess().getRule();
	}

	//UnitExponent returns ecore::EInt:
	//	"-"? ValidInt;
	public UnitExponentElements getUnitExponentAccess() {
		return (pUnitExponent != null) ? pUnitExponent : (pUnitExponent = new UnitExponentElements());
	}
	
	public ParserRule getUnitExponentRule() {
		return getUnitExponentAccess().getRule();
	}

	//QualifiedName:
	//	ValidID ("::" ValidID)*;
	public QualifiedNameElements getQualifiedNameAccess() {
		return (pQualifiedName != null) ? pQualifiedName : (pQualifiedName = new QualifiedNameElements());
	}
	
	public ParserRule getQualifiedNameRule() {
		return getQualifiedNameAccess().getRule();
	}

	//ValidDouble returns ecore::EDouble:
	//	REAL;
	public ValidDoubleElements getValidDoubleAccess() {
		return (pValidDouble != null) ? pValidDouble : (pValidDouble = new ValidDoubleElements());
	}
	
	public ParserRule getValidDoubleRule() {
		return getValidDoubleAccess().getRule();
	}

	//ValidInt returns ecore::EInt:
	//	ONE | INT;
	public ValidIntElements getValidIntAccess() {
		return (pValidInt != null) ? pValidInt : (pValidInt = new ValidIntElements());
	}
	
	public ParserRule getValidIntRule() {
		return getValidIntAccess().getRule();
	}

	//ValidLong returns ecore::ELong:
	//	ONE | INT;
	public ValidLongElements getValidLongAccess() {
		return (pValidLong != null) ? pValidLong : (pValidLong = new ValidLongElements());
	}
	
	public ParserRule getValidLongRule() {
		return getValidLongAccess().getRule();
	}

	//ValidID:
	//	N | ID;
	public ValidIDElements getValidIDAccess() {
		return (pValidID != null) ? pValidID : (pValidID = new ValidIDElements());
	}
	
	public ParserRule getValidIDRule() {
		return getValidIDAccess().getRule();
	}

	/// *
	// * Terminals
	// * / terminal N:
	//	"n";
	public TerminalRule getNRule() {
		return (tN != null) ? tN : (tN = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "N"));
	} 

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

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

	//terminal ONE:
	//	"1";
	public TerminalRule getONERule() {
		return (tONE != null) ? tONE : (tONE = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "ONE"));
	} 

	//terminal REAL:
	//	"0".."9"+ "." "0".."9"* (("e" | "E") ("+" | "-")? "0".."9"+)?;
	public TerminalRule getREALRule() {
		return (tREAL != null) ? tREAL : (tREAL = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "REAL"));
	} 

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

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

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

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

	//terminal ANY_OTHER:
	//	.;
	public TerminalRule getANY_OTHERRule() {
		return (tANY_OTHER != null) ? tANY_OTHER : (tANY_OTHER = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "ANY_OTHER"));
	} 
}
