/*******************************************************************************
 * Copyright (c) 2015, 2016 CNRS, IRIT, IRT AESE (IRT Saint Exupéry).
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the LGPL 3.0
 * which accompanies this distribution, and is available at
 * https://www.gnu.org/licenses/lgpl-3.0-standalone.html
 *
 * Contributors:
 *      Faiez Zalila - initial API and implementation and/or initial documentation
 *******************************************************************************/
/*
 * generated by Xtext 2.10.0
 */
package fr.irit.fiacre.xtext.services;

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

@Singleton
public class FiacreGrammarAccess extends AbstractGrammarElementFinder {
	
	public class ModelElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Model");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cModelAction_0 = (Action)cGroup.eContents().get(0);
		private final Assignment cImportsAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cImportsImportDeclarationParserRuleCall_1_0 = (RuleCall)cImportsAssignment_1.eContents().get(0);
		private final Alternatives cAlternatives_2 = (Alternatives)cGroup.eContents().get(2);
		private final Assignment cDeclarationsAssignment_2_0 = (Assignment)cAlternatives_2.eContents().get(0);
		private final RuleCall cDeclarationsDeclarationParserRuleCall_2_0_0 = (RuleCall)cDeclarationsAssignment_2_0.eContents().get(0);
		private final Assignment cRequirementsAssignment_2_1 = (Assignment)cAlternatives_2.eContents().get(1);
		private final RuleCall cRequirementsRequirementParserRuleCall_2_1_0 = (RuleCall)cRequirementsAssignment_2_1.eContents().get(0);
		private final Assignment cRootAssignment_2_2 = (Assignment)cAlternatives_2.eContents().get(2);
		private final RuleCall cRootRootParserRuleCall_2_2_0 = (RuleCall)cRootAssignment_2_2.eContents().get(0);
		
		//Model:
		//	{Model} imports+=ImportDeclaration* (declarations+=Declaration | requirements+=Requirement
		//	/ * added alternative root * / | root+=Root)*
		//	//	((root=[RootDeclaration])? (declarations+=Declaration | requirements+=Requirement)*)
		//;
		@Override public ParserRule getRule() { return rule; }
		
		//{Model} imports+=ImportDeclaration* (declarations+=Declaration | requirements+=Requirement / * added alternative root * /
		//| root+=Root)*
		public Group getGroup() { return cGroup; }
		
		//{Model}
		public Action getModelAction_0() { return cModelAction_0; }
		
		//imports+=ImportDeclaration*
		public Assignment getImportsAssignment_1() { return cImportsAssignment_1; }
		
		//ImportDeclaration
		public RuleCall getImportsImportDeclarationParserRuleCall_1_0() { return cImportsImportDeclarationParserRuleCall_1_0; }
		
		//(declarations+=Declaration | requirements+=Requirement / * added alternative root * / | root+=Root)*
		public Alternatives getAlternatives_2() { return cAlternatives_2; }
		
		//declarations+=Declaration
		public Assignment getDeclarationsAssignment_2_0() { return cDeclarationsAssignment_2_0; }
		
		//Declaration
		public RuleCall getDeclarationsDeclarationParserRuleCall_2_0_0() { return cDeclarationsDeclarationParserRuleCall_2_0_0; }
		
		//requirements+=Requirement
		public Assignment getRequirementsAssignment_2_1() { return cRequirementsAssignment_2_1; }
		
		//Requirement
		public RuleCall getRequirementsRequirementParserRuleCall_2_1_0() { return cRequirementsRequirementParserRuleCall_2_1_0; }
		
		//root+=Root
		public Assignment getRootAssignment_2_2() { return cRootAssignment_2_2; }
		
		//Root
		public RuleCall getRootRootParserRuleCall_2_2_0() { return cRootRootParserRuleCall_2_2_0; }
	}
	public class RootDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.RootDeclaration");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cComponentDeclarationParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cProcessDeclarationParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//RootDeclaration:
		//	ComponentDeclaration
		//	| ProcessDeclaration;
		@Override public ParserRule getRule() { return rule; }
		
		//ComponentDeclaration | ProcessDeclaration
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//ComponentDeclaration
		public RuleCall getComponentDeclarationParserRuleCall_0() { return cComponentDeclarationParserRuleCall_0; }
		
		//ProcessDeclaration
		public RuleCall getProcessDeclarationParserRuleCall_1() { return cProcessDeclarationParserRuleCall_1; }
	}
	public class RootElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Root");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cRootAction_0 = (Action)cGroup.eContents().get(0);
		private final Assignment cDeclarationAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final CrossReference cDeclarationRootDeclarationCrossReference_1_0 = (CrossReference)cDeclarationAssignment_1.eContents().get(0);
		private final RuleCall cDeclarationRootDeclarationIDTerminalRuleCall_1_0_1 = (RuleCall)cDeclarationRootDeclarationCrossReference_1_0.eContents().get(1);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cGreaterThanSignKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Group cGroup_2_1 = (Group)cGroup_2.eContents().get(1);
		private final Assignment cObservedAssignment_2_1_0 = (Assignment)cGroup_2_1.eContents().get(0);
		private final CrossReference cObservedRootDeclarationCrossReference_2_1_0_0 = (CrossReference)cObservedAssignment_2_1_0.eContents().get(0);
		private final RuleCall cObservedRootDeclarationIDTerminalRuleCall_2_1_0_0_1 = (RuleCall)cObservedRootDeclarationCrossReference_2_1_0_0.eContents().get(1);
		private final Group cGroup_2_1_1 = (Group)cGroup_2_1.eContents().get(1);
		private final Keyword cVerticalLineKeyword_2_1_1_0 = (Keyword)cGroup_2_1_1.eContents().get(0);
		private final Assignment cObservedAssignment_2_1_1_1 = (Assignment)cGroup_2_1_1.eContents().get(1);
		private final CrossReference cObservedRootDeclarationCrossReference_2_1_1_1_0 = (CrossReference)cObservedAssignment_2_1_1_1.eContents().get(0);
		private final RuleCall cObservedRootDeclarationIDTerminalRuleCall_2_1_1_1_0_1 = (RuleCall)cObservedRootDeclarationCrossReference_2_1_1_1_0.eContents().get(1);
		
		//Root:
		//	{Root} declaration=[RootDeclaration] ('>' (observed+=[RootDeclaration] ('|' observed+=[RootDeclaration])*))?;
		@Override public ParserRule getRule() { return rule; }
		
		//{Root} declaration=[RootDeclaration] ('>' (observed+=[RootDeclaration] ('|' observed+=[RootDeclaration])*))?
		public Group getGroup() { return cGroup; }
		
		//{Root}
		public Action getRootAction_0() { return cRootAction_0; }
		
		//declaration=[RootDeclaration]
		public Assignment getDeclarationAssignment_1() { return cDeclarationAssignment_1; }
		
		//[RootDeclaration]
		public CrossReference getDeclarationRootDeclarationCrossReference_1_0() { return cDeclarationRootDeclarationCrossReference_1_0; }
		
		//ID
		public RuleCall getDeclarationRootDeclarationIDTerminalRuleCall_1_0_1() { return cDeclarationRootDeclarationIDTerminalRuleCall_1_0_1; }
		
		//('>' (observed+=[RootDeclaration] ('|' observed+=[RootDeclaration])*))?
		public Group getGroup_2() { return cGroup_2; }
		
		//'>'
		public Keyword getGreaterThanSignKeyword_2_0() { return cGreaterThanSignKeyword_2_0; }
		
		//(observed+=[RootDeclaration] ('|' observed+=[RootDeclaration])*)
		public Group getGroup_2_1() { return cGroup_2_1; }
		
		//observed+=[RootDeclaration]
		public Assignment getObservedAssignment_2_1_0() { return cObservedAssignment_2_1_0; }
		
		//[RootDeclaration]
		public CrossReference getObservedRootDeclarationCrossReference_2_1_0_0() { return cObservedRootDeclarationCrossReference_2_1_0_0; }
		
		//ID
		public RuleCall getObservedRootDeclarationIDTerminalRuleCall_2_1_0_0_1() { return cObservedRootDeclarationIDTerminalRuleCall_2_1_0_0_1; }
		
		//('|' observed+=[RootDeclaration])*
		public Group getGroup_2_1_1() { return cGroup_2_1_1; }
		
		//'|'
		public Keyword getVerticalLineKeyword_2_1_1_0() { return cVerticalLineKeyword_2_1_1_0; }
		
		//observed+=[RootDeclaration]
		public Assignment getObservedAssignment_2_1_1_1() { return cObservedAssignment_2_1_1_1; }
		
		//[RootDeclaration]
		public CrossReference getObservedRootDeclarationCrossReference_2_1_1_1_0() { return cObservedRootDeclarationCrossReference_2_1_1_1_0; }
		
		//ID
		public RuleCall getObservedRootDeclarationIDTerminalRuleCall_2_1_1_1_0_1() { return cObservedRootDeclarationIDTerminalRuleCall_2_1_1_1_0_1; }
	}
	public class NamedElementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.NamedElement");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cDeclarationParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cPortDeclarationParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cParameterDeclarationParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cVariableDeclarationParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		private final RuleCall cStateDeclarationParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
		private final RuleCall cRecordFieldDeclarationParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
		private final RuleCall cUnionTagDeclarationParserRuleCall_6 = (RuleCall)cAlternatives.eContents().get(6);
		
		//NamedElement:
		//	Declaration
		//	//| GenericDeclaration
		//	| PortDeclaration
		//	| ParameterDeclaration
		//	| VariableDeclaration
		//	| StateDeclaration
		//	| RecordFieldDeclaration
		//	| UnionTagDeclaration
		//	//ajout Faiez
		//	//	| TagDeclaration
		//;
		@Override public ParserRule getRule() { return rule; }
		
		//Declaration //| GenericDeclaration
		//| PortDeclaration | ParameterDeclaration | VariableDeclaration | StateDeclaration | RecordFieldDeclaration |
		//UnionTagDeclaration
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//Declaration
		public RuleCall getDeclarationParserRuleCall_0() { return cDeclarationParserRuleCall_0; }
		
		//PortDeclaration
		public RuleCall getPortDeclarationParserRuleCall_1() { return cPortDeclarationParserRuleCall_1; }
		
		//ParameterDeclaration
		public RuleCall getParameterDeclarationParserRuleCall_2() { return cParameterDeclarationParserRuleCall_2; }
		
		//VariableDeclaration
		public RuleCall getVariableDeclarationParserRuleCall_3() { return cVariableDeclarationParserRuleCall_3; }
		
		//StateDeclaration
		public RuleCall getStateDeclarationParserRuleCall_4() { return cStateDeclarationParserRuleCall_4; }
		
		//RecordFieldDeclaration
		public RuleCall getRecordFieldDeclarationParserRuleCall_5() { return cRecordFieldDeclarationParserRuleCall_5; }
		
		//UnionTagDeclaration
		public RuleCall getUnionTagDeclarationParserRuleCall_6() { return cUnionTagDeclarationParserRuleCall_6; }
	}
	public class TypeDeclarationUseElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.TypeDeclarationUse");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cTypeDeclarationParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cChannelDeclarationParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//TypeDeclarationUse:
		//	TypeDeclaration
		//	//| GenericTypeDeclaration
		//	| ChannelDeclaration
		//	//| GenericConstantDeclaration
		//;
		@Override public ParserRule getRule() { return rule; }
		
		//TypeDeclaration //| GenericTypeDeclaration
		//| ChannelDeclaration
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//TypeDeclaration
		public RuleCall getTypeDeclarationParserRuleCall_0() { return cTypeDeclarationParserRuleCall_0; }
		
		//ChannelDeclaration
		public RuleCall getChannelDeclarationParserRuleCall_1() { return cChannelDeclarationParserRuleCall_1; }
	}
	public class ConstantDeclarationUseElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ConstantDeclarationUse");
		private final RuleCall cConstantDeclarationParserRuleCall = (RuleCall)rule.eContents().get(1);
		
		//ConstantDeclarationUse:
		//	ConstantDeclaration
		//	//| GenericConstantDeclaration
		//;
		@Override public ParserRule getRule() { return rule; }
		
		//ConstantDeclaration
		public RuleCall getConstantDeclarationParserRuleCall() { return cConstantDeclarationParserRuleCall; }
	}
	public class ExpressionDeclarationUseElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ExpressionDeclarationUse");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cVariableDeclarationParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cConstantDeclarationParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cParameterDeclarationParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cPortDeclarationParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		private final RuleCall cUnionTagDeclarationParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
		private final RuleCall cFunctionDeclarationParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
		
		//ExpressionDeclarationUse:
		//	VariableDeclaration
		//	| ConstantDeclaration
		//	//| GenericConstantDeclaration
		//	| ParameterDeclaration
		//	| PortDeclaration
		//	| UnionTagDeclaration
		//	//| GenericDeclaration
		//	| FunctionDeclaration;
		@Override public ParserRule getRule() { return rule; }
		
		//VariableDeclaration | ConstantDeclaration //| GenericConstantDeclaration
		//| ParameterDeclaration | PortDeclaration | UnionTagDeclaration //| GenericDeclaration
		//| FunctionDeclaration
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//VariableDeclaration
		public RuleCall getVariableDeclarationParserRuleCall_0() { return cVariableDeclarationParserRuleCall_0; }
		
		//ConstantDeclaration
		public RuleCall getConstantDeclarationParserRuleCall_1() { return cConstantDeclarationParserRuleCall_1; }
		
		//ParameterDeclaration
		public RuleCall getParameterDeclarationParserRuleCall_2() { return cParameterDeclarationParserRuleCall_2; }
		
		//PortDeclaration
		public RuleCall getPortDeclarationParserRuleCall_3() { return cPortDeclarationParserRuleCall_3; }
		
		//UnionTagDeclaration
		public RuleCall getUnionTagDeclarationParserRuleCall_4() { return cUnionTagDeclarationParserRuleCall_4; }
		
		//FunctionDeclaration
		public RuleCall getFunctionDeclarationParserRuleCall_5() { return cFunctionDeclarationParserRuleCall_5; }
	}
	public class ReferenceDeclarationUseElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ReferenceDeclarationUse");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cVariableDeclarationParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cParameterDeclarationParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//ReferenceDeclarationUse:
		//	VariableDeclaration
		//	| ParameterDeclaration;
		@Override public ParserRule getRule() { return rule; }
		
		//VariableDeclaration | ParameterDeclaration
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//VariableDeclaration
		public RuleCall getVariableDeclarationParserRuleCall_0() { return cVariableDeclarationParserRuleCall_0; }
		
		//ParameterDeclaration
		public RuleCall getParameterDeclarationParserRuleCall_1() { return cParameterDeclarationParserRuleCall_1; }
	}
	public class UnionTagDeclarationUseElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.UnionTagDeclarationUse");
		private final RuleCall cUnionTagDeclarationParserRuleCall = (RuleCall)rule.eContents().get(1);
		
		//UnionTagDeclarationUse:
		//	UnionTagDeclaration
		//	//| GenericUnionTagDeclaration
		//;
		@Override public ParserRule getRule() { return rule; }
		
		//UnionTagDeclaration
		public RuleCall getUnionTagDeclarationParserRuleCall() { return cUnionTagDeclarationParserRuleCall; }
	}
	public class RecordFieldDeclarationUseElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.RecordFieldDeclarationUse");
		private final RuleCall cRecordFieldDeclarationParserRuleCall = (RuleCall)rule.eContents().get(1);
		
		//RecordFieldDeclarationUse:
		//	RecordFieldDeclaration
		//	//| GenericRecordFieldDeclaration
		//;
		@Override public ParserRule getRule() { return rule; }
		
		//RecordFieldDeclaration
		public RuleCall getRecordFieldDeclarationParserRuleCall() { return cRecordFieldDeclarationParserRuleCall; }
	}
	public class PatternDeclarationUseElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PatternDeclarationUse");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cVariableDeclarationParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cParameterDeclarationParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cPortDeclarationParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cUnionTagDeclarationParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		
		//PatternDeclarationUse:
		//	VariableDeclaration
		//	| ParameterDeclaration
		//	| PortDeclaration
		//	| UnionTagDeclaration
		//	//| GenericUnionTagDeclaration
		//;
		@Override public ParserRule getRule() { return rule; }
		
		//VariableDeclaration | ParameterDeclaration | PortDeclaration | UnionTagDeclaration
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//VariableDeclaration
		public RuleCall getVariableDeclarationParserRuleCall_0() { return cVariableDeclarationParserRuleCall_0; }
		
		//ParameterDeclaration
		public RuleCall getParameterDeclarationParserRuleCall_1() { return cParameterDeclarationParserRuleCall_1; }
		
		//PortDeclaration
		public RuleCall getPortDeclarationParserRuleCall_2() { return cPortDeclarationParserRuleCall_2; }
		
		//UnionTagDeclaration
		public RuleCall getUnionTagDeclarationParserRuleCall_3() { return cUnionTagDeclarationParserRuleCall_3; }
	}
	public class BoundDeclarationUseElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.BoundDeclarationUse");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cVariableDeclarationParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cConstantDeclarationParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//BoundDeclarationUse:
		//	VariableDeclaration
		//	//| GenericConstantDeclaration
		//	| ConstantDeclaration;
		@Override public ParserRule getRule() { return rule; }
		
		//VariableDeclaration //| GenericConstantDeclaration
		//| ConstantDeclaration
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//VariableDeclaration
		public RuleCall getVariableDeclarationParserRuleCall_0() { return cVariableDeclarationParserRuleCall_0; }
		
		//ConstantDeclaration
		public RuleCall getConstantDeclarationParserRuleCall_1() { return cConstantDeclarationParserRuleCall_1; }
	}
	public class PathDeclarationUseElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PathDeclarationUse");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cComponentDeclarationParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cInstanceDeclarationParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cProcessDeclarationParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		
		//PathDeclarationUse:
		//	ComponentDeclaration
		//	| InstanceDeclaration
		//	| ProcessDeclaration;
		@Override public ParserRule getRule() { return rule; }
		
		//ComponentDeclaration | InstanceDeclaration | ProcessDeclaration
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//ComponentDeclaration
		public RuleCall getComponentDeclarationParserRuleCall_0() { return cComponentDeclarationParserRuleCall_0; }
		
		//InstanceDeclaration
		public RuleCall getInstanceDeclarationParserRuleCall_1() { return cInstanceDeclarationParserRuleCall_1; }
		
		//ProcessDeclaration
		public RuleCall getProcessDeclarationParserRuleCall_2() { return cProcessDeclarationParserRuleCall_2; }
	}
	public class PropertyDeclarationUseElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PropertyDeclarationUse");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cPropertyDeclarationParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cVariableDeclarationParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//PropertyDeclarationUse:
		//	PropertyDeclaration
		//	| VariableDeclaration;
		@Override public ParserRule getRule() { return rule; }
		
		//PropertyDeclaration | VariableDeclaration
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//PropertyDeclaration
		public RuleCall getPropertyDeclarationParserRuleCall_0() { return cPropertyDeclarationParserRuleCall_0; }
		
		//VariableDeclaration
		public RuleCall getVariableDeclarationParserRuleCall_1() { return cVariableDeclarationParserRuleCall_1; }
	}
	public class ImportDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ImportDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cIncludeKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cImportURIAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cImportURISTRINGTerminalRuleCall_1_0 = (RuleCall)cImportURIAssignment_1.eContents().get(0);
		
		//ImportDeclaration:
		//	'#include' importURI=STRING;
		@Override public ParserRule getRule() { return rule; }
		
		//'#include' importURI=STRING
		public Group getGroup() { return cGroup; }
		
		//'#include'
		public Keyword getIncludeKeyword_0() { return cIncludeKeyword_0; }
		
		//importURI=STRING
		public Assignment getImportURIAssignment_1() { return cImportURIAssignment_1; }
		
		//STRING
		public RuleCall getImportURISTRINGTerminalRuleCall_1_0() { return cImportURISTRINGTerminalRuleCall_1_0; }
	}
	public class DeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Declaration");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cTypeDeclarationParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cChannelDeclarationParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cConstantDeclarationParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cParameterizedDeclarationParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		private final RuleCall cPropertyDeclarationParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
		
		//Declaration:
		//	TypeDeclaration
		//	| ChannelDeclaration
		//	| ConstantDeclaration
		//	| ParameterizedDeclaration
		//	| PropertyDeclaration;
		@Override public ParserRule getRule() { return rule; }
		
		//TypeDeclaration | ChannelDeclaration | ConstantDeclaration | ParameterizedDeclaration | PropertyDeclaration
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//TypeDeclaration
		public RuleCall getTypeDeclarationParserRuleCall_0() { return cTypeDeclarationParserRuleCall_0; }
		
		//ChannelDeclaration
		public RuleCall getChannelDeclarationParserRuleCall_1() { return cChannelDeclarationParserRuleCall_1; }
		
		//ConstantDeclaration
		public RuleCall getConstantDeclarationParserRuleCall_2() { return cConstantDeclarationParserRuleCall_2; }
		
		//ParameterizedDeclaration
		public RuleCall getParameterizedDeclarationParserRuleCall_3() { return cParameterizedDeclarationParserRuleCall_3; }
		
		//PropertyDeclaration
		public RuleCall getPropertyDeclarationParserRuleCall_4() { return cPropertyDeclarationParserRuleCall_4; }
	}
	public class ParameterizedDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ParameterizedDeclaration");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cProcessDeclarationParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cComponentDeclarationParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cFunctionDeclarationParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		
		//ParameterizedDeclaration:
		//	ProcessDeclaration
		//	| ComponentDeclaration
		//	//added
		//	| FunctionDeclaration;
		@Override public ParserRule getRule() { return rule; }
		
		//ProcessDeclaration | ComponentDeclaration //added
		//| FunctionDeclaration
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//ProcessDeclaration
		public RuleCall getProcessDeclarationParserRuleCall_0() { return cProcessDeclarationParserRuleCall_0; }
		
		//ComponentDeclaration
		public RuleCall getComponentDeclarationParserRuleCall_1() { return cComponentDeclarationParserRuleCall_1; }
		
		//FunctionDeclaration
		public RuleCall getFunctionDeclarationParserRuleCall_2() { return cFunctionDeclarationParserRuleCall_2; }
	}
	public class FunctionDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.FunctionDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cFunctionKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cLeftParenthesisKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Group cGroup_2_1 = (Group)cGroup_2.eContents().get(1);
		private final Assignment cParametersAssignment_2_1_0 = (Assignment)cGroup_2_1.eContents().get(0);
		private final RuleCall cParametersParametersDeclarationParserRuleCall_2_1_0_0 = (RuleCall)cParametersAssignment_2_1_0.eContents().get(0);
		private final Group cGroup_2_1_1 = (Group)cGroup_2_1.eContents().get(1);
		private final Keyword cCommaKeyword_2_1_1_0 = (Keyword)cGroup_2_1_1.eContents().get(0);
		private final Assignment cParametersAssignment_2_1_1_1 = (Assignment)cGroup_2_1_1.eContents().get(1);
		private final RuleCall cParametersParametersDeclarationParserRuleCall_2_1_1_1_0 = (RuleCall)cParametersAssignment_2_1_1_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
		private final Keyword cColonKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cTypeAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cTypeTypeParserRuleCall_4_0 = (RuleCall)cTypeAssignment_4.eContents().get(0);
		private final Keyword cIsKeyword_5 = (Keyword)cGroup.eContents().get(5);
		private final Group cGroup_6 = (Group)cGroup.eContents().get(6);
		private final Keyword cVarKeyword_6_0 = (Keyword)cGroup_6.eContents().get(0);
		private final Assignment cVariablesAssignment_6_1 = (Assignment)cGroup_6.eContents().get(1);
		private final RuleCall cVariablesVariablesDeclarationParserRuleCall_6_1_0 = (RuleCall)cVariablesAssignment_6_1.eContents().get(0);
		private final Group cGroup_6_2 = (Group)cGroup_6.eContents().get(2);
		private final Keyword cCommaKeyword_6_2_0 = (Keyword)cGroup_6_2.eContents().get(0);
		private final Assignment cVariablesAssignment_6_2_1 = (Assignment)cGroup_6_2.eContents().get(1);
		private final RuleCall cVariablesVariablesDeclarationParserRuleCall_6_2_1_0 = (RuleCall)cVariablesAssignment_6_2_1.eContents().get(0);
		private final Assignment cStatementAssignment_7 = (Assignment)cGroup.eContents().get(7);
		private final RuleCall cStatementStatementParserRuleCall_7_0 = (RuleCall)cStatementAssignment_7.eContents().get(0);
		
		//FunctionDeclaration:
		//	'function' name=ID ('(' (parameters+=ParametersDeclaration (',' parameters+=ParametersDeclaration)*)? ')')
		//	':' type=Type
		//	'is' ('var' variables+=VariablesDeclaration (',' variables+=VariablesDeclaration)*)?
		//	statement=Statement;
		@Override public ParserRule getRule() { return rule; }
		
		//'function' name=ID ('(' (parameters+=ParametersDeclaration (',' parameters+=ParametersDeclaration)*)? ')') ':' type=Type
		//'is' ('var' variables+=VariablesDeclaration (',' variables+=VariablesDeclaration)*)? statement=Statement
		public Group getGroup() { return cGroup; }
		
		//'function'
		public Keyword getFunctionKeyword_0() { return cFunctionKeyword_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
		
		//('(' (parameters+=ParametersDeclaration (',' parameters+=ParametersDeclaration)*)? ')')
		public Group getGroup_2() { return cGroup_2; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_2_0() { return cLeftParenthesisKeyword_2_0; }
		
		//(parameters+=ParametersDeclaration (',' parameters+=ParametersDeclaration)*)?
		public Group getGroup_2_1() { return cGroup_2_1; }
		
		//parameters+=ParametersDeclaration
		public Assignment getParametersAssignment_2_1_0() { return cParametersAssignment_2_1_0; }
		
		//ParametersDeclaration
		public RuleCall getParametersParametersDeclarationParserRuleCall_2_1_0_0() { return cParametersParametersDeclarationParserRuleCall_2_1_0_0; }
		
		//(',' parameters+=ParametersDeclaration)*
		public Group getGroup_2_1_1() { return cGroup_2_1_1; }
		
		//','
		public Keyword getCommaKeyword_2_1_1_0() { return cCommaKeyword_2_1_1_0; }
		
		//parameters+=ParametersDeclaration
		public Assignment getParametersAssignment_2_1_1_1() { return cParametersAssignment_2_1_1_1; }
		
		//ParametersDeclaration
		public RuleCall getParametersParametersDeclarationParserRuleCall_2_1_1_1_0() { return cParametersParametersDeclarationParserRuleCall_2_1_1_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_2_2() { return cRightParenthesisKeyword_2_2; }
		
		//':'
		public Keyword getColonKeyword_3() { return cColonKeyword_3; }
		
		//type=Type
		public Assignment getTypeAssignment_4() { return cTypeAssignment_4; }
		
		//Type
		public RuleCall getTypeTypeParserRuleCall_4_0() { return cTypeTypeParserRuleCall_4_0; }
		
		//'is'
		public Keyword getIsKeyword_5() { return cIsKeyword_5; }
		
		//('var' variables+=VariablesDeclaration (',' variables+=VariablesDeclaration)*)?
		public Group getGroup_6() { return cGroup_6; }
		
		//'var'
		public Keyword getVarKeyword_6_0() { return cVarKeyword_6_0; }
		
		//variables+=VariablesDeclaration
		public Assignment getVariablesAssignment_6_1() { return cVariablesAssignment_6_1; }
		
		//VariablesDeclaration
		public RuleCall getVariablesVariablesDeclarationParserRuleCall_6_1_0() { return cVariablesVariablesDeclarationParserRuleCall_6_1_0; }
		
		//(',' variables+=VariablesDeclaration)*
		public Group getGroup_6_2() { return cGroup_6_2; }
		
		//','
		public Keyword getCommaKeyword_6_2_0() { return cCommaKeyword_6_2_0; }
		
		//variables+=VariablesDeclaration
		public Assignment getVariablesAssignment_6_2_1() { return cVariablesAssignment_6_2_1; }
		
		//VariablesDeclaration
		public RuleCall getVariablesVariablesDeclarationParserRuleCall_6_2_1_0() { return cVariablesVariablesDeclarationParserRuleCall_6_2_1_0; }
		
		//statement=Statement
		public Assignment getStatementAssignment_7() { return cStatementAssignment_7; }
		
		//Statement
		public RuleCall getStatementStatementParserRuleCall_7_0() { return cStatementStatementParserRuleCall_7_0; }
	}
	public class TypeDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.TypeDeclaration");
		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 cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Keyword cIsKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cValueAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cValueTypeParserRuleCall_3_0 = (RuleCall)cValueAssignment_3.eContents().get(0);
		
		//TypeDeclaration:
		//	'type' name=ID 'is' value=Type;
		@Override public ParserRule getRule() { return rule; }
		
		//'type' name=ID 'is' value=Type
		public Group getGroup() { return cGroup; }
		
		//'type'
		public Keyword getTypeKeyword_0() { return cTypeKeyword_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
		
		//'is'
		public Keyword getIsKeyword_2() { return cIsKeyword_2; }
		
		//value=Type
		public Assignment getValueAssignment_3() { return cValueAssignment_3; }
		
		//Type
		public RuleCall getValueTypeParserRuleCall_3_0() { return cValueTypeParserRuleCall_3_0; }
	}
	public class ChannelDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ChannelDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cChannelKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Keyword cIsKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cValueAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cValueChannelTypeParserRuleCall_3_0 = (RuleCall)cValueAssignment_3.eContents().get(0);
		
		//ChannelDeclaration:
		//	'channel' name=ID 'is' value=ChannelType;
		@Override public ParserRule getRule() { return rule; }
		
		//'channel' name=ID 'is' value=ChannelType
		public Group getGroup() { return cGroup; }
		
		//'channel'
		public Keyword getChannelKeyword_0() { return cChannelKeyword_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
		
		//'is'
		public Keyword getIsKeyword_2() { return cIsKeyword_2; }
		
		//value=ChannelType
		public Assignment getValueAssignment_3() { return cValueAssignment_3; }
		
		//ChannelType
		public RuleCall getValueChannelTypeParserRuleCall_3_0() { return cValueChannelTypeParserRuleCall_3_0; }
	}
	public class ChannelTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ChannelType");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cChannelTypeAction_0 = (Action)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cArrayKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Assignment cSizeAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cSizeExpressionParserRuleCall_1_1_0 = (RuleCall)cSizeAssignment_1_1.eContents().get(0);
		private final Keyword cOfKeyword_1_2 = (Keyword)cGroup_1.eContents().get(2);
		private final Alternatives cAlternatives_2 = (Alternatives)cGroup.eContents().get(2);
		private final Group cGroup_2_0 = (Group)cAlternatives_2.eContents().get(0);
		private final Alternatives cAlternatives_2_0_0 = (Alternatives)cGroup_2_0.eContents().get(0);
		private final Group cGroup_2_0_0_0 = (Group)cAlternatives_2_0_0.eContents().get(0);
		private final Assignment cInAssignment_2_0_0_0_0 = (Assignment)cGroup_2_0_0_0.eContents().get(0);
		private final Keyword cInInKeyword_2_0_0_0_0_0 = (Keyword)cInAssignment_2_0_0_0_0.eContents().get(0);
		private final Assignment cOutAssignment_2_0_0_0_1 = (Assignment)cGroup_2_0_0_0.eContents().get(1);
		private final Keyword cOutOutKeyword_2_0_0_0_1_0 = (Keyword)cOutAssignment_2_0_0_0_1.eContents().get(0);
		private final Assignment cOutAssignment_2_0_0_1 = (Assignment)cAlternatives_2_0_0.eContents().get(1);
		private final Keyword cOutOutKeyword_2_0_0_1_0 = (Keyword)cOutAssignment_2_0_0_1.eContents().get(0);
		private final Alternatives cAlternatives_2_0_1 = (Alternatives)cGroup_2_0.eContents().get(1);
		private final Assignment cTypeAssignment_2_0_1_0 = (Assignment)cAlternatives_2_0_1.eContents().get(0);
		private final RuleCall cTypeTupleTypeParserRuleCall_2_0_1_0_0 = (RuleCall)cTypeAssignment_2_0_1_0.eContents().get(0);
		private final Keyword cNoneKeyword_2_0_1_1 = (Keyword)cAlternatives_2_0_1.eContents().get(1);
		private final Keyword cNoneKeyword_2_1 = (Keyword)cAlternatives_2.eContents().get(1);
		private final Keyword cSyncKeyword_2_2 = (Keyword)cAlternatives_2.eContents().get(2);
		
		//ChannelType:
		//	{ChannelType} ('array' size=Expression 'of')? ((in?='in' out?='out'? | out?='out')? (type=TupleType | 'none') | 'none'
		//	| 'sync');
		@Override public ParserRule getRule() { return rule; }
		
		//{ChannelType} ('array' size=Expression 'of')? ((in?='in' out?='out'? | out?='out')? (type=TupleType | 'none') | 'none' |
		//'sync')
		public Group getGroup() { return cGroup; }
		
		//{ChannelType}
		public Action getChannelTypeAction_0() { return cChannelTypeAction_0; }
		
		//('array' size=Expression 'of')?
		public Group getGroup_1() { return cGroup_1; }
		
		//'array'
		public Keyword getArrayKeyword_1_0() { return cArrayKeyword_1_0; }
		
		//size=Expression
		public Assignment getSizeAssignment_1_1() { return cSizeAssignment_1_1; }
		
		//Expression
		public RuleCall getSizeExpressionParserRuleCall_1_1_0() { return cSizeExpressionParserRuleCall_1_1_0; }
		
		//'of'
		public Keyword getOfKeyword_1_2() { return cOfKeyword_1_2; }
		
		//((in?='in' out?='out'? | out?='out')? (type=TupleType | 'none') | 'none' | 'sync')
		public Alternatives getAlternatives_2() { return cAlternatives_2; }
		
		//(in?='in' out?='out'? | out?='out')? (type=TupleType | 'none')
		public Group getGroup_2_0() { return cGroup_2_0; }
		
		//(in?='in' out?='out'? | out?='out')?
		public Alternatives getAlternatives_2_0_0() { return cAlternatives_2_0_0; }
		
		//in?='in' out?='out'?
		public Group getGroup_2_0_0_0() { return cGroup_2_0_0_0; }
		
		//in?='in'
		public Assignment getInAssignment_2_0_0_0_0() { return cInAssignment_2_0_0_0_0; }
		
		//'in'
		public Keyword getInInKeyword_2_0_0_0_0_0() { return cInInKeyword_2_0_0_0_0_0; }
		
		//out?='out'?
		public Assignment getOutAssignment_2_0_0_0_1() { return cOutAssignment_2_0_0_0_1; }
		
		//'out'
		public Keyword getOutOutKeyword_2_0_0_0_1_0() { return cOutOutKeyword_2_0_0_0_1_0; }
		
		//out?='out'
		public Assignment getOutAssignment_2_0_0_1() { return cOutAssignment_2_0_0_1; }
		
		//'out'
		public Keyword getOutOutKeyword_2_0_0_1_0() { return cOutOutKeyword_2_0_0_1_0; }
		
		//(type=TupleType | 'none')
		public Alternatives getAlternatives_2_0_1() { return cAlternatives_2_0_1; }
		
		//type=TupleType
		public Assignment getTypeAssignment_2_0_1_0() { return cTypeAssignment_2_0_1_0; }
		
		//TupleType
		public RuleCall getTypeTupleTypeParserRuleCall_2_0_1_0_0() { return cTypeTupleTypeParserRuleCall_2_0_1_0_0; }
		
		//'none'
		public Keyword getNoneKeyword_2_0_1_1() { return cNoneKeyword_2_0_1_1; }
		
		//'none'
		public Keyword getNoneKeyword_2_1() { return cNoneKeyword_2_1; }
		
		//'sync'
		public Keyword getSyncKeyword_2_2() { return cSyncKeyword_2_2; }
	}
	public class TypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Type");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cBasicTypeParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cRangeTypeParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cUnionTypeParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cRecordTypeParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		private final RuleCall cQueueTypeParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
		private final RuleCall cArrayTypeParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
		private final RuleCall cReferencedTypeParserRuleCall_6 = (RuleCall)cAlternatives.eContents().get(6);
		
		//Type:
		//	BasicType
		//	| RangeType
		//	| UnionType
		//	| RecordType
		//	| QueueType
		//	| ArrayType
		//	| ReferencedType
		//	//	| TupleType
		//;
		@Override public ParserRule getRule() { return rule; }
		
		//BasicType | RangeType | UnionType | RecordType | QueueType | ArrayType | ReferencedType
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//BasicType
		public RuleCall getBasicTypeParserRuleCall_0() { return cBasicTypeParserRuleCall_0; }
		
		//RangeType
		public RuleCall getRangeTypeParserRuleCall_1() { return cRangeTypeParserRuleCall_1; }
		
		//UnionType
		public RuleCall getUnionTypeParserRuleCall_2() { return cUnionTypeParserRuleCall_2; }
		
		//RecordType
		public RuleCall getRecordTypeParserRuleCall_3() { return cRecordTypeParserRuleCall_3; }
		
		//QueueType
		public RuleCall getQueueTypeParserRuleCall_4() { return cQueueTypeParserRuleCall_4; }
		
		//ArrayType
		public RuleCall getArrayTypeParserRuleCall_5() { return cArrayTypeParserRuleCall_5; }
		
		//ReferencedType
		public RuleCall getReferencedTypeParserRuleCall_6() { return cReferencedTypeParserRuleCall_6; }
	}
	public class TupleTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.TupleType");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cTypeParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cTupleTypeTypesAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cNumberSignKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cTypesAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cTypesTypeParserRuleCall_1_2_0 = (RuleCall)cTypesAssignment_1_2.eContents().get(0);
		
		//TupleType Type:
		//	Type ({TupleType.types+=current} '#' types+=Type)*
		@Override public ParserRule getRule() { return rule; }
		
		//Type ({TupleType.types+=current} '#' types+=Type)*
		public Group getGroup() { return cGroup; }
		
		//Type
		public RuleCall getTypeParserRuleCall_0() { return cTypeParserRuleCall_0; }
		
		//({TupleType.types+=current} '#' types+=Type)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{TupleType.types+=current}
		public Action getTupleTypeTypesAction_1_0() { return cTupleTypeTypesAction_1_0; }
		
		//'#'
		public Keyword getNumberSignKeyword_1_1() { return cNumberSignKeyword_1_1; }
		
		//types+=Type
		public Assignment getTypesAssignment_1_2() { return cTypesAssignment_1_2; }
		
		//Type
		public RuleCall getTypesTypeParserRuleCall_1_2_0() { return cTypesTypeParserRuleCall_1_2_0; }
	}
	public class BasicTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.BasicType");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Action cNaturalTypeAction_0_0 = (Action)cGroup_0.eContents().get(0);
		private final Keyword cNatKeyword_0_1 = (Keyword)cGroup_0.eContents().get(1);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Action cIntegerTypeAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cIntKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Group cGroup_2 = (Group)cAlternatives.eContents().get(2);
		private final Action cBooleanTypeAction_2_0 = (Action)cGroup_2.eContents().get(0);
		private final Keyword cBoolKeyword_2_1 = (Keyword)cGroup_2.eContents().get(1);
		
		//BasicType:
		//	{NaturalType} 'nat'
		//	| {IntegerType} 'int'
		//	| {BooleanType} 'bool';
		@Override public ParserRule getRule() { return rule; }
		
		//{NaturalType} 'nat' | {IntegerType} 'int' | {BooleanType} 'bool'
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//{NaturalType} 'nat'
		public Group getGroup_0() { return cGroup_0; }
		
		//{NaturalType}
		public Action getNaturalTypeAction_0_0() { return cNaturalTypeAction_0_0; }
		
		//'nat'
		public Keyword getNatKeyword_0_1() { return cNatKeyword_0_1; }
		
		//{IntegerType} 'int'
		public Group getGroup_1() { return cGroup_1; }
		
		//{IntegerType}
		public Action getIntegerTypeAction_1_0() { return cIntegerTypeAction_1_0; }
		
		//'int'
		public Keyword getIntKeyword_1_1() { return cIntKeyword_1_1; }
		
		//{BooleanType} 'bool'
		public Group getGroup_2() { return cGroup_2; }
		
		//{BooleanType}
		public Action getBooleanTypeAction_2_0() { return cBooleanTypeAction_2_0; }
		
		//'bool'
		public Keyword getBoolKeyword_2_1() { return cBoolKeyword_2_1; }
	}
	public class RangeTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.RangeType");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cMinimumAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cMinimumExpressionParserRuleCall_0_0 = (RuleCall)cMinimumAssignment_0.eContents().get(0);
		private final Keyword cFullStopFullStopKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cMaximumAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cMaximumExpressionParserRuleCall_2_0 = (RuleCall)cMaximumAssignment_2.eContents().get(0);
		
		//// changed
		//RangeType:
		//	minimum=Expression '..' maximum=Expression;
		@Override public ParserRule getRule() { return rule; }
		
		//minimum=Expression '..' maximum=Expression
		public Group getGroup() { return cGroup; }
		
		//minimum=Expression
		public Assignment getMinimumAssignment_0() { return cMinimumAssignment_0; }
		
		//Expression
		public RuleCall getMinimumExpressionParserRuleCall_0_0() { return cMinimumExpressionParserRuleCall_0_0; }
		
		//'..'
		public Keyword getFullStopFullStopKeyword_1() { return cFullStopFullStopKeyword_1; }
		
		//maximum=Expression
		public Assignment getMaximumAssignment_2() { return cMaximumAssignment_2; }
		
		//Expression
		public RuleCall getMaximumExpressionParserRuleCall_2_0() { return cMaximumExpressionParserRuleCall_2_0; }
	}
	public class UnionTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.UnionType");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cUnionKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cTagsAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cTagsUnionTagsParserRuleCall_1_0 = (RuleCall)cTagsAssignment_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cVerticalLineKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cTagsAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cTagsUnionTagsParserRuleCall_2_1_0 = (RuleCall)cTagsAssignment_2_1.eContents().get(0);
		private final Keyword cEndKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Keyword cUnionKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		//UnionType:
		//	'union' tags+=UnionTags ('|' tags+=UnionTags)* 'end' 'union'?;
		@Override public ParserRule getRule() { return rule; }
		
		//'union' tags+=UnionTags ('|' tags+=UnionTags)* 'end' 'union'?
		public Group getGroup() { return cGroup; }
		
		//'union'
		public Keyword getUnionKeyword_0() { return cUnionKeyword_0; }
		
		//tags+=UnionTags
		public Assignment getTagsAssignment_1() { return cTagsAssignment_1; }
		
		//UnionTags
		public RuleCall getTagsUnionTagsParserRuleCall_1_0() { return cTagsUnionTagsParserRuleCall_1_0; }
		
		//('|' tags+=UnionTags)*
		public Group getGroup_2() { return cGroup_2; }
		
		//'|'
		public Keyword getVerticalLineKeyword_2_0() { return cVerticalLineKeyword_2_0; }
		
		//tags+=UnionTags
		public Assignment getTagsAssignment_2_1() { return cTagsAssignment_2_1; }
		
		//UnionTags
		public RuleCall getTagsUnionTagsParserRuleCall_2_1_0() { return cTagsUnionTagsParserRuleCall_2_1_0; }
		
		//'end'
		public Keyword getEndKeyword_3() { return cEndKeyword_3; }
		
		//'union'?
		public Keyword getUnionKeyword_4() { return cUnionKeyword_4; }
	}
	public class UnionTagsElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.UnionTags");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cTagsAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cTagsUnionTagDeclarationParserRuleCall_0_0 = (RuleCall)cTagsAssignment_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 cTagsAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cTagsUnionTagDeclarationParserRuleCall_1_1_0 = (RuleCall)cTagsAssignment_1_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cOfKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cTypeAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cTypeTypeParserRuleCall_2_1_0 = (RuleCall)cTypeAssignment_2_1.eContents().get(0);
		
		//UnionTags:
		//	tags+=UnionTagDeclaration (',' tags+=UnionTagDeclaration)* ('of' type=Type)?;
		@Override public ParserRule getRule() { return rule; }
		
		//tags+=UnionTagDeclaration (',' tags+=UnionTagDeclaration)* ('of' type=Type)?
		public Group getGroup() { return cGroup; }
		
		//tags+=UnionTagDeclaration
		public Assignment getTagsAssignment_0() { return cTagsAssignment_0; }
		
		//UnionTagDeclaration
		public RuleCall getTagsUnionTagDeclarationParserRuleCall_0_0() { return cTagsUnionTagDeclarationParserRuleCall_0_0; }
		
		//(',' tags+=UnionTagDeclaration)*
		public Group getGroup_1() { return cGroup_1; }
		
		//','
		public Keyword getCommaKeyword_1_0() { return cCommaKeyword_1_0; }
		
		//tags+=UnionTagDeclaration
		public Assignment getTagsAssignment_1_1() { return cTagsAssignment_1_1; }
		
		//UnionTagDeclaration
		public RuleCall getTagsUnionTagDeclarationParserRuleCall_1_1_0() { return cTagsUnionTagDeclarationParserRuleCall_1_1_0; }
		
		//('of' type=Type)?
		public Group getGroup_2() { return cGroup_2; }
		
		//'of'
		public Keyword getOfKeyword_2_0() { return cOfKeyword_2_0; }
		
		//type=Type
		public Assignment getTypeAssignment_2_1() { return cTypeAssignment_2_1; }
		
		//Type
		public RuleCall getTypeTypeParserRuleCall_2_1_0() { return cTypeTypeParserRuleCall_2_1_0; }
	}
	public class UnionTagDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.UnionTagDeclaration");
		private final Assignment cNameAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_0 = (RuleCall)cNameAssignment.eContents().get(0);
		
		//UnionTagDeclaration:
		//	name=ID;
		@Override public ParserRule getRule() { return rule; }
		
		//name=ID
		public Assignment getNameAssignment() { return cNameAssignment; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_0() { return cNameIDTerminalRuleCall_0; }
	}
	public class RecordTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.RecordType");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cRecordKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cFieldsAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cFieldsRecordFieldsParserRuleCall_1_0 = (RuleCall)cFieldsAssignment_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 cFieldsAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cFieldsRecordFieldsParserRuleCall_2_1_0 = (RuleCall)cFieldsAssignment_2_1.eContents().get(0);
		private final Keyword cEndKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Keyword cRecordKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		//RecordType:
		//	'record' fields+=RecordFields (',' fields+=RecordFields)* 'end' 'record'?;
		@Override public ParserRule getRule() { return rule; }
		
		//'record' fields+=RecordFields (',' fields+=RecordFields)* 'end' 'record'?
		public Group getGroup() { return cGroup; }
		
		//'record'
		public Keyword getRecordKeyword_0() { return cRecordKeyword_0; }
		
		//fields+=RecordFields
		public Assignment getFieldsAssignment_1() { return cFieldsAssignment_1; }
		
		//RecordFields
		public RuleCall getFieldsRecordFieldsParserRuleCall_1_0() { return cFieldsRecordFieldsParserRuleCall_1_0; }
		
		//(',' fields+=RecordFields)*
		public Group getGroup_2() { return cGroup_2; }
		
		//','
		public Keyword getCommaKeyword_2_0() { return cCommaKeyword_2_0; }
		
		//fields+=RecordFields
		public Assignment getFieldsAssignment_2_1() { return cFieldsAssignment_2_1; }
		
		//RecordFields
		public RuleCall getFieldsRecordFieldsParserRuleCall_2_1_0() { return cFieldsRecordFieldsParserRuleCall_2_1_0; }
		
		//'end'
		public Keyword getEndKeyword_3() { return cEndKeyword_3; }
		
		//'record'?
		public Keyword getRecordKeyword_4() { return cRecordKeyword_4; }
	}
	public class RecordFieldsElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.RecordFields");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cFieldsAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cFieldsRecordFieldDeclarationParserRuleCall_0_0 = (RuleCall)cFieldsAssignment_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 cFieldsAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cFieldsRecordFieldDeclarationParserRuleCall_1_1_0 = (RuleCall)cFieldsAssignment_1_1.eContents().get(0);
		private final Keyword cColonKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cTypeAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cTypeTypeParserRuleCall_3_0 = (RuleCall)cTypeAssignment_3.eContents().get(0);
		
		//RecordFields:
		//	fields+=RecordFieldDeclaration (',' fields+=RecordFieldDeclaration)* ':' type=Type;
		@Override public ParserRule getRule() { return rule; }
		
		//fields+=RecordFieldDeclaration (',' fields+=RecordFieldDeclaration)* ':' type=Type
		public Group getGroup() { return cGroup; }
		
		//fields+=RecordFieldDeclaration
		public Assignment getFieldsAssignment_0() { return cFieldsAssignment_0; }
		
		//RecordFieldDeclaration
		public RuleCall getFieldsRecordFieldDeclarationParserRuleCall_0_0() { return cFieldsRecordFieldDeclarationParserRuleCall_0_0; }
		
		//(',' fields+=RecordFieldDeclaration)*
		public Group getGroup_1() { return cGroup_1; }
		
		//','
		public Keyword getCommaKeyword_1_0() { return cCommaKeyword_1_0; }
		
		//fields+=RecordFieldDeclaration
		public Assignment getFieldsAssignment_1_1() { return cFieldsAssignment_1_1; }
		
		//RecordFieldDeclaration
		public RuleCall getFieldsRecordFieldDeclarationParserRuleCall_1_1_0() { return cFieldsRecordFieldDeclarationParserRuleCall_1_1_0; }
		
		//':'
		public Keyword getColonKeyword_2() { return cColonKeyword_2; }
		
		//type=Type
		public Assignment getTypeAssignment_3() { return cTypeAssignment_3; }
		
		//Type
		public RuleCall getTypeTypeParserRuleCall_3_0() { return cTypeTypeParserRuleCall_3_0; }
	}
	public class RecordFieldDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.RecordFieldDeclaration");
		private final Assignment cNameAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_0 = (RuleCall)cNameAssignment.eContents().get(0);
		
		//RecordFieldDeclaration:
		//	name=ID;
		@Override public ParserRule getRule() { return rule; }
		
		//name=ID
		public Assignment getNameAssignment() { return cNameAssignment; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_0() { return cNameIDTerminalRuleCall_0; }
	}
	public class QueueTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.QueueType");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cQueueKeyword_0 = (Keyword)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);
		private final Keyword cOfKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cTypeAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cTypeTypeParserRuleCall_3_0 = (RuleCall)cTypeAssignment_3.eContents().get(0);
		
		//QueueType:
		//	'queue' size=Expression 'of' type=Type;
		@Override public ParserRule getRule() { return rule; }
		
		//'queue' size=Expression 'of' type=Type
		public Group getGroup() { return cGroup; }
		
		//'queue'
		public Keyword getQueueKeyword_0() { return cQueueKeyword_0; }
		
		//size=Expression
		public Assignment getSizeAssignment_1() { return cSizeAssignment_1; }
		
		//Expression
		public RuleCall getSizeExpressionParserRuleCall_1_0() { return cSizeExpressionParserRuleCall_1_0; }
		
		//'of'
		public Keyword getOfKeyword_2() { return cOfKeyword_2; }
		
		//type=Type
		public Assignment getTypeAssignment_3() { return cTypeAssignment_3; }
		
		//Type
		public RuleCall getTypeTypeParserRuleCall_3_0() { return cTypeTypeParserRuleCall_3_0; }
	}
	public class ArrayTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ArrayType");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cArrayKeyword_0 = (Keyword)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);
		private final Keyword cOfKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cTypeAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cTypeTypeParserRuleCall_3_0 = (RuleCall)cTypeAssignment_3.eContents().get(0);
		
		//ArrayType:
		//	'array' size=Expression 'of' type=Type;
		@Override public ParserRule getRule() { return rule; }
		
		//'array' size=Expression 'of' type=Type
		public Group getGroup() { return cGroup; }
		
		//'array'
		public Keyword getArrayKeyword_0() { return cArrayKeyword_0; }
		
		//size=Expression
		public Assignment getSizeAssignment_1() { return cSizeAssignment_1; }
		
		//Expression
		public RuleCall getSizeExpressionParserRuleCall_1_0() { return cSizeExpressionParserRuleCall_1_0; }
		
		//'of'
		public Keyword getOfKeyword_2() { return cOfKeyword_2; }
		
		//type=Type
		public Assignment getTypeAssignment_3() { return cTypeAssignment_3; }
		
		//Type
		public RuleCall getTypeTypeParserRuleCall_3_0() { return cTypeTypeParserRuleCall_3_0; }
	}
	public class ReferencedTypeElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ReferencedType");
		private final Assignment cTypeAssignment = (Assignment)rule.eContents().get(1);
		private final CrossReference cTypeTypeDeclarationUseCrossReference_0 = (CrossReference)cTypeAssignment.eContents().get(0);
		private final RuleCall cTypeTypeDeclarationUseIDTerminalRuleCall_0_1 = (RuleCall)cTypeTypeDeclarationUseCrossReference_0.eContents().get(1);
		
		//ReferencedType:
		//	type=[TypeDeclarationUse];
		@Override public ParserRule getRule() { return rule; }
		
		//type=[TypeDeclarationUse]
		public Assignment getTypeAssignment() { return cTypeAssignment; }
		
		//[TypeDeclarationUse]
		public CrossReference getTypeTypeDeclarationUseCrossReference_0() { return cTypeTypeDeclarationUseCrossReference_0; }
		
		//ID
		public RuleCall getTypeTypeDeclarationUseIDTerminalRuleCall_0_1() { return cTypeTypeDeclarationUseIDTerminalRuleCall_0_1; }
	}
	public class ConstantDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ConstantDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cConstKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Keyword cColonKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cTypeAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cTypeTypeParserRuleCall_3_0 = (RuleCall)cTypeAssignment_3.eContents().get(0);
		private final Keyword cIsKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Assignment cValueAssignment_5 = (Assignment)cGroup.eContents().get(5);
		private final RuleCall cValueExpressionParserRuleCall_5_0 = (RuleCall)cValueAssignment_5.eContents().get(0);
		
		/// * ChannelDeclaration:
		//	'channel' name=ID 'is' channel=ChannelType
		//; * / ConstantDeclaration:
		//	'const' name=ID ':' type=Type 'is' value=Expression;
		@Override public ParserRule getRule() { return rule; }
		
		//'const' name=ID ':' type=Type 'is' value=Expression
		public Group getGroup() { return cGroup; }
		
		//'const'
		public Keyword getConstKeyword_0() { return cConstKeyword_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
		
		//':'
		public Keyword getColonKeyword_2() { return cColonKeyword_2; }
		
		//type=Type
		public Assignment getTypeAssignment_3() { return cTypeAssignment_3; }
		
		//Type
		public RuleCall getTypeTypeParserRuleCall_3_0() { return cTypeTypeParserRuleCall_3_0; }
		
		//'is'
		public Keyword getIsKeyword_4() { return cIsKeyword_4; }
		
		//value=Expression
		public Assignment getValueAssignment_5() { return cValueAssignment_5; }
		
		//Expression
		public RuleCall getValueExpressionParserRuleCall_5_0() { return cValueExpressionParserRuleCall_5_0; }
	}
	public class ProcessDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ProcessDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cProcessKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cLeftSquareBracketKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cPortsAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cPortsPortsDeclarationParserRuleCall_2_1_0 = (RuleCall)cPortsAssignment_2_1.eContents().get(0);
		private final Group cGroup_2_2 = (Group)cGroup_2.eContents().get(2);
		private final Keyword cCommaKeyword_2_2_0 = (Keyword)cGroup_2_2.eContents().get(0);
		private final Assignment cPortsAssignment_2_2_1 = (Assignment)cGroup_2_2.eContents().get(1);
		private final RuleCall cPortsPortsDeclarationParserRuleCall_2_2_1_0 = (RuleCall)cPortsAssignment_2_2_1.eContents().get(0);
		private final Keyword cRightSquareBracketKeyword_2_3 = (Keyword)cGroup_2.eContents().get(3);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Keyword cLeftParenthesisKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final Assignment cParametersAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
		private final RuleCall cParametersParametersDeclarationParserRuleCall_3_1_0 = (RuleCall)cParametersAssignment_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 cParametersAssignment_3_2_1 = (Assignment)cGroup_3_2.eContents().get(1);
		private final RuleCall cParametersParametersDeclarationParserRuleCall_3_2_1_0 = (RuleCall)cParametersAssignment_3_2_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_3_3 = (Keyword)cGroup_3.eContents().get(3);
		private final Keyword cIsKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
		private final Keyword cPortKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
		private final Assignment cLocalPortsAssignment_5_1 = (Assignment)cGroup_5.eContents().get(1);
		private final RuleCall cLocalPortsPortsDeclarationParserRuleCall_5_1_0 = (RuleCall)cLocalPortsAssignment_5_1.eContents().get(0);
		private final Group cGroup_5_2 = (Group)cGroup_5.eContents().get(2);
		private final Keyword cCommaKeyword_5_2_0 = (Keyword)cGroup_5_2.eContents().get(0);
		private final Assignment cLocalPortsAssignment_5_2_1 = (Assignment)cGroup_5_2.eContents().get(1);
		private final RuleCall cLocalPortsPortsDeclarationParserRuleCall_5_2_1_0 = (RuleCall)cLocalPortsAssignment_5_2_1.eContents().get(0);
		private final Group cGroup_6 = (Group)cGroup.eContents().get(6);
		private final Keyword cPriorityKeyword_6_0 = (Keyword)cGroup_6.eContents().get(0);
		private final Assignment cPrioritiesAssignment_6_1 = (Assignment)cGroup_6.eContents().get(1);
		private final RuleCall cPrioritiesPriorityDeclarationParserRuleCall_6_1_0 = (RuleCall)cPrioritiesAssignment_6_1.eContents().get(0);
		private final Group cGroup_6_2 = (Group)cGroup_6.eContents().get(2);
		private final Keyword cCommaKeyword_6_2_0 = (Keyword)cGroup_6_2.eContents().get(0);
		private final Assignment cPrioritiesAssignment_6_2_1 = (Assignment)cGroup_6_2.eContents().get(1);
		private final RuleCall cPrioritiesPriorityDeclarationParserRuleCall_6_2_1_0 = (RuleCall)cPrioritiesAssignment_6_2_1.eContents().get(0);
		private final Keyword cStatesKeyword_7 = (Keyword)cGroup.eContents().get(7);
		private final Assignment cStatesAssignment_8 = (Assignment)cGroup.eContents().get(8);
		private final RuleCall cStatesStateDeclarationParserRuleCall_8_0 = (RuleCall)cStatesAssignment_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 cStatesAssignment_9_1 = (Assignment)cGroup_9.eContents().get(1);
		private final RuleCall cStatesStateDeclarationParserRuleCall_9_1_0 = (RuleCall)cStatesAssignment_9_1.eContents().get(0);
		private final Group cGroup_10 = (Group)cGroup.eContents().get(10);
		private final Keyword cVarKeyword_10_0 = (Keyword)cGroup_10.eContents().get(0);
		private final Assignment cVariablesAssignment_10_1 = (Assignment)cGroup_10.eContents().get(1);
		private final RuleCall cVariablesVariablesDeclarationParserRuleCall_10_1_0 = (RuleCall)cVariablesAssignment_10_1.eContents().get(0);
		private final Group cGroup_10_2 = (Group)cGroup_10.eContents().get(2);
		private final Keyword cCommaKeyword_10_2_0 = (Keyword)cGroup_10_2.eContents().get(0);
		private final Assignment cVariablesAssignment_10_2_1 = (Assignment)cGroup_10_2.eContents().get(1);
		private final RuleCall cVariablesVariablesDeclarationParserRuleCall_10_2_1_0 = (RuleCall)cVariablesAssignment_10_2_1.eContents().get(0);
		private final Group cGroup_11 = (Group)cGroup.eContents().get(11);
		private final Keyword cInitKeyword_11_0 = (Keyword)cGroup_11.eContents().get(0);
		private final Assignment cPreludeAssignment_11_1 = (Assignment)cGroup_11.eContents().get(1);
		private final RuleCall cPreludeStatementSequenceParserRuleCall_11_1_0 = (RuleCall)cPreludeAssignment_11_1.eContents().get(0);
		private final Assignment cTransitionsAssignment_12 = (Assignment)cGroup.eContents().get(12);
		private final RuleCall cTransitionsTransitionParserRuleCall_12_0 = (RuleCall)cTransitionsAssignment_12.eContents().get(0);
		
		//ProcessDeclaration:
		//	'process' name=ID ('[' ports+=PortsDeclaration (',' ports+=PortsDeclaration)* ']')? ('('
		//	parameters+=ParametersDeclaration (',' parameters+=ParametersDeclaration)* ')')?
		//	'is' ('port' localPorts+=PortsDeclaration (',' localPorts+=PortsDeclaration)*)? ('priority'
		//	priorities+=PriorityDeclaration (',' priorities+=PriorityDeclaration)*)?
		//	'states' states+=StateDeclaration (',' states+=StateDeclaration)* ('var' variables+=VariablesDeclaration (','
		//	variables+=VariablesDeclaration)*)? ('init' prelude=StatementSequence)?
		//	transitions+=Transition+;
		@Override public ParserRule getRule() { return rule; }
		
		//'process' name=ID ('[' ports+=PortsDeclaration (',' ports+=PortsDeclaration)* ']')? ('('
		//parameters+=ParametersDeclaration (',' parameters+=ParametersDeclaration)* ')')? 'is' ('port'
		//localPorts+=PortsDeclaration (',' localPorts+=PortsDeclaration)*)? ('priority' priorities+=PriorityDeclaration (','
		//priorities+=PriorityDeclaration)*)? 'states' states+=StateDeclaration (',' states+=StateDeclaration)* ('var'
		//variables+=VariablesDeclaration (',' variables+=VariablesDeclaration)*)? ('init' prelude=StatementSequence)?
		//transitions+=Transition+
		public Group getGroup() { return cGroup; }
		
		//'process'
		public Keyword getProcessKeyword_0() { return cProcessKeyword_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
		
		//('[' ports+=PortsDeclaration (',' ports+=PortsDeclaration)* ']')?
		public Group getGroup_2() { return cGroup_2; }
		
		//'['
		public Keyword getLeftSquareBracketKeyword_2_0() { return cLeftSquareBracketKeyword_2_0; }
		
		//ports+=PortsDeclaration
		public Assignment getPortsAssignment_2_1() { return cPortsAssignment_2_1; }
		
		//PortsDeclaration
		public RuleCall getPortsPortsDeclarationParserRuleCall_2_1_0() { return cPortsPortsDeclarationParserRuleCall_2_1_0; }
		
		//(',' ports+=PortsDeclaration)*
		public Group getGroup_2_2() { return cGroup_2_2; }
		
		//','
		public Keyword getCommaKeyword_2_2_0() { return cCommaKeyword_2_2_0; }
		
		//ports+=PortsDeclaration
		public Assignment getPortsAssignment_2_2_1() { return cPortsAssignment_2_2_1; }
		
		//PortsDeclaration
		public RuleCall getPortsPortsDeclarationParserRuleCall_2_2_1_0() { return cPortsPortsDeclarationParserRuleCall_2_2_1_0; }
		
		//']'
		public Keyword getRightSquareBracketKeyword_2_3() { return cRightSquareBracketKeyword_2_3; }
		
		//('(' parameters+=ParametersDeclaration (',' parameters+=ParametersDeclaration)* ')')?
		public Group getGroup_3() { return cGroup_3; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_3_0() { return cLeftParenthesisKeyword_3_0; }
		
		//parameters+=ParametersDeclaration
		public Assignment getParametersAssignment_3_1() { return cParametersAssignment_3_1; }
		
		//ParametersDeclaration
		public RuleCall getParametersParametersDeclarationParserRuleCall_3_1_0() { return cParametersParametersDeclarationParserRuleCall_3_1_0; }
		
		//(',' parameters+=ParametersDeclaration)*
		public Group getGroup_3_2() { return cGroup_3_2; }
		
		//','
		public Keyword getCommaKeyword_3_2_0() { return cCommaKeyword_3_2_0; }
		
		//parameters+=ParametersDeclaration
		public Assignment getParametersAssignment_3_2_1() { return cParametersAssignment_3_2_1; }
		
		//ParametersDeclaration
		public RuleCall getParametersParametersDeclarationParserRuleCall_3_2_1_0() { return cParametersParametersDeclarationParserRuleCall_3_2_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_3_3() { return cRightParenthesisKeyword_3_3; }
		
		//'is'
		public Keyword getIsKeyword_4() { return cIsKeyword_4; }
		
		//('port' localPorts+=PortsDeclaration (',' localPorts+=PortsDeclaration)*)?
		public Group getGroup_5() { return cGroup_5; }
		
		//'port'
		public Keyword getPortKeyword_5_0() { return cPortKeyword_5_0; }
		
		//localPorts+=PortsDeclaration
		public Assignment getLocalPortsAssignment_5_1() { return cLocalPortsAssignment_5_1; }
		
		//PortsDeclaration
		public RuleCall getLocalPortsPortsDeclarationParserRuleCall_5_1_0() { return cLocalPortsPortsDeclarationParserRuleCall_5_1_0; }
		
		//(',' localPorts+=PortsDeclaration)*
		public Group getGroup_5_2() { return cGroup_5_2; }
		
		//','
		public Keyword getCommaKeyword_5_2_0() { return cCommaKeyword_5_2_0; }
		
		//localPorts+=PortsDeclaration
		public Assignment getLocalPortsAssignment_5_2_1() { return cLocalPortsAssignment_5_2_1; }
		
		//PortsDeclaration
		public RuleCall getLocalPortsPortsDeclarationParserRuleCall_5_2_1_0() { return cLocalPortsPortsDeclarationParserRuleCall_5_2_1_0; }
		
		//('priority' priorities+=PriorityDeclaration (',' priorities+=PriorityDeclaration)*)?
		public Group getGroup_6() { return cGroup_6; }
		
		//'priority'
		public Keyword getPriorityKeyword_6_0() { return cPriorityKeyword_6_0; }
		
		//priorities+=PriorityDeclaration
		public Assignment getPrioritiesAssignment_6_1() { return cPrioritiesAssignment_6_1; }
		
		//PriorityDeclaration
		public RuleCall getPrioritiesPriorityDeclarationParserRuleCall_6_1_0() { return cPrioritiesPriorityDeclarationParserRuleCall_6_1_0; }
		
		//(',' priorities+=PriorityDeclaration)*
		public Group getGroup_6_2() { return cGroup_6_2; }
		
		//','
		public Keyword getCommaKeyword_6_2_0() { return cCommaKeyword_6_2_0; }
		
		//priorities+=PriorityDeclaration
		public Assignment getPrioritiesAssignment_6_2_1() { return cPrioritiesAssignment_6_2_1; }
		
		//PriorityDeclaration
		public RuleCall getPrioritiesPriorityDeclarationParserRuleCall_6_2_1_0() { return cPrioritiesPriorityDeclarationParserRuleCall_6_2_1_0; }
		
		//'states'
		public Keyword getStatesKeyword_7() { return cStatesKeyword_7; }
		
		//states+=StateDeclaration
		public Assignment getStatesAssignment_8() { return cStatesAssignment_8; }
		
		//StateDeclaration
		public RuleCall getStatesStateDeclarationParserRuleCall_8_0() { return cStatesStateDeclarationParserRuleCall_8_0; }
		
		//(',' states+=StateDeclaration)*
		public Group getGroup_9() { return cGroup_9; }
		
		//','
		public Keyword getCommaKeyword_9_0() { return cCommaKeyword_9_0; }
		
		//states+=StateDeclaration
		public Assignment getStatesAssignment_9_1() { return cStatesAssignment_9_1; }
		
		//StateDeclaration
		public RuleCall getStatesStateDeclarationParserRuleCall_9_1_0() { return cStatesStateDeclarationParserRuleCall_9_1_0; }
		
		//('var' variables+=VariablesDeclaration (',' variables+=VariablesDeclaration)*)?
		public Group getGroup_10() { return cGroup_10; }
		
		//'var'
		public Keyword getVarKeyword_10_0() { return cVarKeyword_10_0; }
		
		//variables+=VariablesDeclaration
		public Assignment getVariablesAssignment_10_1() { return cVariablesAssignment_10_1; }
		
		//VariablesDeclaration
		public RuleCall getVariablesVariablesDeclarationParserRuleCall_10_1_0() { return cVariablesVariablesDeclarationParserRuleCall_10_1_0; }
		
		//(',' variables+=VariablesDeclaration)*
		public Group getGroup_10_2() { return cGroup_10_2; }
		
		//','
		public Keyword getCommaKeyword_10_2_0() { return cCommaKeyword_10_2_0; }
		
		//variables+=VariablesDeclaration
		public Assignment getVariablesAssignment_10_2_1() { return cVariablesAssignment_10_2_1; }
		
		//VariablesDeclaration
		public RuleCall getVariablesVariablesDeclarationParserRuleCall_10_2_1_0() { return cVariablesVariablesDeclarationParserRuleCall_10_2_1_0; }
		
		//('init' prelude=StatementSequence)?
		public Group getGroup_11() { return cGroup_11; }
		
		//'init'
		public Keyword getInitKeyword_11_0() { return cInitKeyword_11_0; }
		
		//prelude=StatementSequence
		public Assignment getPreludeAssignment_11_1() { return cPreludeAssignment_11_1; }
		
		//StatementSequence
		public RuleCall getPreludeStatementSequenceParserRuleCall_11_1_0() { return cPreludeStatementSequenceParserRuleCall_11_1_0; }
		
		//transitions+=Transition+
		public Assignment getTransitionsAssignment_12() { return cTransitionsAssignment_12; }
		
		//Transition
		public RuleCall getTransitionsTransitionParserRuleCall_12_0() { return cTransitionsTransitionParserRuleCall_12_0; }
	}
	public class StateDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.StateDeclaration");
		private final Assignment cNameAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_0 = (RuleCall)cNameAssignment.eContents().get(0);
		
		////GenericDeclaration:
		//// 	('type' GenericTypeDeclaration)
		////	| ('const' GenericConstantDeclaration)
		////	| (('constr0' | 'constr1') GenericUnionTagDeclaration)
		////	| ('field' GenericRecordFieldDeclaration)
		////;
		////
		////GenericTypeDeclaration:
		////	name=ID
		////;
		////
		////GenericConstantDeclaration:
		////	name=ID
		////;
		////
		////GenericUnionTagDeclaration:
		////	name=ID
		////;
		////
		////GenericRecordFieldDeclaration:
		////	name=ID
		////;
		//StateDeclaration:
		//	name=ID;
		@Override public ParserRule getRule() { return rule; }
		
		//name=ID
		public Assignment getNameAssignment() { return cNameAssignment; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_0() { return cNameIDTerminalRuleCall_0; }
	}
	public class TransitionSourceElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.TransitionSource");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cFromKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cOriginAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final CrossReference cOriginStateDeclarationCrossReference_1_0 = (CrossReference)cOriginAssignment_1.eContents().get(0);
		private final RuleCall cOriginStateDeclarationIDTerminalRuleCall_1_0_1 = (RuleCall)cOriginStateDeclarationCrossReference_1_0.eContents().get(1);
		
		//TransitionSource:
		//	'from' origin=[StateDeclaration];
		@Override public ParserRule getRule() { return rule; }
		
		//'from' origin=[StateDeclaration]
		public Group getGroup() { return cGroup; }
		
		//'from'
		public Keyword getFromKeyword_0() { return cFromKeyword_0; }
		
		//origin=[StateDeclaration]
		public Assignment getOriginAssignment_1() { return cOriginAssignment_1; }
		
		//[StateDeclaration]
		public CrossReference getOriginStateDeclarationCrossReference_1_0() { return cOriginStateDeclarationCrossReference_1_0; }
		
		//ID
		public RuleCall getOriginStateDeclarationIDTerminalRuleCall_1_0_1() { return cOriginStateDeclarationIDTerminalRuleCall_1_0_1; }
	}
	public class TransitionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Transition");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cSourceAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cSourceTransitionSourceParserRuleCall_0_0 = (RuleCall)cSourceAssignment_0.eContents().get(0);
		private final Assignment cActionAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cActionStatementSequenceParserRuleCall_1_0 = (RuleCall)cActionAssignment_1.eContents().get(0);
		
		//Transition:
		//	source=TransitionSource action=StatementSequence;
		@Override public ParserRule getRule() { return rule; }
		
		//source=TransitionSource action=StatementSequence
		public Group getGroup() { return cGroup; }
		
		//source=TransitionSource
		public Assignment getSourceAssignment_0() { return cSourceAssignment_0; }
		
		//TransitionSource
		public RuleCall getSourceTransitionSourceParserRuleCall_0_0() { return cSourceTransitionSourceParserRuleCall_0_0; }
		
		//action=StatementSequence
		public Assignment getActionAssignment_1() { return cActionAssignment_1; }
		
		//StatementSequence
		public RuleCall getActionStatementSequenceParserRuleCall_1_0() { return cActionStatementSequenceParserRuleCall_1_0; }
	}
	public class ComponentDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ComponentDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cComponentKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cLeftSquareBracketKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cPortsAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cPortsPortsDeclarationParserRuleCall_2_1_0 = (RuleCall)cPortsAssignment_2_1.eContents().get(0);
		private final Group cGroup_2_2 = (Group)cGroup_2.eContents().get(2);
		private final Keyword cCommaKeyword_2_2_0 = (Keyword)cGroup_2_2.eContents().get(0);
		private final Assignment cPortsAssignment_2_2_1 = (Assignment)cGroup_2_2.eContents().get(1);
		private final RuleCall cPortsPortsDeclarationParserRuleCall_2_2_1_0 = (RuleCall)cPortsAssignment_2_2_1.eContents().get(0);
		private final Keyword cRightSquareBracketKeyword_2_3 = (Keyword)cGroup_2.eContents().get(3);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Keyword cLeftParenthesisKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final Assignment cParametersAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
		private final RuleCall cParametersParametersDeclarationParserRuleCall_3_1_0 = (RuleCall)cParametersAssignment_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 cParametersAssignment_3_2_1 = (Assignment)cGroup_3_2.eContents().get(1);
		private final RuleCall cParametersParametersDeclarationParserRuleCall_3_2_1_0 = (RuleCall)cParametersAssignment_3_2_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_3_3 = (Keyword)cGroup_3.eContents().get(3);
		private final Keyword cIsKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
		private final Keyword cVarKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
		private final Assignment cVariablesAssignment_5_1 = (Assignment)cGroup_5.eContents().get(1);
		private final RuleCall cVariablesVariablesDeclarationParserRuleCall_5_1_0 = (RuleCall)cVariablesAssignment_5_1.eContents().get(0);
		private final Group cGroup_5_2 = (Group)cGroup_5.eContents().get(2);
		private final Keyword cCommaKeyword_5_2_0 = (Keyword)cGroup_5_2.eContents().get(0);
		private final Assignment cVariablesAssignment_5_2_1 = (Assignment)cGroup_5_2.eContents().get(1);
		private final RuleCall cVariablesVariablesDeclarationParserRuleCall_5_2_1_0 = (RuleCall)cVariablesAssignment_5_2_1.eContents().get(0);
		private final Group cGroup_6 = (Group)cGroup.eContents().get(6);
		private final Keyword cPortKeyword_6_0 = (Keyword)cGroup_6.eContents().get(0);
		private final Assignment cLocalPortsAssignment_6_1 = (Assignment)cGroup_6.eContents().get(1);
		private final RuleCall cLocalPortsLocalPortsDeclarationParserRuleCall_6_1_0 = (RuleCall)cLocalPortsAssignment_6_1.eContents().get(0);
		private final Group cGroup_6_2 = (Group)cGroup_6.eContents().get(2);
		private final Keyword cCommaKeyword_6_2_0 = (Keyword)cGroup_6_2.eContents().get(0);
		private final Assignment cLocalPortsAssignment_6_2_1 = (Assignment)cGroup_6_2.eContents().get(1);
		private final RuleCall cLocalPortsLocalPortsDeclarationParserRuleCall_6_2_1_0 = (RuleCall)cLocalPortsAssignment_6_2_1.eContents().get(0);
		private final Group cGroup_7 = (Group)cGroup.eContents().get(7);
		private final Keyword cPriorityKeyword_7_0 = (Keyword)cGroup_7.eContents().get(0);
		private final Assignment cPrioritiesAssignment_7_1 = (Assignment)cGroup_7.eContents().get(1);
		private final RuleCall cPrioritiesPriorityDeclarationParserRuleCall_7_1_0 = (RuleCall)cPrioritiesAssignment_7_1.eContents().get(0);
		private final Group cGroup_7_2 = (Group)cGroup_7.eContents().get(2);
		private final Keyword cCommaKeyword_7_2_0 = (Keyword)cGroup_7_2.eContents().get(0);
		private final Assignment cPrioritiesAssignment_7_2_1 = (Assignment)cGroup_7_2.eContents().get(1);
		private final RuleCall cPrioritiesPriorityDeclarationParserRuleCall_7_2_1_0 = (RuleCall)cPrioritiesAssignment_7_2_1.eContents().get(0);
		private final Group cGroup_8 = (Group)cGroup.eContents().get(8);
		private final Keyword cInitKeyword_8_0 = (Keyword)cGroup_8.eContents().get(0);
		private final Assignment cPreludeAssignment_8_1 = (Assignment)cGroup_8.eContents().get(1);
		private final RuleCall cPreludeStatementSequenceParserRuleCall_8_1_0 = (RuleCall)cPreludeAssignment_8_1.eContents().get(0);
		private final Assignment cBodyAssignment_9 = (Assignment)cGroup.eContents().get(9);
		private final RuleCall cBodyCompositionParserRuleCall_9_0 = (RuleCall)cBodyAssignment_9.eContents().get(0);
		
		//ComponentDeclaration:
		//	'component' name=ID ('[' ports+=PortsDeclaration (',' ports+=PortsDeclaration)* ']')? ('('
		//	parameters+=ParametersDeclaration (',' parameters+=ParametersDeclaration)* ')')?
		//	'is' ('var' variables+=VariablesDeclaration (',' variables+=VariablesDeclaration)*)? ('port'
		//	localPorts+=LocalPortsDeclaration (',' localPorts+=LocalPortsDeclaration)*)? ('priority'
		//	priorities+=PriorityDeclaration (',' priorities+=PriorityDeclaration)*)? ('init' prelude=StatementSequence)?
		//	body=Composition;
		@Override public ParserRule getRule() { return rule; }
		
		//'component' name=ID ('[' ports+=PortsDeclaration (',' ports+=PortsDeclaration)* ']')? ('('
		//parameters+=ParametersDeclaration (',' parameters+=ParametersDeclaration)* ')')? 'is' ('var'
		//variables+=VariablesDeclaration (',' variables+=VariablesDeclaration)*)? ('port' localPorts+=LocalPortsDeclaration (','
		//localPorts+=LocalPortsDeclaration)*)? ('priority' priorities+=PriorityDeclaration (','
		//priorities+=PriorityDeclaration)*)? ('init' prelude=StatementSequence)? body=Composition
		public Group getGroup() { return cGroup; }
		
		//'component'
		public Keyword getComponentKeyword_0() { return cComponentKeyword_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
		
		//('[' ports+=PortsDeclaration (',' ports+=PortsDeclaration)* ']')?
		public Group getGroup_2() { return cGroup_2; }
		
		//'['
		public Keyword getLeftSquareBracketKeyword_2_0() { return cLeftSquareBracketKeyword_2_0; }
		
		//ports+=PortsDeclaration
		public Assignment getPortsAssignment_2_1() { return cPortsAssignment_2_1; }
		
		//PortsDeclaration
		public RuleCall getPortsPortsDeclarationParserRuleCall_2_1_0() { return cPortsPortsDeclarationParserRuleCall_2_1_0; }
		
		//(',' ports+=PortsDeclaration)*
		public Group getGroup_2_2() { return cGroup_2_2; }
		
		//','
		public Keyword getCommaKeyword_2_2_0() { return cCommaKeyword_2_2_0; }
		
		//ports+=PortsDeclaration
		public Assignment getPortsAssignment_2_2_1() { return cPortsAssignment_2_2_1; }
		
		//PortsDeclaration
		public RuleCall getPortsPortsDeclarationParserRuleCall_2_2_1_0() { return cPortsPortsDeclarationParserRuleCall_2_2_1_0; }
		
		//']'
		public Keyword getRightSquareBracketKeyword_2_3() { return cRightSquareBracketKeyword_2_3; }
		
		//('(' parameters+=ParametersDeclaration (',' parameters+=ParametersDeclaration)* ')')?
		public Group getGroup_3() { return cGroup_3; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_3_0() { return cLeftParenthesisKeyword_3_0; }
		
		//parameters+=ParametersDeclaration
		public Assignment getParametersAssignment_3_1() { return cParametersAssignment_3_1; }
		
		//ParametersDeclaration
		public RuleCall getParametersParametersDeclarationParserRuleCall_3_1_0() { return cParametersParametersDeclarationParserRuleCall_3_1_0; }
		
		//(',' parameters+=ParametersDeclaration)*
		public Group getGroup_3_2() { return cGroup_3_2; }
		
		//','
		public Keyword getCommaKeyword_3_2_0() { return cCommaKeyword_3_2_0; }
		
		//parameters+=ParametersDeclaration
		public Assignment getParametersAssignment_3_2_1() { return cParametersAssignment_3_2_1; }
		
		//ParametersDeclaration
		public RuleCall getParametersParametersDeclarationParserRuleCall_3_2_1_0() { return cParametersParametersDeclarationParserRuleCall_3_2_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_3_3() { return cRightParenthesisKeyword_3_3; }
		
		//'is'
		public Keyword getIsKeyword_4() { return cIsKeyword_4; }
		
		//('var' variables+=VariablesDeclaration (',' variables+=VariablesDeclaration)*)?
		public Group getGroup_5() { return cGroup_5; }
		
		//'var'
		public Keyword getVarKeyword_5_0() { return cVarKeyword_5_0; }
		
		//variables+=VariablesDeclaration
		public Assignment getVariablesAssignment_5_1() { return cVariablesAssignment_5_1; }
		
		//VariablesDeclaration
		public RuleCall getVariablesVariablesDeclarationParserRuleCall_5_1_0() { return cVariablesVariablesDeclarationParserRuleCall_5_1_0; }
		
		//(',' variables+=VariablesDeclaration)*
		public Group getGroup_5_2() { return cGroup_5_2; }
		
		//','
		public Keyword getCommaKeyword_5_2_0() { return cCommaKeyword_5_2_0; }
		
		//variables+=VariablesDeclaration
		public Assignment getVariablesAssignment_5_2_1() { return cVariablesAssignment_5_2_1; }
		
		//VariablesDeclaration
		public RuleCall getVariablesVariablesDeclarationParserRuleCall_5_2_1_0() { return cVariablesVariablesDeclarationParserRuleCall_5_2_1_0; }
		
		//('port' localPorts+=LocalPortsDeclaration (',' localPorts+=LocalPortsDeclaration)*)?
		public Group getGroup_6() { return cGroup_6; }
		
		//'port'
		public Keyword getPortKeyword_6_0() { return cPortKeyword_6_0; }
		
		//localPorts+=LocalPortsDeclaration
		public Assignment getLocalPortsAssignment_6_1() { return cLocalPortsAssignment_6_1; }
		
		//LocalPortsDeclaration
		public RuleCall getLocalPortsLocalPortsDeclarationParserRuleCall_6_1_0() { return cLocalPortsLocalPortsDeclarationParserRuleCall_6_1_0; }
		
		//(',' localPorts+=LocalPortsDeclaration)*
		public Group getGroup_6_2() { return cGroup_6_2; }
		
		//','
		public Keyword getCommaKeyword_6_2_0() { return cCommaKeyword_6_2_0; }
		
		//localPorts+=LocalPortsDeclaration
		public Assignment getLocalPortsAssignment_6_2_1() { return cLocalPortsAssignment_6_2_1; }
		
		//LocalPortsDeclaration
		public RuleCall getLocalPortsLocalPortsDeclarationParserRuleCall_6_2_1_0() { return cLocalPortsLocalPortsDeclarationParserRuleCall_6_2_1_0; }
		
		//('priority' priorities+=PriorityDeclaration (',' priorities+=PriorityDeclaration)*)?
		public Group getGroup_7() { return cGroup_7; }
		
		//'priority'
		public Keyword getPriorityKeyword_7_0() { return cPriorityKeyword_7_0; }
		
		//priorities+=PriorityDeclaration
		public Assignment getPrioritiesAssignment_7_1() { return cPrioritiesAssignment_7_1; }
		
		//PriorityDeclaration
		public RuleCall getPrioritiesPriorityDeclarationParserRuleCall_7_1_0() { return cPrioritiesPriorityDeclarationParserRuleCall_7_1_0; }
		
		//(',' priorities+=PriorityDeclaration)*
		public Group getGroup_7_2() { return cGroup_7_2; }
		
		//','
		public Keyword getCommaKeyword_7_2_0() { return cCommaKeyword_7_2_0; }
		
		//priorities+=PriorityDeclaration
		public Assignment getPrioritiesAssignment_7_2_1() { return cPrioritiesAssignment_7_2_1; }
		
		//PriorityDeclaration
		public RuleCall getPrioritiesPriorityDeclarationParserRuleCall_7_2_1_0() { return cPrioritiesPriorityDeclarationParserRuleCall_7_2_1_0; }
		
		//('init' prelude=StatementSequence)?
		public Group getGroup_8() { return cGroup_8; }
		
		//'init'
		public Keyword getInitKeyword_8_0() { return cInitKeyword_8_0; }
		
		//prelude=StatementSequence
		public Assignment getPreludeAssignment_8_1() { return cPreludeAssignment_8_1; }
		
		//StatementSequence
		public RuleCall getPreludeStatementSequenceParserRuleCall_8_1_0() { return cPreludeStatementSequenceParserRuleCall_8_1_0; }
		
		//body=Composition
		public Assignment getBodyAssignment_9() { return cBodyAssignment_9; }
		
		//Composition
		public RuleCall getBodyCompositionParserRuleCall_9_0() { return cBodyCompositionParserRuleCall_9_0; }
	}
	public class PortsDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PortsDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cPortsAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cPortsPortDeclarationParserRuleCall_0_0 = (RuleCall)cPortsAssignment_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 cPortsAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cPortsPortDeclarationParserRuleCall_1_1_0 = (RuleCall)cPortsAssignment_1_1.eContents().get(0);
		private final Keyword cColonKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cTypeAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cTypeChannelTypeParserRuleCall_3_0 = (RuleCall)cTypeAssignment_3.eContents().get(0);
		
		//PortsDeclaration:
		//	ports+=PortDeclaration (',' ports+=PortDeclaration)* ':' type=ChannelType;
		@Override public ParserRule getRule() { return rule; }
		
		//ports+=PortDeclaration (',' ports+=PortDeclaration)* ':' type=ChannelType
		public Group getGroup() { return cGroup; }
		
		//ports+=PortDeclaration
		public Assignment getPortsAssignment_0() { return cPortsAssignment_0; }
		
		//PortDeclaration
		public RuleCall getPortsPortDeclarationParserRuleCall_0_0() { return cPortsPortDeclarationParserRuleCall_0_0; }
		
		//(',' ports+=PortDeclaration)*
		public Group getGroup_1() { return cGroup_1; }
		
		//','
		public Keyword getCommaKeyword_1_0() { return cCommaKeyword_1_0; }
		
		//ports+=PortDeclaration
		public Assignment getPortsAssignment_1_1() { return cPortsAssignment_1_1; }
		
		//PortDeclaration
		public RuleCall getPortsPortDeclarationParserRuleCall_1_1_0() { return cPortsPortDeclarationParserRuleCall_1_1_0; }
		
		//':'
		public Keyword getColonKeyword_2() { return cColonKeyword_2; }
		
		//type=ChannelType
		public Assignment getTypeAssignment_3() { return cTypeAssignment_3; }
		
		//ChannelType
		public RuleCall getTypeChannelTypeParserRuleCall_3_0() { return cTypeChannelTypeParserRuleCall_3_0; }
	}
	public class PortDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PortDeclaration");
		private final Assignment cNameAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_0 = (RuleCall)cNameAssignment.eContents().get(0);
		
		//PortDeclaration:
		//	name=ID;
		@Override public ParserRule getRule() { return rule; }
		
		//name=ID
		public Assignment getNameAssignment() { return cNameAssignment; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_0() { return cNameIDTerminalRuleCall_0; }
	}
	public class LocalPortsDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.LocalPortsDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cPortsAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cPortsPortDeclarationParserRuleCall_0_0 = (RuleCall)cPortsAssignment_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 cPortsAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cPortsPortDeclarationParserRuleCall_1_1_0 = (RuleCall)cPortsAssignment_1_1.eContents().get(0);
		private final Keyword cColonKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cTypeAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cTypeChannelTypeParserRuleCall_3_0 = (RuleCall)cTypeAssignment_3.eContents().get(0);
		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
		private final Keyword cInKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
		private final Assignment cLeftAssignment_4_1 = (Assignment)cGroup_4.eContents().get(1);
		private final RuleCall cLeftLowerBoundParserRuleCall_4_1_0 = (RuleCall)cLeftAssignment_4_1.eContents().get(0);
		private final Keyword cCommaKeyword_4_2 = (Keyword)cGroup_4.eContents().get(2);
		private final Assignment cRightAssignment_4_3 = (Assignment)cGroup_4.eContents().get(3);
		private final RuleCall cRightUpperBoundParserRuleCall_4_3_0 = (RuleCall)cRightAssignment_4_3.eContents().get(0);
		
		//LocalPortsDeclaration:
		//	ports+=PortDeclaration (',' ports+=PortDeclaration)* ':' type=ChannelType ('in' left=LowerBound ','
		//	right=UpperBound)?;
		@Override public ParserRule getRule() { return rule; }
		
		//ports+=PortDeclaration (',' ports+=PortDeclaration)* ':' type=ChannelType ('in' left=LowerBound ',' right=UpperBound)?
		public Group getGroup() { return cGroup; }
		
		//ports+=PortDeclaration
		public Assignment getPortsAssignment_0() { return cPortsAssignment_0; }
		
		//PortDeclaration
		public RuleCall getPortsPortDeclarationParserRuleCall_0_0() { return cPortsPortDeclarationParserRuleCall_0_0; }
		
		//(',' ports+=PortDeclaration)*
		public Group getGroup_1() { return cGroup_1; }
		
		//','
		public Keyword getCommaKeyword_1_0() { return cCommaKeyword_1_0; }
		
		//ports+=PortDeclaration
		public Assignment getPortsAssignment_1_1() { return cPortsAssignment_1_1; }
		
		//PortDeclaration
		public RuleCall getPortsPortDeclarationParserRuleCall_1_1_0() { return cPortsPortDeclarationParserRuleCall_1_1_0; }
		
		//':'
		public Keyword getColonKeyword_2() { return cColonKeyword_2; }
		
		//type=ChannelType
		public Assignment getTypeAssignment_3() { return cTypeAssignment_3; }
		
		//ChannelType
		public RuleCall getTypeChannelTypeParserRuleCall_3_0() { return cTypeChannelTypeParserRuleCall_3_0; }
		
		//('in' left=LowerBound ',' right=UpperBound)?
		public Group getGroup_4() { return cGroup_4; }
		
		//'in'
		public Keyword getInKeyword_4_0() { return cInKeyword_4_0; }
		
		//left=LowerBound
		public Assignment getLeftAssignment_4_1() { return cLeftAssignment_4_1; }
		
		//LowerBound
		public RuleCall getLeftLowerBoundParserRuleCall_4_1_0() { return cLeftLowerBoundParserRuleCall_4_1_0; }
		
		//','
		public Keyword getCommaKeyword_4_2() { return cCommaKeyword_4_2; }
		
		//right=UpperBound
		public Assignment getRightAssignment_4_3() { return cRightAssignment_4_3; }
		
		//UpperBound
		public RuleCall getRightUpperBoundParserRuleCall_4_3_0() { return cRightUpperBoundParserRuleCall_4_3_0; }
	}
	public class ParametersDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ParametersDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cParametersAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cParametersParameterDeclarationParserRuleCall_0_0 = (RuleCall)cParametersAssignment_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 cParametersAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cParametersParameterDeclarationParserRuleCall_1_1_0 = (RuleCall)cParametersAssignment_1_1.eContents().get(0);
		private final Keyword cColonKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cReadAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final Keyword cReadReadKeyword_3_0 = (Keyword)cReadAssignment_3.eContents().get(0);
		private final Assignment cWriteAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final Keyword cWriteWriteKeyword_4_0 = (Keyword)cWriteAssignment_4.eContents().get(0);
		private final Assignment cTypeAssignment_5 = (Assignment)cGroup.eContents().get(5);
		private final RuleCall cTypeTypeParserRuleCall_5_0 = (RuleCall)cTypeAssignment_5.eContents().get(0);
		
		//ParametersDeclaration:
		//	parameters+=ParameterDeclaration (',' parameters+=ParameterDeclaration)* ':' read?='read'? write?='write'? type=Type;
		@Override public ParserRule getRule() { return rule; }
		
		//parameters+=ParameterDeclaration (',' parameters+=ParameterDeclaration)* ':' read?='read'? write?='write'? type=Type
		public Group getGroup() { return cGroup; }
		
		//parameters+=ParameterDeclaration
		public Assignment getParametersAssignment_0() { return cParametersAssignment_0; }
		
		//ParameterDeclaration
		public RuleCall getParametersParameterDeclarationParserRuleCall_0_0() { return cParametersParameterDeclarationParserRuleCall_0_0; }
		
		//(',' parameters+=ParameterDeclaration)*
		public Group getGroup_1() { return cGroup_1; }
		
		//','
		public Keyword getCommaKeyword_1_0() { return cCommaKeyword_1_0; }
		
		//parameters+=ParameterDeclaration
		public Assignment getParametersAssignment_1_1() { return cParametersAssignment_1_1; }
		
		//ParameterDeclaration
		public RuleCall getParametersParameterDeclarationParserRuleCall_1_1_0() { return cParametersParameterDeclarationParserRuleCall_1_1_0; }
		
		//':'
		public Keyword getColonKeyword_2() { return cColonKeyword_2; }
		
		//read?='read'?
		public Assignment getReadAssignment_3() { return cReadAssignment_3; }
		
		//'read'
		public Keyword getReadReadKeyword_3_0() { return cReadReadKeyword_3_0; }
		
		//write?='write'?
		public Assignment getWriteAssignment_4() { return cWriteAssignment_4; }
		
		//'write'
		public Keyword getWriteWriteKeyword_4_0() { return cWriteWriteKeyword_4_0; }
		
		//type=Type
		public Assignment getTypeAssignment_5() { return cTypeAssignment_5; }
		
		//Type
		public RuleCall getTypeTypeParserRuleCall_5_0() { return cTypeTypeParserRuleCall_5_0; }
	}
	public class ParameterDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ParameterDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cGroup.eContents().get(0);
		private final Assignment cReferenceAssignment_0_0 = (Assignment)cGroup_0.eContents().get(0);
		private final Keyword cReferenceAmpersandKeyword_0_0_0 = (Keyword)cReferenceAssignment_0_0.eContents().get(0);
		private final Group cGroup_0_1 = (Group)cGroup_0.eContents().get(1);
		private final Assignment cArrayAssignment_0_1_0 = (Assignment)cGroup_0_1.eContents().get(0);
		private final Keyword cArrayLeftSquareBracketKeyword_0_1_0_0 = (Keyword)cArrayAssignment_0_1_0.eContents().get(0);
		private final Assignment cSizeAssignment_0_1_1 = (Assignment)cGroup_0_1.eContents().get(1);
		private final RuleCall cSizeExpressionParserRuleCall_0_1_1_0 = (RuleCall)cSizeAssignment_0_1_1.eContents().get(0);
		private final Keyword cRightSquareBracketKeyword_0_1_2 = (Keyword)cGroup_0_1.eContents().get(2);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		
		//ParameterDeclaration:
		//	(reference?='&' (array?='[' size=Expression ']')?)? name=ID;
		@Override public ParserRule getRule() { return rule; }
		
		//(reference?='&' (array?='[' size=Expression ']')?)? name=ID
		public Group getGroup() { return cGroup; }
		
		//(reference?='&' (array?='[' size=Expression ']')?)?
		public Group getGroup_0() { return cGroup_0; }
		
		//reference?='&'
		public Assignment getReferenceAssignment_0_0() { return cReferenceAssignment_0_0; }
		
		//'&'
		public Keyword getReferenceAmpersandKeyword_0_0_0() { return cReferenceAmpersandKeyword_0_0_0; }
		
		//(array?='[' size=Expression ']')?
		public Group getGroup_0_1() { return cGroup_0_1; }
		
		//array?='['
		public Assignment getArrayAssignment_0_1_0() { return cArrayAssignment_0_1_0; }
		
		//'['
		public Keyword getArrayLeftSquareBracketKeyword_0_1_0_0() { return cArrayLeftSquareBracketKeyword_0_1_0_0; }
		
		//size=Expression
		public Assignment getSizeAssignment_0_1_1() { return cSizeAssignment_0_1_1; }
		
		//Expression
		public RuleCall getSizeExpressionParserRuleCall_0_1_1_0() { return cSizeExpressionParserRuleCall_0_1_1_0; }
		
		//']'
		public Keyword getRightSquareBracketKeyword_0_1_2() { return cRightSquareBracketKeyword_0_1_2; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
	}
	public class VariablesDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.VariablesDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cVariablesAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cVariablesVariableDeclarationParserRuleCall_0_0 = (RuleCall)cVariablesAssignment_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 cVariablesAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cVariablesVariableDeclarationParserRuleCall_1_1_0 = (RuleCall)cVariablesAssignment_1_1.eContents().get(0);
		private final Keyword cColonKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cTypeAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cTypeTypeParserRuleCall_3_0 = (RuleCall)cTypeAssignment_3.eContents().get(0);
		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
		private final Keyword cColonEqualsSignKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
		private final Assignment cValueAssignment_4_1 = (Assignment)cGroup_4.eContents().get(1);
		private final RuleCall cValueExpressionParserRuleCall_4_1_0 = (RuleCall)cValueAssignment_4_1.eContents().get(0);
		
		//VariablesDeclaration:
		//	variables+=VariableDeclaration (',' variables+=VariableDeclaration)* ':' type=Type (':=' value=Expression)?;
		@Override public ParserRule getRule() { return rule; }
		
		//variables+=VariableDeclaration (',' variables+=VariableDeclaration)* ':' type=Type (':=' value=Expression)?
		public Group getGroup() { return cGroup; }
		
		//variables+=VariableDeclaration
		public Assignment getVariablesAssignment_0() { return cVariablesAssignment_0; }
		
		//VariableDeclaration
		public RuleCall getVariablesVariableDeclarationParserRuleCall_0_0() { return cVariablesVariableDeclarationParserRuleCall_0_0; }
		
		//(',' variables+=VariableDeclaration)*
		public Group getGroup_1() { return cGroup_1; }
		
		//','
		public Keyword getCommaKeyword_1_0() { return cCommaKeyword_1_0; }
		
		//variables+=VariableDeclaration
		public Assignment getVariablesAssignment_1_1() { return cVariablesAssignment_1_1; }
		
		//VariableDeclaration
		public RuleCall getVariablesVariableDeclarationParserRuleCall_1_1_0() { return cVariablesVariableDeclarationParserRuleCall_1_1_0; }
		
		//':'
		public Keyword getColonKeyword_2() { return cColonKeyword_2; }
		
		//type=Type
		public Assignment getTypeAssignment_3() { return cTypeAssignment_3; }
		
		//Type
		public RuleCall getTypeTypeParserRuleCall_3_0() { return cTypeTypeParserRuleCall_3_0; }
		
		//(':=' value=Expression)?
		public Group getGroup_4() { return cGroup_4; }
		
		//':='
		public Keyword getColonEqualsSignKeyword_4_0() { return cColonEqualsSignKeyword_4_0; }
		
		//value=Expression
		public Assignment getValueAssignment_4_1() { return cValueAssignment_4_1; }
		
		//Expression
		public RuleCall getValueExpressionParserRuleCall_4_1_0() { return cValueExpressionParserRuleCall_4_1_0; }
	}
	public class VariableDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.VariableDeclaration");
		private final Assignment cNameAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_0 = (RuleCall)cNameAssignment.eContents().get(0);
		
		//VariableDeclaration:
		//	name=ID;
		@Override public ParserRule getRule() { return rule; }
		
		//name=ID
		public Assignment getNameAssignment() { return cNameAssignment; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_0() { return cNameIDTerminalRuleCall_0; }
	}
	public class PriorityDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PriorityDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cGroupsAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cGroupsPriorityGroupParserRuleCall_0_0 = (RuleCall)cGroupsAssignment_0.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cGreaterThanSignKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Assignment cGroupsAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cGroupsPriorityGroupParserRuleCall_1_1_0 = (RuleCall)cGroupsAssignment_1_1.eContents().get(0);
		
		//PriorityDeclaration:
		//	groups+=PriorityGroup ('>' groups+=PriorityGroup)+;
		@Override public ParserRule getRule() { return rule; }
		
		//groups+=PriorityGroup ('>' groups+=PriorityGroup)+
		public Group getGroup() { return cGroup; }
		
		//groups+=PriorityGroup
		public Assignment getGroupsAssignment_0() { return cGroupsAssignment_0; }
		
		//PriorityGroup
		public RuleCall getGroupsPriorityGroupParserRuleCall_0_0() { return cGroupsPriorityGroupParserRuleCall_0_0; }
		
		//('>' groups+=PriorityGroup)+
		public Group getGroup_1() { return cGroup_1; }
		
		//'>'
		public Keyword getGreaterThanSignKeyword_1_0() { return cGreaterThanSignKeyword_1_0; }
		
		//groups+=PriorityGroup
		public Assignment getGroupsAssignment_1_1() { return cGroupsAssignment_1_1; }
		
		//PriorityGroup
		public RuleCall getGroupsPriorityGroupParserRuleCall_1_1_0() { return cGroupsPriorityGroupParserRuleCall_1_1_0; }
	}
	public class PriorityGroupElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PriorityGroup");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cPortsAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final CrossReference cPortsPortDeclarationCrossReference_0_0 = (CrossReference)cPortsAssignment_0.eContents().get(0);
		private final RuleCall cPortsPortDeclarationIDTerminalRuleCall_0_0_1 = (RuleCall)cPortsPortDeclarationCrossReference_0_0.eContents().get(1);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cVerticalLineKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Assignment cPortsAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final CrossReference cPortsPortDeclarationCrossReference_1_1_0 = (CrossReference)cPortsAssignment_1_1.eContents().get(0);
		private final RuleCall cPortsPortDeclarationIDTerminalRuleCall_1_1_0_1 = (RuleCall)cPortsPortDeclarationCrossReference_1_1_0.eContents().get(1);
		
		//PriorityGroup:
		//	ports+=[PortDeclaration] ('|' ports+=[PortDeclaration])*;
		@Override public ParserRule getRule() { return rule; }
		
		//ports+=[PortDeclaration] ('|' ports+=[PortDeclaration])*
		public Group getGroup() { return cGroup; }
		
		//ports+=[PortDeclaration]
		public Assignment getPortsAssignment_0() { return cPortsAssignment_0; }
		
		//[PortDeclaration]
		public CrossReference getPortsPortDeclarationCrossReference_0_0() { return cPortsPortDeclarationCrossReference_0_0; }
		
		//ID
		public RuleCall getPortsPortDeclarationIDTerminalRuleCall_0_0_1() { return cPortsPortDeclarationIDTerminalRuleCall_0_0_1; }
		
		//('|' ports+=[PortDeclaration])*
		public Group getGroup_1() { return cGroup_1; }
		
		//'|'
		public Keyword getVerticalLineKeyword_1_0() { return cVerticalLineKeyword_1_0; }
		
		//ports+=[PortDeclaration]
		public Assignment getPortsAssignment_1_1() { return cPortsAssignment_1_1; }
		
		//[PortDeclaration]
		public CrossReference getPortsPortDeclarationCrossReference_1_1_0() { return cPortsPortDeclarationCrossReference_1_1_0; }
		
		//ID
		public RuleCall getPortsPortDeclarationIDTerminalRuleCall_1_1_0_1() { return cPortsPortDeclarationIDTerminalRuleCall_1_1_0_1; }
	}
	public class UnlessStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.UnlessStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cStatementChoiceParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cUnlessStatementFollowersAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cUnlessKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cFollowersAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cFollowersStatementChoiceParserRuleCall_1_2_0 = (RuleCall)cFollowersAssignment_1_2.eContents().get(0);
		
		//UnlessStatement Statement:
		//	StatementChoice ({UnlessStatement.followers+=current} 'unless' followers+=StatementChoice)*
		@Override public ParserRule getRule() { return rule; }
		
		//StatementChoice ({UnlessStatement.followers+=current} 'unless' followers+=StatementChoice)*
		public Group getGroup() { return cGroup; }
		
		//StatementChoice
		public RuleCall getStatementChoiceParserRuleCall_0() { return cStatementChoiceParserRuleCall_0; }
		
		//({UnlessStatement.followers+=current} 'unless' followers+=StatementChoice)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{UnlessStatement.followers+=current}
		public Action getUnlessStatementFollowersAction_1_0() { return cUnlessStatementFollowersAction_1_0; }
		
		//'unless'
		public Keyword getUnlessKeyword_1_1() { return cUnlessKeyword_1_1; }
		
		//followers+=StatementChoice
		public Assignment getFollowersAssignment_1_2() { return cFollowersAssignment_1_2; }
		
		//StatementChoice
		public RuleCall getFollowersStatementChoiceParserRuleCall_1_2_0() { return cFollowersStatementChoiceParserRuleCall_1_2_0; }
	}
	public class StatementChoiceElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.StatementChoice");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cStatementSequenceParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cStatementChoiceChoicesAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cLeftSquareBracketRightSquareBracketKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cChoicesAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cChoicesStatementSequenceParserRuleCall_1_2_0 = (RuleCall)cChoicesAssignment_1_2.eContents().get(0);
		
		//StatementChoice Statement:
		//	StatementSequence ({StatementChoice.choices+=current} '[]' choices+=StatementSequence)*
		@Override public ParserRule getRule() { return rule; }
		
		//StatementSequence ({StatementChoice.choices+=current} '[]' choices+=StatementSequence)*
		public Group getGroup() { return cGroup; }
		
		//StatementSequence
		public RuleCall getStatementSequenceParserRuleCall_0() { return cStatementSequenceParserRuleCall_0; }
		
		//({StatementChoice.choices+=current} '[]' choices+=StatementSequence)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{StatementChoice.choices+=current}
		public Action getStatementChoiceChoicesAction_1_0() { return cStatementChoiceChoicesAction_1_0; }
		
		//'[]'
		public Keyword getLeftSquareBracketRightSquareBracketKeyword_1_1() { return cLeftSquareBracketRightSquareBracketKeyword_1_1; }
		
		//choices+=StatementSequence
		public Assignment getChoicesAssignment_1_2() { return cChoicesAssignment_1_2; }
		
		//StatementSequence
		public RuleCall getChoicesStatementSequenceParserRuleCall_1_2_0() { return cChoicesStatementSequenceParserRuleCall_1_2_0; }
	}
	public class StatementSequenceElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.StatementSequence");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cStatementParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cStatementSequenceStatementsAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cSemicolonKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cStatementsAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cStatementsStatementParserRuleCall_1_2_0 = (RuleCall)cStatementsAssignment_1_2.eContents().get(0);
		
		//StatementSequence Statement:
		//	Statement ({StatementSequence.statements+=current} ';' statements+=Statement)*
		@Override public ParserRule getRule() { return rule; }
		
		//Statement ({StatementSequence.statements+=current} ';' statements+=Statement)*
		public Group getGroup() { return cGroup; }
		
		//Statement
		public RuleCall getStatementParserRuleCall_0() { return cStatementParserRuleCall_0; }
		
		//({StatementSequence.statements+=current} ';' statements+=Statement)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{StatementSequence.statements+=current}
		public Action getStatementSequenceStatementsAction_1_0() { return cStatementSequenceStatementsAction_1_0; }
		
		//';'
		public Keyword getSemicolonKeyword_1_1() { return cSemicolonKeyword_1_1; }
		
		//statements+=Statement
		public Assignment getStatementsAssignment_1_2() { return cStatementsAssignment_1_2; }
		
		//Statement
		public RuleCall getStatementsStatementParserRuleCall_1_2_0() { return cStatementsStatementParserRuleCall_1_2_0; }
	}
	public class StatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Statement");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cNullStatementParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cTaggedStatementParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cPatternStatementParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cConditionalStatementParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		private final RuleCall cSelectStatementParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
		private final RuleCall cWhileStatementParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
		private final RuleCall cForeachStatementParserRuleCall_6 = (RuleCall)cAlternatives.eContents().get(6);
		private final RuleCall cToStatementParserRuleCall_7 = (RuleCall)cAlternatives.eContents().get(7);
		private final RuleCall cCaseStatementParserRuleCall_8 = (RuleCall)cAlternatives.eContents().get(8);
		private final RuleCall cLoopStatementParserRuleCall_9 = (RuleCall)cAlternatives.eContents().get(9);
		private final RuleCall cOnStatementParserRuleCall_10 = (RuleCall)cAlternatives.eContents().get(10);
		private final RuleCall cWaitStatementParserRuleCall_11 = (RuleCall)cAlternatives.eContents().get(11);
		private final RuleCall cReturnStatementParserRuleCall_12 = (RuleCall)cAlternatives.eContents().get(12);
		private final RuleCall cBlockStatementParserRuleCall_13 = (RuleCall)cAlternatives.eContents().get(13);
		
		//Statement:
		//	NullStatement
		//	| TaggedStatement
		//	| PatternStatement
		//	| ConditionalStatement
		//	| SelectStatement
		//	| WhileStatement
		//	| ForeachStatement
		//	| ToStatement
		//	| CaseStatement
		//	| LoopStatement
		//	| OnStatement
		//	| WaitStatement
		//	| ReturnStatement
		//	| BlockStatement;
		@Override public ParserRule getRule() { return rule; }
		
		//NullStatement | TaggedStatement | PatternStatement | ConditionalStatement | SelectStatement | WhileStatement |
		//ForeachStatement | ToStatement | CaseStatement | LoopStatement | OnStatement | WaitStatement | ReturnStatement |
		//BlockStatement
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//NullStatement
		public RuleCall getNullStatementParserRuleCall_0() { return cNullStatementParserRuleCall_0; }
		
		//TaggedStatement
		public RuleCall getTaggedStatementParserRuleCall_1() { return cTaggedStatementParserRuleCall_1; }
		
		//PatternStatement
		public RuleCall getPatternStatementParserRuleCall_2() { return cPatternStatementParserRuleCall_2; }
		
		//ConditionalStatement
		public RuleCall getConditionalStatementParserRuleCall_3() { return cConditionalStatementParserRuleCall_3; }
		
		//SelectStatement
		public RuleCall getSelectStatementParserRuleCall_4() { return cSelectStatementParserRuleCall_4; }
		
		//WhileStatement
		public RuleCall getWhileStatementParserRuleCall_5() { return cWhileStatementParserRuleCall_5; }
		
		//ForeachStatement
		public RuleCall getForeachStatementParserRuleCall_6() { return cForeachStatementParserRuleCall_6; }
		
		//ToStatement
		public RuleCall getToStatementParserRuleCall_7() { return cToStatementParserRuleCall_7; }
		
		//CaseStatement
		public RuleCall getCaseStatementParserRuleCall_8() { return cCaseStatementParserRuleCall_8; }
		
		//LoopStatement
		public RuleCall getLoopStatementParserRuleCall_9() { return cLoopStatementParserRuleCall_9; }
		
		//OnStatement
		public RuleCall getOnStatementParserRuleCall_10() { return cOnStatementParserRuleCall_10; }
		
		//WaitStatement
		public RuleCall getWaitStatementParserRuleCall_11() { return cWaitStatementParserRuleCall_11; }
		
		//ReturnStatement
		public RuleCall getReturnStatementParserRuleCall_12() { return cReturnStatementParserRuleCall_12; }
		
		//BlockStatement
		public RuleCall getBlockStatementParserRuleCall_13() { return cBlockStatementParserRuleCall_13; }
	}
	public class BlockStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.BlockStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cBeginKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cBodyAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cBodyStatementSequenceParserRuleCall_1_0 = (RuleCall)cBodyAssignment_1.eContents().get(0);
		private final Keyword cEndKeyword_2 = (Keyword)cGroup.eContents().get(2);
		
		//BlockStatement:
		//	'begin' body=StatementSequence 'end';
		@Override public ParserRule getRule() { return rule; }
		
		//'begin' body=StatementSequence 'end'
		public Group getGroup() { return cGroup; }
		
		//'begin'
		public Keyword getBeginKeyword_0() { return cBeginKeyword_0; }
		
		//body=StatementSequence
		public Assignment getBodyAssignment_1() { return cBodyAssignment_1; }
		
		//StatementSequence
		public RuleCall getBodyStatementSequenceParserRuleCall_1_0() { return cBodyStatementSequenceParserRuleCall_1_0; }
		
		//'end'
		public Keyword getEndKeyword_2() { return cEndKeyword_2; }
	}
	public class ReturnStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.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);
		
		//ReturnStatement:
		//	'return' expression=Expression;
		@Override 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 class NullStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.NullStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cNullStatementAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cNullKeyword_1 = (Keyword)cGroup.eContents().get(1);
		
		//NullStatement:
		//	{NullStatement} 'null';
		@Override public ParserRule getRule() { return rule; }
		
		//{NullStatement} 'null'
		public Group getGroup() { return cGroup; }
		
		//{NullStatement}
		public Action getNullStatementAction_0() { return cNullStatementAction_0; }
		
		//'null'
		public Keyword getNullKeyword_1() { return cNullKeyword_1; }
	}
	public class TaggedStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.TaggedStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cNumberSignKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		
		//TaggedStatement:
		//	'#' name=ID //tag=TagDeclaration
		//;
		@Override public ParserRule getRule() { return rule; }
		
		//'#' name=ID
		public Group getGroup() { return cGroup; }
		
		//'#'
		public Keyword getNumberSignKeyword_0() { return cNumberSignKeyword_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
	}
	public class PatternStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PatternStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cPatternParserRuleCall_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 Keyword cCommaKeyword_1_0_0 = (Keyword)cGroup_1_0.eContents().get(0);
		private final Action cAssignStatementPatternsAction_1_0_1 = (Action)cGroup_1_0.eContents().get(1);
		private final Assignment cPatternsAssignment_1_0_2 = (Assignment)cGroup_1_0.eContents().get(2);
		private final RuleCall cPatternsPatternParserRuleCall_1_0_2_0 = (RuleCall)cPatternsAssignment_1_0_2.eContents().get(0);
		private final Group cGroup_1_0_3 = (Group)cGroup_1_0.eContents().get(3);
		private final Keyword cCommaKeyword_1_0_3_0 = (Keyword)cGroup_1_0_3.eContents().get(0);
		private final Assignment cPatternsAssignment_1_0_3_1 = (Assignment)cGroup_1_0_3.eContents().get(1);
		private final RuleCall cPatternsPatternParserRuleCall_1_0_3_1_0 = (RuleCall)cPatternsAssignment_1_0_3_1.eContents().get(0);
		private final Keyword cColonEqualsSignKeyword_1_0_4 = (Keyword)cGroup_1_0.eContents().get(4);
		private final Assignment cValuesAssignment_1_0_5 = (Assignment)cGroup_1_0.eContents().get(5);
		private final RuleCall cValuesExpressionParserRuleCall_1_0_5_0 = (RuleCall)cValuesAssignment_1_0_5.eContents().get(0);
		private final Group cGroup_1_0_6 = (Group)cGroup_1_0.eContents().get(6);
		private final Keyword cCommaKeyword_1_0_6_0 = (Keyword)cGroup_1_0_6.eContents().get(0);
		private final Assignment cValuesAssignment_1_0_6_1 = (Assignment)cGroup_1_0_6.eContents().get(1);
		private final RuleCall cValuesExpressionParserRuleCall_1_0_6_1_0 = (RuleCall)cValuesAssignment_1_0_6_1.eContents().get(0);
		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
		private final Keyword cColonEqualsSignKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
		private final Action cAssignStatementPatternsAction_1_1_1 = (Action)cGroup_1_1.eContents().get(1);
		private final Group cGroup_1_1_2 = (Group)cGroup_1_1.eContents().get(2);
		private final Assignment cValuesAssignment_1_1_2_0 = (Assignment)cGroup_1_1_2.eContents().get(0);
		private final RuleCall cValuesExpressionParserRuleCall_1_1_2_0_0 = (RuleCall)cValuesAssignment_1_1_2_0.eContents().get(0);
		private final Group cGroup_1_1_2_1 = (Group)cGroup_1_1_2.eContents().get(1);
		private final Keyword cCommaKeyword_1_1_2_1_0 = (Keyword)cGroup_1_1_2_1.eContents().get(0);
		private final Assignment cValuesAssignment_1_1_2_1_1 = (Assignment)cGroup_1_1_2_1.eContents().get(1);
		private final RuleCall cValuesExpressionParserRuleCall_1_1_2_1_1_0 = (RuleCall)cValuesAssignment_1_1_2_1_1.eContents().get(0);
		private final Group cGroup_1_2 = (Group)cAlternatives_1.eContents().get(2);
		private final Keyword cCommaKeyword_1_2_0 = (Keyword)cGroup_1_2.eContents().get(0);
		private final Action cAssignAnyStatementPatternsAction_1_2_1 = (Action)cGroup_1_2.eContents().get(1);
		private final Assignment cPatternsAssignment_1_2_2 = (Assignment)cGroup_1_2.eContents().get(2);
		private final RuleCall cPatternsPatternParserRuleCall_1_2_2_0 = (RuleCall)cPatternsAssignment_1_2_2.eContents().get(0);
		private final Group cGroup_1_2_3 = (Group)cGroup_1_2.eContents().get(3);
		private final Keyword cCommaKeyword_1_2_3_0 = (Keyword)cGroup_1_2_3.eContents().get(0);
		private final Assignment cPatternsAssignment_1_2_3_1 = (Assignment)cGroup_1_2_3.eContents().get(1);
		private final RuleCall cPatternsPatternParserRuleCall_1_2_3_1_0 = (RuleCall)cPatternsAssignment_1_2_3_1.eContents().get(0);
		private final Keyword cColonEqualsSignKeyword_1_2_4 = (Keyword)cGroup_1_2.eContents().get(4);
		private final Keyword cAnyKeyword_1_2_5 = (Keyword)cGroup_1_2.eContents().get(5);
		private final Group cGroup_1_2_6 = (Group)cGroup_1_2.eContents().get(6);
		private final Keyword cWhereKeyword_1_2_6_0 = (Keyword)cGroup_1_2_6.eContents().get(0);
		private final Assignment cExpAssignment_1_2_6_1 = (Assignment)cGroup_1_2_6.eContents().get(1);
		private final RuleCall cExpExpressionParserRuleCall_1_2_6_1_0 = (RuleCall)cExpAssignment_1_2_6_1.eContents().get(0);
		private final Group cGroup_1_3 = (Group)cAlternatives_1.eContents().get(3);
		private final Keyword cColonEqualsSignKeyword_1_3_0 = (Keyword)cGroup_1_3.eContents().get(0);
		private final Action cAssignAnyStatementPatternsAction_1_3_1 = (Action)cGroup_1_3.eContents().get(1);
		private final Keyword cAnyKeyword_1_3_2 = (Keyword)cGroup_1_3.eContents().get(2);
		private final Group cGroup_1_3_3 = (Group)cGroup_1_3.eContents().get(3);
		private final Keyword cWhereKeyword_1_3_3_0 = (Keyword)cGroup_1_3_3.eContents().get(0);
		private final Assignment cExpAssignment_1_3_3_1 = (Assignment)cGroup_1_3_3.eContents().get(1);
		private final RuleCall cExpExpressionParserRuleCall_1_3_3_1_0 = (RuleCall)cExpAssignment_1_3_3_1.eContents().get(0);
		private final Group cGroup_1_4 = (Group)cAlternatives_1.eContents().get(4);
		private final Keyword cExclamationMarkKeyword_1_4_0 = (Keyword)cGroup_1_4.eContents().get(0);
		private final Action cSendStatementPortAction_1_4_1 = (Action)cGroup_1_4.eContents().get(1);
		private final Assignment cValuesAssignment_1_4_2 = (Assignment)cGroup_1_4.eContents().get(2);
		private final RuleCall cValuesExpressionParserRuleCall_1_4_2_0 = (RuleCall)cValuesAssignment_1_4_2.eContents().get(0);
		private final Group cGroup_1_4_3 = (Group)cGroup_1_4.eContents().get(3);
		private final Keyword cCommaKeyword_1_4_3_0 = (Keyword)cGroup_1_4_3.eContents().get(0);
		private final Assignment cValuesAssignment_1_4_3_1 = (Assignment)cGroup_1_4_3.eContents().get(1);
		private final RuleCall cValuesExpressionParserRuleCall_1_4_3_1_0 = (RuleCall)cValuesAssignment_1_4_3_1.eContents().get(0);
		private final Group cGroup_1_5 = (Group)cAlternatives_1.eContents().get(5);
		private final Keyword cQuestionMarkKeyword_1_5_0 = (Keyword)cGroup_1_5.eContents().get(0);
		private final Action cReceiveStatementPortAction_1_5_1 = (Action)cGroup_1_5.eContents().get(1);
		private final Assignment cPatternsAssignment_1_5_2 = (Assignment)cGroup_1_5.eContents().get(2);
		private final RuleCall cPatternsPatternParserRuleCall_1_5_2_0 = (RuleCall)cPatternsAssignment_1_5_2.eContents().get(0);
		private final Group cGroup_1_5_3 = (Group)cGroup_1_5.eContents().get(3);
		private final Keyword cCommaKeyword_1_5_3_0 = (Keyword)cGroup_1_5_3.eContents().get(0);
		private final Assignment cPatternsAssignment_1_5_3_1 = (Assignment)cGroup_1_5_3.eContents().get(1);
		private final RuleCall cPatternsPatternParserRuleCall_1_5_3_1_0 = (RuleCall)cPatternsAssignment_1_5_3_1.eContents().get(0);
		private final Group cGroup_1_5_4 = (Group)cGroup_1_5.eContents().get(4);
		private final Keyword cWhereKeyword_1_5_4_0 = (Keyword)cGroup_1_5_4.eContents().get(0);
		private final Assignment cExpAssignment_1_5_4_1 = (Assignment)cGroup_1_5_4.eContents().get(1);
		private final RuleCall cExpExpressionParserRuleCall_1_5_4_1_0 = (RuleCall)cExpAssignment_1_5_4_1.eContents().get(0);
		
		////TagDeclaration:
		////	name=ID
		////;
		//PatternStatement:
		//	Pattern (',' {AssignStatement.patterns+=current} patterns+=Pattern (',' patterns+=Pattern)* ':=' values+=Expression
		//	(',' values+=Expression)* | ':=' {AssignStatement.patterns+=current} (values+=Expression (',' values+=Expression)*) |
		//	',' {AssignAnyStatement.patterns+=current} patterns+=Pattern (',' patterns+=Pattern)* ':=' 'any' ('where'
		//	exp=Expression)? | ':=' {AssignAnyStatement.patterns+=current} 'any' ('where' exp=Expression)? | '!'
		//	{SendStatement.port=current} values+=Expression (',' values+=Expression)* | '?' {ReceiveStatement.port=current}
		//	patterns+=Pattern (',' patterns+=Pattern)* ('where' exp=Expression)?)?;
		@Override public ParserRule getRule() { return rule; }
		
		//Pattern (',' {AssignStatement.patterns+=current} patterns+=Pattern (',' patterns+=Pattern)* ':=' values+=Expression (','
		//values+=Expression)* | ':=' {AssignStatement.patterns+=current} (values+=Expression (',' values+=Expression)*) | ','
		//{AssignAnyStatement.patterns+=current} patterns+=Pattern (',' patterns+=Pattern)* ':=' 'any' ('where' exp=Expression)?
		//| ':=' {AssignAnyStatement.patterns+=current} 'any' ('where' exp=Expression)? | '!' {SendStatement.port=current}
		//values+=Expression (',' values+=Expression)* | '?' {ReceiveStatement.port=current} patterns+=Pattern (','
		//patterns+=Pattern)* ('where' exp=Expression)?)?
		public Group getGroup() { return cGroup; }
		
		//Pattern
		public RuleCall getPatternParserRuleCall_0() { return cPatternParserRuleCall_0; }
		
		//(',' {AssignStatement.patterns+=current} patterns+=Pattern (',' patterns+=Pattern)* ':=' values+=Expression (','
		//values+=Expression)* | ':=' {AssignStatement.patterns+=current} (values+=Expression (',' values+=Expression)*) | ','
		//{AssignAnyStatement.patterns+=current} patterns+=Pattern (',' patterns+=Pattern)* ':=' 'any' ('where' exp=Expression)?
		//| ':=' {AssignAnyStatement.patterns+=current} 'any' ('where' exp=Expression)? | '!' {SendStatement.port=current}
		//values+=Expression (',' values+=Expression)* | '?' {ReceiveStatement.port=current} patterns+=Pattern (','
		//patterns+=Pattern)* ('where' exp=Expression)?)?
		public Alternatives getAlternatives_1() { return cAlternatives_1; }
		
		//',' {AssignStatement.patterns+=current} patterns+=Pattern (',' patterns+=Pattern)* ':=' values+=Expression (','
		//values+=Expression)*
		public Group getGroup_1_0() { return cGroup_1_0; }
		
		//','
		public Keyword getCommaKeyword_1_0_0() { return cCommaKeyword_1_0_0; }
		
		//{AssignStatement.patterns+=current}
		public Action getAssignStatementPatternsAction_1_0_1() { return cAssignStatementPatternsAction_1_0_1; }
		
		//patterns+=Pattern
		public Assignment getPatternsAssignment_1_0_2() { return cPatternsAssignment_1_0_2; }
		
		//Pattern
		public RuleCall getPatternsPatternParserRuleCall_1_0_2_0() { return cPatternsPatternParserRuleCall_1_0_2_0; }
		
		//(',' patterns+=Pattern)*
		public Group getGroup_1_0_3() { return cGroup_1_0_3; }
		
		//','
		public Keyword getCommaKeyword_1_0_3_0() { return cCommaKeyword_1_0_3_0; }
		
		//patterns+=Pattern
		public Assignment getPatternsAssignment_1_0_3_1() { return cPatternsAssignment_1_0_3_1; }
		
		//Pattern
		public RuleCall getPatternsPatternParserRuleCall_1_0_3_1_0() { return cPatternsPatternParserRuleCall_1_0_3_1_0; }
		
		//':='
		public Keyword getColonEqualsSignKeyword_1_0_4() { return cColonEqualsSignKeyword_1_0_4; }
		
		//values+=Expression
		public Assignment getValuesAssignment_1_0_5() { return cValuesAssignment_1_0_5; }
		
		//Expression
		public RuleCall getValuesExpressionParserRuleCall_1_0_5_0() { return cValuesExpressionParserRuleCall_1_0_5_0; }
		
		//(',' values+=Expression)*
		public Group getGroup_1_0_6() { return cGroup_1_0_6; }
		
		//','
		public Keyword getCommaKeyword_1_0_6_0() { return cCommaKeyword_1_0_6_0; }
		
		//values+=Expression
		public Assignment getValuesAssignment_1_0_6_1() { return cValuesAssignment_1_0_6_1; }
		
		//Expression
		public RuleCall getValuesExpressionParserRuleCall_1_0_6_1_0() { return cValuesExpressionParserRuleCall_1_0_6_1_0; }
		
		//':=' {AssignStatement.patterns+=current} (values+=Expression (',' values+=Expression)*)
		public Group getGroup_1_1() { return cGroup_1_1; }
		
		//':='
		public Keyword getColonEqualsSignKeyword_1_1_0() { return cColonEqualsSignKeyword_1_1_0; }
		
		//{AssignStatement.patterns+=current}
		public Action getAssignStatementPatternsAction_1_1_1() { return cAssignStatementPatternsAction_1_1_1; }
		
		//(values+=Expression (',' values+=Expression)*)
		public Group getGroup_1_1_2() { return cGroup_1_1_2; }
		
		//values+=Expression
		public Assignment getValuesAssignment_1_1_2_0() { return cValuesAssignment_1_1_2_0; }
		
		//Expression
		public RuleCall getValuesExpressionParserRuleCall_1_1_2_0_0() { return cValuesExpressionParserRuleCall_1_1_2_0_0; }
		
		//(',' values+=Expression)*
		public Group getGroup_1_1_2_1() { return cGroup_1_1_2_1; }
		
		//','
		public Keyword getCommaKeyword_1_1_2_1_0() { return cCommaKeyword_1_1_2_1_0; }
		
		//values+=Expression
		public Assignment getValuesAssignment_1_1_2_1_1() { return cValuesAssignment_1_1_2_1_1; }
		
		//Expression
		public RuleCall getValuesExpressionParserRuleCall_1_1_2_1_1_0() { return cValuesExpressionParserRuleCall_1_1_2_1_1_0; }
		
		//',' {AssignAnyStatement.patterns+=current} patterns+=Pattern (',' patterns+=Pattern)* ':=' 'any' ('where'
		//exp=Expression)?
		public Group getGroup_1_2() { return cGroup_1_2; }
		
		//','
		public Keyword getCommaKeyword_1_2_0() { return cCommaKeyword_1_2_0; }
		
		//{AssignAnyStatement.patterns+=current}
		public Action getAssignAnyStatementPatternsAction_1_2_1() { return cAssignAnyStatementPatternsAction_1_2_1; }
		
		//patterns+=Pattern
		public Assignment getPatternsAssignment_1_2_2() { return cPatternsAssignment_1_2_2; }
		
		//Pattern
		public RuleCall getPatternsPatternParserRuleCall_1_2_2_0() { return cPatternsPatternParserRuleCall_1_2_2_0; }
		
		//(',' patterns+=Pattern)*
		public Group getGroup_1_2_3() { return cGroup_1_2_3; }
		
		//','
		public Keyword getCommaKeyword_1_2_3_0() { return cCommaKeyword_1_2_3_0; }
		
		//patterns+=Pattern
		public Assignment getPatternsAssignment_1_2_3_1() { return cPatternsAssignment_1_2_3_1; }
		
		//Pattern
		public RuleCall getPatternsPatternParserRuleCall_1_2_3_1_0() { return cPatternsPatternParserRuleCall_1_2_3_1_0; }
		
		//':='
		public Keyword getColonEqualsSignKeyword_1_2_4() { return cColonEqualsSignKeyword_1_2_4; }
		
		//'any'
		public Keyword getAnyKeyword_1_2_5() { return cAnyKeyword_1_2_5; }
		
		//('where' exp=Expression)?
		public Group getGroup_1_2_6() { return cGroup_1_2_6; }
		
		//'where'
		public Keyword getWhereKeyword_1_2_6_0() { return cWhereKeyword_1_2_6_0; }
		
		//exp=Expression
		public Assignment getExpAssignment_1_2_6_1() { return cExpAssignment_1_2_6_1; }
		
		//Expression
		public RuleCall getExpExpressionParserRuleCall_1_2_6_1_0() { return cExpExpressionParserRuleCall_1_2_6_1_0; }
		
		//':=' {AssignAnyStatement.patterns+=current} 'any' ('where' exp=Expression)?
		public Group getGroup_1_3() { return cGroup_1_3; }
		
		//':='
		public Keyword getColonEqualsSignKeyword_1_3_0() { return cColonEqualsSignKeyword_1_3_0; }
		
		//{AssignAnyStatement.patterns+=current}
		public Action getAssignAnyStatementPatternsAction_1_3_1() { return cAssignAnyStatementPatternsAction_1_3_1; }
		
		//'any'
		public Keyword getAnyKeyword_1_3_2() { return cAnyKeyword_1_3_2; }
		
		//('where' exp=Expression)?
		public Group getGroup_1_3_3() { return cGroup_1_3_3; }
		
		//'where'
		public Keyword getWhereKeyword_1_3_3_0() { return cWhereKeyword_1_3_3_0; }
		
		//exp=Expression
		public Assignment getExpAssignment_1_3_3_1() { return cExpAssignment_1_3_3_1; }
		
		//Expression
		public RuleCall getExpExpressionParserRuleCall_1_3_3_1_0() { return cExpExpressionParserRuleCall_1_3_3_1_0; }
		
		//'!' {SendStatement.port=current} values+=Expression (',' values+=Expression)*
		public Group getGroup_1_4() { return cGroup_1_4; }
		
		//'!'
		public Keyword getExclamationMarkKeyword_1_4_0() { return cExclamationMarkKeyword_1_4_0; }
		
		//{SendStatement.port=current}
		public Action getSendStatementPortAction_1_4_1() { return cSendStatementPortAction_1_4_1; }
		
		//values+=Expression
		public Assignment getValuesAssignment_1_4_2() { return cValuesAssignment_1_4_2; }
		
		//Expression
		public RuleCall getValuesExpressionParserRuleCall_1_4_2_0() { return cValuesExpressionParserRuleCall_1_4_2_0; }
		
		//(',' values+=Expression)*
		public Group getGroup_1_4_3() { return cGroup_1_4_3; }
		
		//','
		public Keyword getCommaKeyword_1_4_3_0() { return cCommaKeyword_1_4_3_0; }
		
		//values+=Expression
		public Assignment getValuesAssignment_1_4_3_1() { return cValuesAssignment_1_4_3_1; }
		
		//Expression
		public RuleCall getValuesExpressionParserRuleCall_1_4_3_1_0() { return cValuesExpressionParserRuleCall_1_4_3_1_0; }
		
		//'?' {ReceiveStatement.port=current} patterns+=Pattern (',' patterns+=Pattern)* ('where' exp=Expression)?
		public Group getGroup_1_5() { return cGroup_1_5; }
		
		//'?'
		public Keyword getQuestionMarkKeyword_1_5_0() { return cQuestionMarkKeyword_1_5_0; }
		
		//{ReceiveStatement.port=current}
		public Action getReceiveStatementPortAction_1_5_1() { return cReceiveStatementPortAction_1_5_1; }
		
		//patterns+=Pattern
		public Assignment getPatternsAssignment_1_5_2() { return cPatternsAssignment_1_5_2; }
		
		//Pattern
		public RuleCall getPatternsPatternParserRuleCall_1_5_2_0() { return cPatternsPatternParserRuleCall_1_5_2_0; }
		
		//(',' patterns+=Pattern)*
		public Group getGroup_1_5_3() { return cGroup_1_5_3; }
		
		//','
		public Keyword getCommaKeyword_1_5_3_0() { return cCommaKeyword_1_5_3_0; }
		
		//patterns+=Pattern
		public Assignment getPatternsAssignment_1_5_3_1() { return cPatternsAssignment_1_5_3_1; }
		
		//Pattern
		public RuleCall getPatternsPatternParserRuleCall_1_5_3_1_0() { return cPatternsPatternParserRuleCall_1_5_3_1_0; }
		
		//('where' exp=Expression)?
		public Group getGroup_1_5_4() { return cGroup_1_5_4; }
		
		//'where'
		public Keyword getWhereKeyword_1_5_4_0() { return cWhereKeyword_1_5_4_0; }
		
		//exp=Expression
		public Assignment getExpAssignment_1_5_4_1() { return cExpAssignment_1_5_4_1; }
		
		//Expression
		public RuleCall getExpExpressionParserRuleCall_1_5_4_1_0() { return cExpExpressionParserRuleCall_1_5_4_1_0; }
	}
	public class PatternElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Pattern");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cAnyPatternParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cIntegerPatternParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cConstantPatternParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final Group cGroup_3 = (Group)cAlternatives.eContents().get(3);
		private final Keyword cLeftParenthesisKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final RuleCall cPatternParserRuleCall_3_1 = (RuleCall)cGroup_3.eContents().get(1);
		private final Keyword cRightParenthesisKeyword_3_2 = (Keyword)cGroup_3.eContents().get(2);
		private final RuleCall cIdentifierPatternParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
		
		//Pattern:
		//	AnyPattern
		//	| IntegerPattern
		//	| ConstantPattern
		//	| '(' Pattern ')'
		//	| IdentifierPattern;
		@Override public ParserRule getRule() { return rule; }
		
		//AnyPattern | IntegerPattern | ConstantPattern | '(' Pattern ')' | IdentifierPattern
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//AnyPattern
		public RuleCall getAnyPatternParserRuleCall_0() { return cAnyPatternParserRuleCall_0; }
		
		//IntegerPattern
		public RuleCall getIntegerPatternParserRuleCall_1() { return cIntegerPatternParserRuleCall_1; }
		
		//ConstantPattern
		public RuleCall getConstantPatternParserRuleCall_2() { return cConstantPatternParserRuleCall_2; }
		
		//'(' Pattern ')'
		public Group getGroup_3() { return cGroup_3; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_3_0() { return cLeftParenthesisKeyword_3_0; }
		
		//Pattern
		public RuleCall getPatternParserRuleCall_3_1() { return cPatternParserRuleCall_3_1; }
		
		//')'
		public Keyword getRightParenthesisKeyword_3_2() { return cRightParenthesisKeyword_3_2; }
		
		//IdentifierPattern
		public RuleCall getIdentifierPatternParserRuleCall_4() { return cIdentifierPatternParserRuleCall_4; }
	}
	public class AnyPatternElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.AnyPattern");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cAnyPatternAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cAnyKeyword_1 = (Keyword)cGroup.eContents().get(1);
		
		//AnyPattern:
		//	{AnyPattern} 'any';
		@Override public ParserRule getRule() { return rule; }
		
		//{AnyPattern} 'any'
		public Group getGroup() { return cGroup; }
		
		//{AnyPattern}
		public Action getAnyPatternAction_0() { return cAnyPatternAction_0; }
		
		//'any'
		public Keyword getAnyKeyword_1() { return cAnyKeyword_1; }
	}
	public class ConstantPatternElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ConstantPattern");
		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cValueLiteralExpressionParserRuleCall_0 = (RuleCall)cValueAssignment.eContents().get(0);
		
		//ConstantPattern:
		//	value=LiteralExpression;
		@Override public ParserRule getRule() { return rule; }
		
		//value=LiteralExpression
		public Assignment getValueAssignment() { return cValueAssignment; }
		
		//LiteralExpression
		public RuleCall getValueLiteralExpressionParserRuleCall_0() { return cValueLiteralExpressionParserRuleCall_0; }
	}
	public class IntegerPatternElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.IntegerPattern");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
		private final Keyword cPlusSignKeyword_0_0 = (Keyword)cAlternatives_0.eContents().get(0);
		private final Assignment cNegativeAssignment_0_1 = (Assignment)cAlternatives_0.eContents().get(1);
		private final Keyword cNegativeHyphenMinusKeyword_0_1_0 = (Keyword)cNegativeAssignment_0_1.eContents().get(0);
		private final Assignment cValueAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cValueINTTerminalRuleCall_1_0 = (RuleCall)cValueAssignment_1.eContents().get(0);
		
		//IntegerPattern:
		//	('+' | negative?='-') value=INT;
		@Override public ParserRule getRule() { return rule; }
		
		//('+' | negative?='-') value=INT
		public Group getGroup() { return cGroup; }
		
		//('+' | negative?='-')
		public Alternatives getAlternatives_0() { return cAlternatives_0; }
		
		//'+'
		public Keyword getPlusSignKeyword_0_0() { return cPlusSignKeyword_0_0; }
		
		//negative?='-'
		public Assignment getNegativeAssignment_0_1() { return cNegativeAssignment_0_1; }
		
		//'-'
		public Keyword getNegativeHyphenMinusKeyword_0_1_0() { return cNegativeHyphenMinusKeyword_0_1_0; }
		
		//value=INT
		public Assignment getValueAssignment_1() { return cValueAssignment_1; }
		
		//INT
		public RuleCall getValueINTTerminalRuleCall_1_0() { return cValueINTTerminalRuleCall_1_0; }
	}
	public class IdentifierPatternElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.IdentifierPattern");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Action cConstructorPatternAction_0_0 = (Action)cGroup_0.eContents().get(0);
		private final Assignment cDeclarationAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
		private final CrossReference cDeclarationPatternDeclarationUseCrossReference_0_1_0 = (CrossReference)cDeclarationAssignment_0_1.eContents().get(0);
		private final RuleCall cDeclarationPatternDeclarationUseIDTerminalRuleCall_0_1_0_1 = (RuleCall)cDeclarationPatternDeclarationUseCrossReference_0_1_0.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_0_2 = (Keyword)cGroup_0.eContents().get(2);
		private final Group cGroup_0_3 = (Group)cGroup_0.eContents().get(3);
		private final Assignment cParametersAssignment_0_3_0 = (Assignment)cGroup_0_3.eContents().get(0);
		private final RuleCall cParametersPatternParserRuleCall_0_3_0_0 = (RuleCall)cParametersAssignment_0_3_0.eContents().get(0);
		private final Group cGroup_0_3_1 = (Group)cGroup_0_3.eContents().get(1);
		private final Keyword cCommaKeyword_0_3_1_0 = (Keyword)cGroup_0_3_1.eContents().get(0);
		private final Assignment cParametersAssignment_0_3_1_1 = (Assignment)cGroup_0_3_1.eContents().get(1);
		private final RuleCall cParametersPatternParserRuleCall_0_3_1_1_0 = (RuleCall)cParametersAssignment_0_3_1_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_0_4 = (Keyword)cGroup_0.eContents().get(4);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Assignment cDeclarationAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
		private final CrossReference cDeclarationPatternDeclarationUseCrossReference_1_0_0 = (CrossReference)cDeclarationAssignment_1_0.eContents().get(0);
		private final RuleCall cDeclarationPatternDeclarationUseIDTerminalRuleCall_1_0_0_1 = (RuleCall)cDeclarationPatternDeclarationUseCrossReference_1_0_0.eContents().get(1);
		private final Alternatives cAlternatives_1_1 = (Alternatives)cGroup_1.eContents().get(1);
		private final Group cGroup_1_1_0 = (Group)cAlternatives_1_1.eContents().get(0);
		private final Keyword cLeftSquareBracketKeyword_1_1_0_0 = (Keyword)cGroup_1_1_0.eContents().get(0);
		private final Action cArrayAccessPatternSourceAction_1_1_0_1 = (Action)cGroup_1_1_0.eContents().get(1);
		private final Assignment cIndexAssignment_1_1_0_2 = (Assignment)cGroup_1_1_0.eContents().get(2);
		private final RuleCall cIndexExpressionParserRuleCall_1_1_0_2_0 = (RuleCall)cIndexAssignment_1_1_0_2.eContents().get(0);
		private final Keyword cRightSquareBracketKeyword_1_1_0_3 = (Keyword)cGroup_1_1_0.eContents().get(3);
		private final Group cGroup_1_1_1 = (Group)cAlternatives_1_1.eContents().get(1);
		private final Keyword cFullStopKeyword_1_1_1_0 = (Keyword)cGroup_1_1_1.eContents().get(0);
		private final Action cRecordAccessPatternSourceAction_1_1_1_1 = (Action)cGroup_1_1_1.eContents().get(1);
		private final Assignment cFieldAssignment_1_1_1_2 = (Assignment)cGroup_1_1_1.eContents().get(2);
		private final CrossReference cFieldRecordFieldDeclarationCrossReference_1_1_1_2_0 = (CrossReference)cFieldAssignment_1_1_1_2.eContents().get(0);
		private final RuleCall cFieldRecordFieldDeclarationIDTerminalRuleCall_1_1_1_2_0_1 = (RuleCall)cFieldRecordFieldDeclarationCrossReference_1_1_1_2_0.eContents().get(1);
		
		//IdentifierPattern:
		//	{ConstructorPattern} declaration=[PatternDeclarationUse] '(' (parameters+=Pattern (',' parameters+=Pattern)*)? ')' |
		//	declaration=[PatternDeclarationUse] ('[' {ArrayAccessPattern.source=current} index=Expression ']' | '.'
		//	{RecordAccessPattern.source=current} field=[RecordFieldDeclaration])*;
		@Override public ParserRule getRule() { return rule; }
		
		//{ConstructorPattern} declaration=[PatternDeclarationUse] '(' (parameters+=Pattern (',' parameters+=Pattern)*)? ')' |
		//declaration=[PatternDeclarationUse] ('[' {ArrayAccessPattern.source=current} index=Expression ']' | '.'
		//{RecordAccessPattern.source=current} field=[RecordFieldDeclaration])*
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//{ConstructorPattern} declaration=[PatternDeclarationUse] '(' (parameters+=Pattern (',' parameters+=Pattern)*)? ')'
		public Group getGroup_0() { return cGroup_0; }
		
		//{ConstructorPattern}
		public Action getConstructorPatternAction_0_0() { return cConstructorPatternAction_0_0; }
		
		//declaration=[PatternDeclarationUse]
		public Assignment getDeclarationAssignment_0_1() { return cDeclarationAssignment_0_1; }
		
		//[PatternDeclarationUse]
		public CrossReference getDeclarationPatternDeclarationUseCrossReference_0_1_0() { return cDeclarationPatternDeclarationUseCrossReference_0_1_0; }
		
		//ID
		public RuleCall getDeclarationPatternDeclarationUseIDTerminalRuleCall_0_1_0_1() { return cDeclarationPatternDeclarationUseIDTerminalRuleCall_0_1_0_1; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_0_2() { return cLeftParenthesisKeyword_0_2; }
		
		//(parameters+=Pattern (',' parameters+=Pattern)*)?
		public Group getGroup_0_3() { return cGroup_0_3; }
		
		//parameters+=Pattern
		public Assignment getParametersAssignment_0_3_0() { return cParametersAssignment_0_3_0; }
		
		//Pattern
		public RuleCall getParametersPatternParserRuleCall_0_3_0_0() { return cParametersPatternParserRuleCall_0_3_0_0; }
		
		//(',' parameters+=Pattern)*
		public Group getGroup_0_3_1() { return cGroup_0_3_1; }
		
		//','
		public Keyword getCommaKeyword_0_3_1_0() { return cCommaKeyword_0_3_1_0; }
		
		//parameters+=Pattern
		public Assignment getParametersAssignment_0_3_1_1() { return cParametersAssignment_0_3_1_1; }
		
		//Pattern
		public RuleCall getParametersPatternParserRuleCall_0_3_1_1_0() { return cParametersPatternParserRuleCall_0_3_1_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_0_4() { return cRightParenthesisKeyword_0_4; }
		
		//declaration=[PatternDeclarationUse] ('[' {ArrayAccessPattern.source=current} index=Expression ']' | '.'
		//{RecordAccessPattern.source=current} field=[RecordFieldDeclaration])*
		public Group getGroup_1() { return cGroup_1; }
		
		//declaration=[PatternDeclarationUse]
		public Assignment getDeclarationAssignment_1_0() { return cDeclarationAssignment_1_0; }
		
		//[PatternDeclarationUse]
		public CrossReference getDeclarationPatternDeclarationUseCrossReference_1_0_0() { return cDeclarationPatternDeclarationUseCrossReference_1_0_0; }
		
		//ID
		public RuleCall getDeclarationPatternDeclarationUseIDTerminalRuleCall_1_0_0_1() { return cDeclarationPatternDeclarationUseIDTerminalRuleCall_1_0_0_1; }
		
		//('[' {ArrayAccessPattern.source=current} index=Expression ']' | '.' {RecordAccessPattern.source=current}
		//field=[RecordFieldDeclaration])*
		public Alternatives getAlternatives_1_1() { return cAlternatives_1_1; }
		
		//'[' {ArrayAccessPattern.source=current} index=Expression ']'
		public Group getGroup_1_1_0() { return cGroup_1_1_0; }
		
		//'['
		public Keyword getLeftSquareBracketKeyword_1_1_0_0() { return cLeftSquareBracketKeyword_1_1_0_0; }
		
		//{ArrayAccessPattern.source=current}
		public Action getArrayAccessPatternSourceAction_1_1_0_1() { return cArrayAccessPatternSourceAction_1_1_0_1; }
		
		//index=Expression
		public Assignment getIndexAssignment_1_1_0_2() { return cIndexAssignment_1_1_0_2; }
		
		//Expression
		public RuleCall getIndexExpressionParserRuleCall_1_1_0_2_0() { return cIndexExpressionParserRuleCall_1_1_0_2_0; }
		
		//']'
		public Keyword getRightSquareBracketKeyword_1_1_0_3() { return cRightSquareBracketKeyword_1_1_0_3; }
		
		//'.' {RecordAccessPattern.source=current} field=[RecordFieldDeclaration]
		public Group getGroup_1_1_1() { return cGroup_1_1_1; }
		
		//'.'
		public Keyword getFullStopKeyword_1_1_1_0() { return cFullStopKeyword_1_1_1_0; }
		
		//{RecordAccessPattern.source=current}
		public Action getRecordAccessPatternSourceAction_1_1_1_1() { return cRecordAccessPatternSourceAction_1_1_1_1; }
		
		//field=[RecordFieldDeclaration]
		public Assignment getFieldAssignment_1_1_1_2() { return cFieldAssignment_1_1_1_2; }
		
		//[RecordFieldDeclaration]
		public CrossReference getFieldRecordFieldDeclarationCrossReference_1_1_1_2_0() { return cFieldRecordFieldDeclarationCrossReference_1_1_1_2_0; }
		
		//ID
		public RuleCall getFieldRecordFieldDeclarationIDTerminalRuleCall_1_1_1_2_0_1() { return cFieldRecordFieldDeclarationIDTerminalRuleCall_1_1_1_2_0_1; }
	}
	public class ConditionalStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ConditionalStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cIfKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
		private final Keyword cThenKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cThenAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cThenStatementSequenceParserRuleCall_3_0 = (RuleCall)cThenAssignment_3.eContents().get(0);
		private final Assignment cElseifAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cElseifExtendedConditionalStatementParserRuleCall_4_0 = (RuleCall)cElseifAssignment_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 cElseAssignment_5_1 = (Assignment)cGroup_5.eContents().get(1);
		private final RuleCall cElseStatementSequenceParserRuleCall_5_1_0 = (RuleCall)cElseAssignment_5_1.eContents().get(0);
		private final Keyword cEndKeyword_6 = (Keyword)cGroup.eContents().get(6);
		private final Keyword cIfKeyword_7 = (Keyword)cGroup.eContents().get(7);
		
		//ConditionalStatement:
		//	'if' condition=Expression
		//	'then' then=StatementSequence elseif+=ExtendedConditionalStatement* ('else' else=StatementSequence)? 'end' 'if'?;
		@Override public ParserRule getRule() { return rule; }
		
		//'if' condition=Expression 'then' then=StatementSequence elseif+=ExtendedConditionalStatement* ('else'
		//else=StatementSequence)? 'end' 'if'?
		public Group getGroup() { return cGroup; }
		
		//'if'
		public Keyword getIfKeyword_0() { return cIfKeyword_0; }
		
		//condition=Expression
		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
		
		//Expression
		public RuleCall getConditionExpressionParserRuleCall_1_0() { return cConditionExpressionParserRuleCall_1_0; }
		
		//'then'
		public Keyword getThenKeyword_2() { return cThenKeyword_2; }
		
		//then=StatementSequence
		public Assignment getThenAssignment_3() { return cThenAssignment_3; }
		
		//StatementSequence
		public RuleCall getThenStatementSequenceParserRuleCall_3_0() { return cThenStatementSequenceParserRuleCall_3_0; }
		
		//elseif+=ExtendedConditionalStatement*
		public Assignment getElseifAssignment_4() { return cElseifAssignment_4; }
		
		//ExtendedConditionalStatement
		public RuleCall getElseifExtendedConditionalStatementParserRuleCall_4_0() { return cElseifExtendedConditionalStatementParserRuleCall_4_0; }
		
		//('else' else=StatementSequence)?
		public Group getGroup_5() { return cGroup_5; }
		
		//'else'
		public Keyword getElseKeyword_5_0() { return cElseKeyword_5_0; }
		
		//else=StatementSequence
		public Assignment getElseAssignment_5_1() { return cElseAssignment_5_1; }
		
		//StatementSequence
		public RuleCall getElseStatementSequenceParserRuleCall_5_1_0() { return cElseStatementSequenceParserRuleCall_5_1_0; }
		
		//'end'
		public Keyword getEndKeyword_6() { return cEndKeyword_6; }
		
		//'if'?
		public Keyword getIfKeyword_7() { return cIfKeyword_7; }
	}
	public class ExtendedConditionalStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ExtendedConditionalStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cElsifKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
		private final Keyword cThenKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cThenAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cThenStatementSequenceParserRuleCall_3_0 = (RuleCall)cThenAssignment_3.eContents().get(0);
		
		//ExtendedConditionalStatement:
		//	'elsif' condition=Expression 'then' then=StatementSequence;
		@Override public ParserRule getRule() { return rule; }
		
		//'elsif' condition=Expression 'then' then=StatementSequence
		public Group getGroup() { return cGroup; }
		
		//'elsif'
		public Keyword getElsifKeyword_0() { return cElsifKeyword_0; }
		
		//condition=Expression
		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
		
		//Expression
		public RuleCall getConditionExpressionParserRuleCall_1_0() { return cConditionExpressionParserRuleCall_1_0; }
		
		//'then'
		public Keyword getThenKeyword_2() { return cThenKeyword_2; }
		
		//then=StatementSequence
		public Assignment getThenAssignment_3() { return cThenAssignment_3; }
		
		//StatementSequence
		public RuleCall getThenStatementSequenceParserRuleCall_3_0() { return cThenStatementSequenceParserRuleCall_3_0; }
	}
	public class SelectStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.SelectStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cSelectKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cBodyAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cBodyUnlessStatementParserRuleCall_1_0 = (RuleCall)cBodyAssignment_1.eContents().get(0);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cVerticalLineKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cIndexAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cIndexVariableDeclarationParserRuleCall_2_1_0 = (RuleCall)cIndexAssignment_2_1.eContents().get(0);
		private final Keyword cInKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
		private final Assignment cTypeAssignment_2_3 = (Assignment)cGroup_2.eContents().get(3);
		private final RuleCall cTypeRangeTypeParserRuleCall_2_3_0 = (RuleCall)cTypeAssignment_2_3.eContents().get(0);
		private final Keyword cEndKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Keyword cSelectKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		//SelectStatement:
		//	'select'
		//	body=UnlessStatement ('|' index=VariableDeclaration 'in' type=RangeType)?
		//	'end' 'select'?;
		@Override public ParserRule getRule() { return rule; }
		
		//'select' body=UnlessStatement ('|' index=VariableDeclaration 'in' type=RangeType)? 'end' 'select'?
		public Group getGroup() { return cGroup; }
		
		//'select'
		public Keyword getSelectKeyword_0() { return cSelectKeyword_0; }
		
		//body=UnlessStatement
		public Assignment getBodyAssignment_1() { return cBodyAssignment_1; }
		
		//UnlessStatement
		public RuleCall getBodyUnlessStatementParserRuleCall_1_0() { return cBodyUnlessStatementParserRuleCall_1_0; }
		
		//('|' index=VariableDeclaration 'in' type=RangeType)?
		public Group getGroup_2() { return cGroup_2; }
		
		//'|'
		public Keyword getVerticalLineKeyword_2_0() { return cVerticalLineKeyword_2_0; }
		
		//index=VariableDeclaration
		public Assignment getIndexAssignment_2_1() { return cIndexAssignment_2_1; }
		
		//VariableDeclaration
		public RuleCall getIndexVariableDeclarationParserRuleCall_2_1_0() { return cIndexVariableDeclarationParserRuleCall_2_1_0; }
		
		//'in'
		public Keyword getInKeyword_2_2() { return cInKeyword_2_2; }
		
		//type=RangeType
		public Assignment getTypeAssignment_2_3() { return cTypeAssignment_2_3; }
		
		//RangeType
		public RuleCall getTypeRangeTypeParserRuleCall_2_3_0() { return cTypeRangeTypeParserRuleCall_2_3_0; }
		
		//'end'
		public Keyword getEndKeyword_3() { return cEndKeyword_3; }
		
		//'select'?
		public Keyword getSelectKeyword_4() { return cSelectKeyword_4; }
	}
	public class WhileStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.WhileStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cWhileKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
		private final Keyword cDoKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cBodyAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cBodyStatementSequenceParserRuleCall_3_0 = (RuleCall)cBodyAssignment_3.eContents().get(0);
		private final Keyword cEndKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Keyword cWhileKeyword_5 = (Keyword)cGroup.eContents().get(5);
		
		//WhileStatement:
		//	'while' condition=Expression 'do' body=StatementSequence 'end' 'while'?;
		@Override public ParserRule getRule() { return rule; }
		
		//'while' condition=Expression 'do' body=StatementSequence 'end' 'while'?
		public Group getGroup() { return cGroup; }
		
		//'while'
		public Keyword getWhileKeyword_0() { return cWhileKeyword_0; }
		
		//condition=Expression
		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
		
		//Expression
		public RuleCall getConditionExpressionParserRuleCall_1_0() { return cConditionExpressionParserRuleCall_1_0; }
		
		//'do'
		public Keyword getDoKeyword_2() { return cDoKeyword_2; }
		
		//body=StatementSequence
		public Assignment getBodyAssignment_3() { return cBodyAssignment_3; }
		
		//StatementSequence
		public RuleCall getBodyStatementSequenceParserRuleCall_3_0() { return cBodyStatementSequenceParserRuleCall_3_0; }
		
		//'end'
		public Keyword getEndKeyword_4() { return cEndKeyword_4; }
		
		//'while'?
		public Keyword getWhileKeyword_5() { return cWhileKeyword_5; }
	}
	public class ForeachStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ForeachStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cForeachKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cVariableAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cVariableVariableDeclarationParserRuleCall_1_0 = (RuleCall)cVariableAssignment_1.eContents().get(0);
		private final Keyword cDoKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cBodyAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cBodyStatementSequenceParserRuleCall_3_0 = (RuleCall)cBodyAssignment_3.eContents().get(0);
		private final Keyword cEndKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Keyword cForeachKeyword_5 = (Keyword)cGroup.eContents().get(5);
		
		//ForeachStatement:
		//	'foreach' variable=VariableDeclaration 'do' body=StatementSequence 'end' 'foreach'?;
		@Override public ParserRule getRule() { return rule; }
		
		//'foreach' variable=VariableDeclaration 'do' body=StatementSequence 'end' 'foreach'?
		public Group getGroup() { return cGroup; }
		
		//'foreach'
		public Keyword getForeachKeyword_0() { return cForeachKeyword_0; }
		
		//variable=VariableDeclaration
		public Assignment getVariableAssignment_1() { return cVariableAssignment_1; }
		
		//VariableDeclaration
		public RuleCall getVariableVariableDeclarationParserRuleCall_1_0() { return cVariableVariableDeclarationParserRuleCall_1_0; }
		
		//'do'
		public Keyword getDoKeyword_2() { return cDoKeyword_2; }
		
		//body=StatementSequence
		public Assignment getBodyAssignment_3() { return cBodyAssignment_3; }
		
		//StatementSequence
		public RuleCall getBodyStatementSequenceParserRuleCall_3_0() { return cBodyStatementSequenceParserRuleCall_3_0; }
		
		//'end'
		public Keyword getEndKeyword_4() { return cEndKeyword_4; }
		
		//'foreach'?
		public Keyword getForeachKeyword_5() { return cForeachKeyword_5; }
	}
	public class ToStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ToStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cToKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cStateAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final CrossReference cStateStateDeclarationCrossReference_1_0 = (CrossReference)cStateAssignment_1.eContents().get(0);
		private final RuleCall cStateStateDeclarationIDTerminalRuleCall_1_0_1 = (RuleCall)cStateStateDeclarationCrossReference_1_0.eContents().get(1);
		
		//ToStatement:
		//	'to' state=[StateDeclaration];
		@Override public ParserRule getRule() { return rule; }
		
		//'to' state=[StateDeclaration]
		public Group getGroup() { return cGroup; }
		
		//'to'
		public Keyword getToKeyword_0() { return cToKeyword_0; }
		
		//state=[StateDeclaration]
		public Assignment getStateAssignment_1() { return cStateAssignment_1; }
		
		//[StateDeclaration]
		public CrossReference getStateStateDeclarationCrossReference_1_0() { return cStateStateDeclarationCrossReference_1_0; }
		
		//ID
		public RuleCall getStateStateDeclarationIDTerminalRuleCall_1_0_1() { return cStateStateDeclarationIDTerminalRuleCall_1_0_1; }
	}
	public class CaseStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.CaseStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cCaseKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cValueAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cValueExpressionParserRuleCall_1_0 = (RuleCall)cValueAssignment_1.eContents().get(0);
		private final Keyword cOfKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cPatternAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cPatternPatternParserRuleCall_3_0 = (RuleCall)cPatternAssignment_3.eContents().get(0);
		private final Keyword cHyphenMinusGreaterThanSignKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Assignment cBodyAssignment_5 = (Assignment)cGroup.eContents().get(5);
		private final RuleCall cBodyStatementSequenceParserRuleCall_5_0 = (RuleCall)cBodyAssignment_5.eContents().get(0);
		private final Group cGroup_6 = (Group)cGroup.eContents().get(6);
		private final Keyword cVerticalLineKeyword_6_0 = (Keyword)cGroup_6.eContents().get(0);
		private final Assignment cPatternAssignment_6_1 = (Assignment)cGroup_6.eContents().get(1);
		private final RuleCall cPatternPatternParserRuleCall_6_1_0 = (RuleCall)cPatternAssignment_6_1.eContents().get(0);
		private final Keyword cHyphenMinusGreaterThanSignKeyword_6_2 = (Keyword)cGroup_6.eContents().get(2);
		private final Assignment cBodyAssignment_6_3 = (Assignment)cGroup_6.eContents().get(3);
		private final RuleCall cBodyStatementSequenceParserRuleCall_6_3_0 = (RuleCall)cBodyAssignment_6_3.eContents().get(0);
		private final Keyword cEndKeyword_7 = (Keyword)cGroup.eContents().get(7);
		private final Keyword cCaseKeyword_8 = (Keyword)cGroup.eContents().get(8);
		
		//CaseStatement:
		//	'case' value=Expression 'of'
		//	pattern+=Pattern '->' body+=StatementSequence ('|' pattern+=Pattern '->' body+=StatementSequence)*
		//	'end' 'case'?;
		@Override public ParserRule getRule() { return rule; }
		
		//'case' value=Expression 'of' pattern+=Pattern '->' body+=StatementSequence ('|' pattern+=Pattern '->'
		//body+=StatementSequence)* 'end' 'case'?
		public Group getGroup() { return cGroup; }
		
		//'case'
		public Keyword getCaseKeyword_0() { return cCaseKeyword_0; }
		
		//value=Expression
		public Assignment getValueAssignment_1() { return cValueAssignment_1; }
		
		//Expression
		public RuleCall getValueExpressionParserRuleCall_1_0() { return cValueExpressionParserRuleCall_1_0; }
		
		//'of'
		public Keyword getOfKeyword_2() { return cOfKeyword_2; }
		
		//pattern+=Pattern
		public Assignment getPatternAssignment_3() { return cPatternAssignment_3; }
		
		//Pattern
		public RuleCall getPatternPatternParserRuleCall_3_0() { return cPatternPatternParserRuleCall_3_0; }
		
		//'->'
		public Keyword getHyphenMinusGreaterThanSignKeyword_4() { return cHyphenMinusGreaterThanSignKeyword_4; }
		
		//body+=StatementSequence
		public Assignment getBodyAssignment_5() { return cBodyAssignment_5; }
		
		//StatementSequence
		public RuleCall getBodyStatementSequenceParserRuleCall_5_0() { return cBodyStatementSequenceParserRuleCall_5_0; }
		
		//('|' pattern+=Pattern '->' body+=StatementSequence)*
		public Group getGroup_6() { return cGroup_6; }
		
		//'|'
		public Keyword getVerticalLineKeyword_6_0() { return cVerticalLineKeyword_6_0; }
		
		//pattern+=Pattern
		public Assignment getPatternAssignment_6_1() { return cPatternAssignment_6_1; }
		
		//Pattern
		public RuleCall getPatternPatternParserRuleCall_6_1_0() { return cPatternPatternParserRuleCall_6_1_0; }
		
		//'->'
		public Keyword getHyphenMinusGreaterThanSignKeyword_6_2() { return cHyphenMinusGreaterThanSignKeyword_6_2; }
		
		//body+=StatementSequence
		public Assignment getBodyAssignment_6_3() { return cBodyAssignment_6_3; }
		
		//StatementSequence
		public RuleCall getBodyStatementSequenceParserRuleCall_6_3_0() { return cBodyStatementSequenceParserRuleCall_6_3_0; }
		
		//'end'
		public Keyword getEndKeyword_7() { return cEndKeyword_7; }
		
		//'case'?
		public Keyword getCaseKeyword_8() { return cCaseKeyword_8; }
	}
	public class LoopStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.LoopStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cLoopStatementAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cLoopKeyword_1 = (Keyword)cGroup.eContents().get(1);
		
		//LoopStatement:
		//	{LoopStatement} 'loop';
		@Override public ParserRule getRule() { return rule; }
		
		//{LoopStatement} 'loop'
		public Group getGroup() { return cGroup; }
		
		//{LoopStatement}
		public Action getLoopStatementAction_0() { return cLoopStatementAction_0; }
		
		//'loop'
		public Keyword getLoopKeyword_1() { return cLoopKeyword_1; }
	}
	public class OnStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.OnStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cOnKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
		
		//OnStatement:
		//	'on' condition=Expression;
		@Override public ParserRule getRule() { return rule; }
		
		//'on' condition=Expression
		public Group getGroup() { return cGroup; }
		
		//'on'
		public Keyword getOnKeyword_0() { return cOnKeyword_0; }
		
		//condition=Expression
		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
		
		//Expression
		public RuleCall getConditionExpressionParserRuleCall_1_0() { return cConditionExpressionParserRuleCall_1_0; }
	}
	public class WaitStatementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.WaitStatement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cWaitKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cLeftAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cLeftLowerBoundParserRuleCall_1_0 = (RuleCall)cLeftAssignment_1.eContents().get(0);
		private final Keyword cCommaKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cRightAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cRightUpperBoundParserRuleCall_3_0 = (RuleCall)cRightAssignment_3.eContents().get(0);
		
		//WaitStatement:
		//	'wait' left=LowerBound ',' right=UpperBound;
		@Override public ParserRule getRule() { return rule; }
		
		//'wait' left=LowerBound ',' right=UpperBound
		public Group getGroup() { return cGroup; }
		
		//'wait'
		public Keyword getWaitKeyword_0() { return cWaitKeyword_0; }
		
		//left=LowerBound
		public Assignment getLeftAssignment_1() { return cLeftAssignment_1; }
		
		//LowerBound
		public RuleCall getLeftLowerBoundParserRuleCall_1_0() { return cLeftLowerBoundParserRuleCall_1_0; }
		
		//','
		public Keyword getCommaKeyword_2() { return cCommaKeyword_2; }
		
		//right=UpperBound
		public Assignment getRightAssignment_3() { return cRightAssignment_3; }
		
		//UpperBound
		public RuleCall getRightUpperBoundParserRuleCall_3_0() { return cRightUpperBoundParserRuleCall_3_0; }
	}
	public class CompositionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Composition");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cParKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Assignment cGlobalAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
		private final RuleCall cGlobalPortSetParserRuleCall_1_0_0 = (RuleCall)cGlobalAssignment_1_0.eContents().get(0);
		private final Keyword cInKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cBlocksAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cBlocksBlockParserRuleCall_2_0 = (RuleCall)cBlocksAssignment_2.eContents().get(0);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Keyword cVerticalLineVerticalLineKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final Assignment cBlocksAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
		private final RuleCall cBlocksBlockParserRuleCall_3_1_0 = (RuleCall)cBlocksAssignment_3_1.eContents().get(0);
		private final Keyword cEndKeyword_4 = (Keyword)cGroup.eContents().get(4);
		private final Keyword cParKeyword_5 = (Keyword)cGroup.eContents().get(5);
		
		//Composition: // added ?
		//	'par' (global=PortSet 'in')? blocks+=Block ('||' blocks+=Block)* //('|' index=VariableDeclaration 'in' type=RangeType)?
		//	'end' 'par'?;
		@Override public ParserRule getRule() { return rule; }
		
		//// added ?
		//'par' (global=PortSet 'in')? blocks+=Block ('||' blocks+=Block)* //('|' index=VariableDeclaration 'in' type=RangeType)?
		//'end' 'par'?
		public Group getGroup() { return cGroup; }
		
		//// added ?
		//'par'
		public Keyword getParKeyword_0() { return cParKeyword_0; }
		
		//(global=PortSet 'in')?
		public Group getGroup_1() { return cGroup_1; }
		
		//global=PortSet
		public Assignment getGlobalAssignment_1_0() { return cGlobalAssignment_1_0; }
		
		//PortSet
		public RuleCall getGlobalPortSetParserRuleCall_1_0_0() { return cGlobalPortSetParserRuleCall_1_0_0; }
		
		//'in'
		public Keyword getInKeyword_1_1() { return cInKeyword_1_1; }
		
		//blocks+=Block
		public Assignment getBlocksAssignment_2() { return cBlocksAssignment_2; }
		
		//Block
		public RuleCall getBlocksBlockParserRuleCall_2_0() { return cBlocksBlockParserRuleCall_2_0; }
		
		//('||' blocks+=Block)*
		public Group getGroup_3() { return cGroup_3; }
		
		//'||'
		public Keyword getVerticalLineVerticalLineKeyword_3_0() { return cVerticalLineVerticalLineKeyword_3_0; }
		
		//blocks+=Block
		public Assignment getBlocksAssignment_3_1() { return cBlocksAssignment_3_1; }
		
		//Block
		public RuleCall getBlocksBlockParserRuleCall_3_1_0() { return cBlocksBlockParserRuleCall_3_1_0; }
		
		////('|' index=VariableDeclaration 'in' type=RangeType)?
		//'end'
		public Keyword getEndKeyword_4() { return cEndKeyword_4; }
		
		//'par'?
		public Keyword getParKeyword_5() { return cParKeyword_5; }
	}
	public class BlockElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Block");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cCompositeBlockParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cInstanceDeclarationParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//Block:
		//	CompositeBlock | InstanceDeclaration;
		@Override public ParserRule getRule() { return rule; }
		
		//CompositeBlock | InstanceDeclaration
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//CompositeBlock
		public RuleCall getCompositeBlockParserRuleCall_0() { return cCompositeBlockParserRuleCall_0; }
		
		//InstanceDeclaration
		public RuleCall getInstanceDeclarationParserRuleCall_1() { return cInstanceDeclarationParserRuleCall_1; }
	}
	public class CompositeBlockElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.CompositeBlock");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
		private final Group cGroup_0_0 = (Group)cAlternatives_0.eContents().get(0);
		private final Assignment cLocalAssignment_0_0_0 = (Assignment)cGroup_0_0.eContents().get(0);
		private final RuleCall cLocalPortSetParserRuleCall_0_0_0_0 = (RuleCall)cLocalAssignment_0_0_0.eContents().get(0);
		private final Keyword cHyphenMinusGreaterThanSignKeyword_0_0_1 = (Keyword)cGroup_0_0.eContents().get(1);
		private final Keyword cHyphenMinusGreaterThanSignKeyword_0_1 = (Keyword)cAlternatives_0.eContents().get(1);
		private final Assignment cCompositionAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cCompositionCompositionParserRuleCall_1_0 = (RuleCall)cCompositionAssignment_1.eContents().get(0);
		
		//CompositeBlock:
		//	(local=PortSet '->' | '->')? composition=Composition;
		@Override public ParserRule getRule() { return rule; }
		
		//(local=PortSet '->' | '->')? composition=Composition
		public Group getGroup() { return cGroup; }
		
		//(local=PortSet '->' | '->')?
		public Alternatives getAlternatives_0() { return cAlternatives_0; }
		
		//local=PortSet '->'
		public Group getGroup_0_0() { return cGroup_0_0; }
		
		//local=PortSet
		public Assignment getLocalAssignment_0_0_0() { return cLocalAssignment_0_0_0; }
		
		//PortSet
		public RuleCall getLocalPortSetParserRuleCall_0_0_0_0() { return cLocalPortSetParserRuleCall_0_0_0_0; }
		
		//'->'
		public Keyword getHyphenMinusGreaterThanSignKeyword_0_0_1() { return cHyphenMinusGreaterThanSignKeyword_0_0_1; }
		
		//'->'
		public Keyword getHyphenMinusGreaterThanSignKeyword_0_1() { return cHyphenMinusGreaterThanSignKeyword_0_1; }
		
		//composition=Composition
		public Assignment getCompositionAssignment_1() { return cCompositionAssignment_1; }
		
		//Composition
		public RuleCall getCompositionCompositionParserRuleCall_1_0() { return cCompositionCompositionParserRuleCall_1_0; }
	}
	public class InstanceDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.InstanceDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
		private final Group cGroup_0_0 = (Group)cAlternatives_0.eContents().get(0);
		private final Assignment cLocalAssignment_0_0_0 = (Assignment)cGroup_0_0.eContents().get(0);
		private final RuleCall cLocalPortSetParserRuleCall_0_0_0_0 = (RuleCall)cLocalAssignment_0_0_0.eContents().get(0);
		private final Keyword cHyphenMinusGreaterThanSignKeyword_0_0_1 = (Keyword)cGroup_0_0.eContents().get(1);
		private final Keyword cHyphenMinusGreaterThanSignKeyword_0_1 = (Keyword)cAlternatives_0.eContents().get(1);
		private final Assignment cInstanceAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cInstanceComponentInstanceParserRuleCall_1_0 = (RuleCall)cInstanceAssignment_1.eContents().get(0);
		
		//InstanceDeclaration:
		//	(local=PortSet '->' | '->')? instance=ComponentInstance;
		@Override public ParserRule getRule() { return rule; }
		
		//(local=PortSet '->' | '->')? instance=ComponentInstance
		public Group getGroup() { return cGroup; }
		
		//(local=PortSet '->' | '->')?
		public Alternatives getAlternatives_0() { return cAlternatives_0; }
		
		//local=PortSet '->'
		public Group getGroup_0_0() { return cGroup_0_0; }
		
		//local=PortSet
		public Assignment getLocalAssignment_0_0_0() { return cLocalAssignment_0_0_0; }
		
		//PortSet
		public RuleCall getLocalPortSetParserRuleCall_0_0_0_0() { return cLocalPortSetParserRuleCall_0_0_0_0; }
		
		//'->'
		public Keyword getHyphenMinusGreaterThanSignKeyword_0_0_1() { return cHyphenMinusGreaterThanSignKeyword_0_0_1; }
		
		//'->'
		public Keyword getHyphenMinusGreaterThanSignKeyword_0_1() { return cHyphenMinusGreaterThanSignKeyword_0_1; }
		
		//instance=ComponentInstance
		public Assignment getInstanceAssignment_1() { return cInstanceAssignment_1; }
		
		//ComponentInstance
		public RuleCall getInstanceComponentInstanceParserRuleCall_1_0() { return cInstanceComponentInstanceParserRuleCall_1_0; }
	}
	public class PortSetElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PortSet");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Assignment cAllPortsAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
		private final Keyword cAllPortsAsteriskKeyword_0_0 = (Keyword)cAllPortsAssignment_0.eContents().get(0);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Assignment cPortsAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
		private final RuleCall cPortsExpressionParserRuleCall_1_0_0 = (RuleCall)cPortsAssignment_1_0.eContents().get(0);
		private final Group cGroup_1_1 = (Group)cGroup_1.eContents().get(1);
		private final Keyword cCommaKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
		private final Assignment cPortsAssignment_1_1_1 = (Assignment)cGroup_1_1.eContents().get(1);
		private final RuleCall cPortsExpressionParserRuleCall_1_1_1_0 = (RuleCall)cPortsAssignment_1_1_1.eContents().get(0);
		
		//PortSet:
		//	allPorts?='*'
		//	| ports+=Expression (',' ports+=Expression)*;
		@Override public ParserRule getRule() { return rule; }
		
		//allPorts?='*' | ports+=Expression (',' ports+=Expression)*
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//allPorts?='*'
		public Assignment getAllPortsAssignment_0() { return cAllPortsAssignment_0; }
		
		//'*'
		public Keyword getAllPortsAsteriskKeyword_0_0() { return cAllPortsAsteriskKeyword_0_0; }
		
		//ports+=Expression (',' ports+=Expression)*
		public Group getGroup_1() { return cGroup_1; }
		
		//ports+=Expression
		public Assignment getPortsAssignment_1_0() { return cPortsAssignment_1_0; }
		
		//Expression
		public RuleCall getPortsExpressionParserRuleCall_1_0_0() { return cPortsExpressionParserRuleCall_1_0_0; }
		
		//(',' ports+=Expression)*
		public Group getGroup_1_1() { return cGroup_1_1; }
		
		//','
		public Keyword getCommaKeyword_1_1_0() { return cCommaKeyword_1_1_0; }
		
		//ports+=Expression
		public Assignment getPortsAssignment_1_1_1() { return cPortsAssignment_1_1_1; }
		
		//Expression
		public RuleCall getPortsExpressionParserRuleCall_1_1_1_0() { return cPortsExpressionParserRuleCall_1_1_1_0; }
	}
	public class ComponentInstanceElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ComponentInstance");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cComponentAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final CrossReference cComponentParameterizedDeclarationCrossReference_0_0 = (CrossReference)cComponentAssignment_0.eContents().get(0);
		private final RuleCall cComponentParameterizedDeclarationIDTerminalRuleCall_0_0_1 = (RuleCall)cComponentParameterizedDeclarationCrossReference_0_0.eContents().get(1);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cLeftSquareBracketKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Assignment cPortsAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cPortsExpressionParserRuleCall_1_1_0 = (RuleCall)cPortsAssignment_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 cPortsAssignment_1_2_1 = (Assignment)cGroup_1_2.eContents().get(1);
		private final RuleCall cPortsExpressionParserRuleCall_1_2_1_0 = (RuleCall)cPortsAssignment_1_2_1.eContents().get(0);
		private final Keyword cRightSquareBracketKeyword_1_3 = (Keyword)cGroup_1.eContents().get(3);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cLeftParenthesisKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cParametersAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cParametersExpressionParserRuleCall_2_1_0 = (RuleCall)cParametersAssignment_2_1.eContents().get(0);
		private final Group cGroup_2_2 = (Group)cGroup_2.eContents().get(2);
		private final Keyword cCommaKeyword_2_2_0 = (Keyword)cGroup_2_2.eContents().get(0);
		private final Assignment cParametersAssignment_2_2_1 = (Assignment)cGroup_2_2.eContents().get(1);
		private final RuleCall cParametersExpressionParserRuleCall_2_2_1_0 = (RuleCall)cParametersAssignment_2_2_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_2_3 = (Keyword)cGroup_2.eContents().get(3);
		
		//ComponentInstance:
		//	component=[ParameterizedDeclaration] ('[' ports+=Expression (',' ports+=Expression)* ']')? ('(' parameters+=Expression
		//	(',' parameters+=Expression)* ')')?;
		@Override public ParserRule getRule() { return rule; }
		
		//component=[ParameterizedDeclaration] ('[' ports+=Expression (',' ports+=Expression)* ']')? ('(' parameters+=Expression
		//(',' parameters+=Expression)* ')')?
		public Group getGroup() { return cGroup; }
		
		//component=[ParameterizedDeclaration]
		public Assignment getComponentAssignment_0() { return cComponentAssignment_0; }
		
		//[ParameterizedDeclaration]
		public CrossReference getComponentParameterizedDeclarationCrossReference_0_0() { return cComponentParameterizedDeclarationCrossReference_0_0; }
		
		//ID
		public RuleCall getComponentParameterizedDeclarationIDTerminalRuleCall_0_0_1() { return cComponentParameterizedDeclarationIDTerminalRuleCall_0_0_1; }
		
		//('[' ports+=Expression (',' ports+=Expression)* ']')?
		public Group getGroup_1() { return cGroup_1; }
		
		//'['
		public Keyword getLeftSquareBracketKeyword_1_0() { return cLeftSquareBracketKeyword_1_0; }
		
		//ports+=Expression
		public Assignment getPortsAssignment_1_1() { return cPortsAssignment_1_1; }
		
		//Expression
		public RuleCall getPortsExpressionParserRuleCall_1_1_0() { return cPortsExpressionParserRuleCall_1_1_0; }
		
		//(',' ports+=Expression)*
		public Group getGroup_1_2() { return cGroup_1_2; }
		
		//','
		public Keyword getCommaKeyword_1_2_0() { return cCommaKeyword_1_2_0; }
		
		//ports+=Expression
		public Assignment getPortsAssignment_1_2_1() { return cPortsAssignment_1_2_1; }
		
		//Expression
		public RuleCall getPortsExpressionParserRuleCall_1_2_1_0() { return cPortsExpressionParserRuleCall_1_2_1_0; }
		
		//']'
		public Keyword getRightSquareBracketKeyword_1_3() { return cRightSquareBracketKeyword_1_3; }
		
		//('(' parameters+=Expression (',' parameters+=Expression)* ')')?
		public Group getGroup_2() { return cGroup_2; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_2_0() { return cLeftParenthesisKeyword_2_0; }
		
		//parameters+=Expression
		public Assignment getParametersAssignment_2_1() { return cParametersAssignment_2_1; }
		
		//Expression
		public RuleCall getParametersExpressionParserRuleCall_2_1_0() { return cParametersExpressionParserRuleCall_2_1_0; }
		
		//(',' parameters+=Expression)*
		public Group getGroup_2_2() { return cGroup_2_2; }
		
		//','
		public Keyword getCommaKeyword_2_2_0() { return cCommaKeyword_2_2_0; }
		
		//parameters+=Expression
		public Assignment getParametersAssignment_2_2_1() { return cParametersAssignment_2_2_1; }
		
		//Expression
		public RuleCall getParametersExpressionParserRuleCall_2_2_1_0() { return cParametersExpressionParserRuleCall_2_2_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_2_3() { return cRightParenthesisKeyword_2_3; }
	}
	public class ExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Expression");
		private final RuleCall cQuantifiedExpressionParserRuleCall = (RuleCall)rule.eContents().get(1);
		
		////GenericInstance:
		////	TypeInstance
		////	| ConstantInstance
		////	| UnionTagInstance
		////	| RecordFieldInstance
		////;
		////
		////TypeInstance:
		////	'type' type=Type
		////;
		////
		////ConstantInstance:
		////	'const' (const=[ConstantDeclarationUse] | value=LiteralExpression)
		////;
		////
		////UnionTagInstance:
		////	(constr0?='constr0' | constr1?='constr1') head=[UnionTagDeclarationUse]
		////;
		////
		////RecordFieldInstance:
		////	'field' field=[RecordFieldDeclarationUse]
		////;
		//Expression:
		//	QuantifiedExpression;
		@Override public ParserRule getRule() { return rule; }
		
		//QuantifiedExpression
		public RuleCall getQuantifiedExpressionParserRuleCall() { return cQuantifiedExpressionParserRuleCall; }
	}
	public class QuantifiedExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.QuantifiedExpression");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Alternatives cAlternatives_0_0 = (Alternatives)cGroup_0.eContents().get(0);
		private final Group cGroup_0_0_0 = (Group)cAlternatives_0_0.eContents().get(0);
		private final Action cAllExpressionAction_0_0_0_0 = (Action)cGroup_0_0_0.eContents().get(0);
		private final Keyword cAllKeyword_0_0_0_1 = (Keyword)cGroup_0_0_0.eContents().get(1);
		private final Group cGroup_0_0_1 = (Group)cAlternatives_0_0.eContents().get(1);
		private final Action cExistsExpressionAction_0_0_1_0 = (Action)cGroup_0_0_1.eContents().get(0);
		private final Keyword cExistsKeyword_0_0_1_1 = (Keyword)cGroup_0_0_1.eContents().get(1);
		private final Assignment cIndexAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
		private final RuleCall cIndexVariableDeclarationParserRuleCall_0_1_0 = (RuleCall)cIndexAssignment_0_1.eContents().get(0);
		private final Group cGroup_0_2 = (Group)cGroup_0.eContents().get(2);
		private final Keyword cInKeyword_0_2_0 = (Keyword)cGroup_0_2.eContents().get(0);
		private final Assignment cTypeAssignment_0_2_1 = (Assignment)cGroup_0_2.eContents().get(1);
		private final RuleCall cTypeRangeTypeParserRuleCall_0_2_1_0 = (RuleCall)cTypeAssignment_0_2_1.eContents().get(0);
		private final Keyword cFullStopKeyword_0_3 = (Keyword)cGroup_0.eContents().get(3);
		private final Assignment cChildAssignment_0_4 = (Assignment)cGroup_0.eContents().get(4);
		private final RuleCall cChildQuantifiedExpressionParserRuleCall_0_4_0 = (RuleCall)cChildAssignment_0_4.eContents().get(0);
		private final RuleCall cConditionalParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//QuantifiedExpression Expression:
		//	({AllExpression} 'all' | {ExistsExpression} 'exists') index=VariableDeclaration ('in' type=RangeType)? '.'
		//	child=QuantifiedExpression
		//	| Conditional
		@Override public ParserRule getRule() { return rule; }
		
		//({AllExpression} 'all' | {ExistsExpression} 'exists') index=VariableDeclaration ('in' type=RangeType)? '.'
		//child=QuantifiedExpression | Conditional
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//({AllExpression} 'all' | {ExistsExpression} 'exists') index=VariableDeclaration ('in' type=RangeType)? '.'
		//child=QuantifiedExpression
		public Group getGroup_0() { return cGroup_0; }
		
		//({AllExpression} 'all' | {ExistsExpression} 'exists')
		public Alternatives getAlternatives_0_0() { return cAlternatives_0_0; }
		
		//{AllExpression} 'all'
		public Group getGroup_0_0_0() { return cGroup_0_0_0; }
		
		//{AllExpression}
		public Action getAllExpressionAction_0_0_0_0() { return cAllExpressionAction_0_0_0_0; }
		
		//'all'
		public Keyword getAllKeyword_0_0_0_1() { return cAllKeyword_0_0_0_1; }
		
		//{ExistsExpression} 'exists'
		public Group getGroup_0_0_1() { return cGroup_0_0_1; }
		
		//{ExistsExpression}
		public Action getExistsExpressionAction_0_0_1_0() { return cExistsExpressionAction_0_0_1_0; }
		
		//'exists'
		public Keyword getExistsKeyword_0_0_1_1() { return cExistsKeyword_0_0_1_1; }
		
		//index=VariableDeclaration
		public Assignment getIndexAssignment_0_1() { return cIndexAssignment_0_1; }
		
		//VariableDeclaration
		public RuleCall getIndexVariableDeclarationParserRuleCall_0_1_0() { return cIndexVariableDeclarationParserRuleCall_0_1_0; }
		
		//('in' type=RangeType)?
		public Group getGroup_0_2() { return cGroup_0_2; }
		
		//'in'
		public Keyword getInKeyword_0_2_0() { return cInKeyword_0_2_0; }
		
		//type=RangeType
		public Assignment getTypeAssignment_0_2_1() { return cTypeAssignment_0_2_1; }
		
		//RangeType
		public RuleCall getTypeRangeTypeParserRuleCall_0_2_1_0() { return cTypeRangeTypeParserRuleCall_0_2_1_0; }
		
		//'.'
		public Keyword getFullStopKeyword_0_3() { return cFullStopKeyword_0_3; }
		
		//child=QuantifiedExpression
		public Assignment getChildAssignment_0_4() { return cChildAssignment_0_4; }
		
		//QuantifiedExpression
		public RuleCall getChildQuantifiedExpressionParserRuleCall_0_4_0() { return cChildQuantifiedExpressionParserRuleCall_0_4_0; }
		
		//Conditional
		public RuleCall getConditionalParserRuleCall_1() { return cConditionalParserRuleCall_1; }
	}
	public class ConditionalElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Conditional");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cDisjunctionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Keyword cQuestionMarkKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Action cConditionalConditionAction_1_1 = (Action)cGroup_1.eContents().get(1);
		private final Assignment cThenAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cThenDisjunctionParserRuleCall_1_2_0 = (RuleCall)cThenAssignment_1_2.eContents().get(0);
		private final Keyword cColonKeyword_1_3 = (Keyword)cGroup_1.eContents().get(3);
		private final Assignment cElseAssignment_1_4 = (Assignment)cGroup_1.eContents().get(4);
		private final RuleCall cElseDisjunctionParserRuleCall_1_4_0 = (RuleCall)cElseAssignment_1_4.eContents().get(0);
		
		//Conditional Expression:
		//	Disjunction ('?' {Conditional.condition=current} then=Disjunction ':' else=Disjunction)?
		@Override public ParserRule getRule() { return rule; }
		
		//Disjunction ('?' {Conditional.condition=current} then=Disjunction ':' else=Disjunction)?
		public Group getGroup() { return cGroup; }
		
		//Disjunction
		public RuleCall getDisjunctionParserRuleCall_0() { return cDisjunctionParserRuleCall_0; }
		
		//('?' {Conditional.condition=current} then=Disjunction ':' else=Disjunction)?
		public Group getGroup_1() { return cGroup_1; }
		
		//'?'
		public Keyword getQuestionMarkKeyword_1_0() { return cQuestionMarkKeyword_1_0; }
		
		//{Conditional.condition=current}
		public Action getConditionalConditionAction_1_1() { return cConditionalConditionAction_1_1; }
		
		//then=Disjunction
		public Assignment getThenAssignment_1_2() { return cThenAssignment_1_2; }
		
		//Disjunction
		public RuleCall getThenDisjunctionParserRuleCall_1_2_0() { return cThenDisjunctionParserRuleCall_1_2_0; }
		
		//':'
		public Keyword getColonKeyword_1_3() { return cColonKeyword_1_3; }
		
		//else=Disjunction
		public Assignment getElseAssignment_1_4() { return cElseAssignment_1_4; }
		
		//Disjunction
		public RuleCall getElseDisjunctionParserRuleCall_1_4_0() { return cElseDisjunctionParserRuleCall_1_4_0; }
	}
	public class DisjunctionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Disjunction");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cImplicationParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cDisjunctionLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cOrKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightImplicationParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//Disjunction Expression:
		//	Implication ({Disjunction.left=current} 'or' right=Implication)*
		@Override public ParserRule getRule() { return rule; }
		
		//Implication ({Disjunction.left=current} 'or' right=Implication)*
		public Group getGroup() { return cGroup; }
		
		//Implication
		public RuleCall getImplicationParserRuleCall_0() { return cImplicationParserRuleCall_0; }
		
		//({Disjunction.left=current} 'or' right=Implication)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{Disjunction.left=current}
		public Action getDisjunctionLeftAction_1_0() { return cDisjunctionLeftAction_1_0; }
		
		//'or'
		public Keyword getOrKeyword_1_1() { return cOrKeyword_1_1; }
		
		//right=Implication
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//Implication
		public RuleCall getRightImplicationParserRuleCall_1_2_0() { return cRightImplicationParserRuleCall_1_2_0; }
	}
	public class ImplicationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Implication");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cConjunctionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cImplicationLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cEqualsSignGreaterThanSignKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightImplicationParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//Implication Expression:
		//	Conjunction ({Implication.left=current} '=>' right=Implication)?
		@Override public ParserRule getRule() { return rule; }
		
		//Conjunction ({Implication.left=current} '=>' right=Implication)?
		public Group getGroup() { return cGroup; }
		
		//Conjunction
		public RuleCall getConjunctionParserRuleCall_0() { return cConjunctionParserRuleCall_0; }
		
		//({Implication.left=current} '=>' right=Implication)?
		public Group getGroup_1() { return cGroup_1; }
		
		//{Implication.left=current}
		public Action getImplicationLeftAction_1_0() { return cImplicationLeftAction_1_0; }
		
		//'=>'
		public Keyword getEqualsSignGreaterThanSignKeyword_1_1() { return cEqualsSignGreaterThanSignKeyword_1_1; }
		
		//right=Implication
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//Implication
		public RuleCall getRightImplicationParserRuleCall_1_2_0() { return cRightImplicationParserRuleCall_1_2_0; }
	}
	public class ConjunctionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Conjunction");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cComparisonParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cConjunctionLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cAndKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightComparisonParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//Conjunction Expression:
		//	Comparison ({Conjunction.left=current} 'and' right=Comparison)*
		@Override public ParserRule getRule() { return rule; }
		
		//Comparison ({Conjunction.left=current} 'and' right=Comparison)*
		public Group getGroup() { return cGroup; }
		
		//Comparison
		public RuleCall getComparisonParserRuleCall_0() { return cComparisonParserRuleCall_0; }
		
		//({Conjunction.left=current} 'and' right=Comparison)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{Conjunction.left=current}
		public Action getConjunctionLeftAction_1_0() { return cConjunctionLeftAction_1_0; }
		
		//'and'
		public Keyword getAndKeyword_1_1() { return cAndKeyword_1_1; }
		
		//right=Comparison
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//Comparison
		public RuleCall getRightComparisonParserRuleCall_1_2_0() { return cRightComparisonParserRuleCall_1_2_0; }
	}
	public class ComparisonElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Comparison");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cAdditionParserRuleCall_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 cComparisonEqualLeftAction_1_0_0_0 = (Action)cGroup_1_0_0.eContents().get(0);
		private final Keyword cEqualsSignKeyword_1_0_0_1 = (Keyword)cGroup_1_0_0.eContents().get(1);
		private final Group cGroup_1_0_1 = (Group)cAlternatives_1_0.eContents().get(1);
		private final Action cComparisonNotEqualLeftAction_1_0_1_0 = (Action)cGroup_1_0_1.eContents().get(0);
		private final Keyword cLessThanSignGreaterThanSignKeyword_1_0_1_1 = (Keyword)cGroup_1_0_1.eContents().get(1);
		private final Group cGroup_1_0_2 = (Group)cAlternatives_1_0.eContents().get(2);
		private final Action cComparisonLesserLeftAction_1_0_2_0 = (Action)cGroup_1_0_2.eContents().get(0);
		private final Keyword cLessThanSignKeyword_1_0_2_1 = (Keyword)cGroup_1_0_2.eContents().get(1);
		private final Group cGroup_1_0_3 = (Group)cAlternatives_1_0.eContents().get(3);
		private final Action cComparisonLesserEqualLeftAction_1_0_3_0 = (Action)cGroup_1_0_3.eContents().get(0);
		private final Keyword cLessThanSignEqualsSignKeyword_1_0_3_1 = (Keyword)cGroup_1_0_3.eContents().get(1);
		private final Group cGroup_1_0_4 = (Group)cAlternatives_1_0.eContents().get(4);
		private final Action cComparisonGreaterLeftAction_1_0_4_0 = (Action)cGroup_1_0_4.eContents().get(0);
		private final Keyword cGreaterThanSignKeyword_1_0_4_1 = (Keyword)cGroup_1_0_4.eContents().get(1);
		private final Group cGroup_1_0_5 = (Group)cAlternatives_1_0.eContents().get(5);
		private final Action cComparisonGreaterEqualLeftAction_1_0_5_0 = (Action)cGroup_1_0_5.eContents().get(0);
		private final Keyword cGreaterThanSignEqualsSignKeyword_1_0_5_1 = (Keyword)cGroup_1_0_5.eContents().get(1);
		private final Assignment cRightAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
		private final RuleCall cRightAdditionParserRuleCall_1_1_0 = (RuleCall)cRightAssignment_1_1.eContents().get(0);
		
		//Comparison Expression:
		//	Addition (({ComparisonEqual.left=current} '='
		//	| {ComparisonNotEqual.left=current} '<>'
		//	| {ComparisonLesser.left=current} '<'
		//	| {ComparisonLesserEqual.left=current} '<='
		//	| {ComparisonGreater.left=current} '>'
		//	| {ComparisonGreaterEqual.left=current} '>=') right=Addition)?
		@Override public ParserRule getRule() { return rule; }
		
		//Addition (({ComparisonEqual.left=current} '=' | {ComparisonNotEqual.left=current} '<>' | {ComparisonLesser.left=current}
		//'<' | {ComparisonLesserEqual.left=current} '<=' | {ComparisonGreater.left=current} '>' |
		//{ComparisonGreaterEqual.left=current} '>=') right=Addition)?
		public Group getGroup() { return cGroup; }
		
		//Addition
		public RuleCall getAdditionParserRuleCall_0() { return cAdditionParserRuleCall_0; }
		
		//(({ComparisonEqual.left=current} '=' | {ComparisonNotEqual.left=current} '<>' | {ComparisonLesser.left=current} '<' |
		//{ComparisonLesserEqual.left=current} '<=' | {ComparisonGreater.left=current} '>' |
		//{ComparisonGreaterEqual.left=current} '>=') right=Addition)?
		public Group getGroup_1() { return cGroup_1; }
		
		//({ComparisonEqual.left=current} '=' | {ComparisonNotEqual.left=current} '<>' | {ComparisonLesser.left=current} '<' |
		//{ComparisonLesserEqual.left=current} '<=' | {ComparisonGreater.left=current} '>' |
		//{ComparisonGreaterEqual.left=current} '>=')
		public Alternatives getAlternatives_1_0() { return cAlternatives_1_0; }
		
		//{ComparisonEqual.left=current} '='
		public Group getGroup_1_0_0() { return cGroup_1_0_0; }
		
		//{ComparisonEqual.left=current}
		public Action getComparisonEqualLeftAction_1_0_0_0() { return cComparisonEqualLeftAction_1_0_0_0; }
		
		//'='
		public Keyword getEqualsSignKeyword_1_0_0_1() { return cEqualsSignKeyword_1_0_0_1; }
		
		//{ComparisonNotEqual.left=current} '<>'
		public Group getGroup_1_0_1() { return cGroup_1_0_1; }
		
		//{ComparisonNotEqual.left=current}
		public Action getComparisonNotEqualLeftAction_1_0_1_0() { return cComparisonNotEqualLeftAction_1_0_1_0; }
		
		//'<>'
		public Keyword getLessThanSignGreaterThanSignKeyword_1_0_1_1() { return cLessThanSignGreaterThanSignKeyword_1_0_1_1; }
		
		//{ComparisonLesser.left=current} '<'
		public Group getGroup_1_0_2() { return cGroup_1_0_2; }
		
		//{ComparisonLesser.left=current}
		public Action getComparisonLesserLeftAction_1_0_2_0() { return cComparisonLesserLeftAction_1_0_2_0; }
		
		//'<'
		public Keyword getLessThanSignKeyword_1_0_2_1() { return cLessThanSignKeyword_1_0_2_1; }
		
		//{ComparisonLesserEqual.left=current} '<='
		public Group getGroup_1_0_3() { return cGroup_1_0_3; }
		
		//{ComparisonLesserEqual.left=current}
		public Action getComparisonLesserEqualLeftAction_1_0_3_0() { return cComparisonLesserEqualLeftAction_1_0_3_0; }
		
		//'<='
		public Keyword getLessThanSignEqualsSignKeyword_1_0_3_1() { return cLessThanSignEqualsSignKeyword_1_0_3_1; }
		
		//{ComparisonGreater.left=current} '>'
		public Group getGroup_1_0_4() { return cGroup_1_0_4; }
		
		//{ComparisonGreater.left=current}
		public Action getComparisonGreaterLeftAction_1_0_4_0() { return cComparisonGreaterLeftAction_1_0_4_0; }
		
		//'>'
		public Keyword getGreaterThanSignKeyword_1_0_4_1() { return cGreaterThanSignKeyword_1_0_4_1; }
		
		//{ComparisonGreaterEqual.left=current} '>='
		public Group getGroup_1_0_5() { return cGroup_1_0_5; }
		
		//{ComparisonGreaterEqual.left=current}
		public Action getComparisonGreaterEqualLeftAction_1_0_5_0() { return cComparisonGreaterEqualLeftAction_1_0_5_0; }
		
		//'>='
		public Keyword getGreaterThanSignEqualsSignKeyword_1_0_5_1() { return cGreaterThanSignEqualsSignKeyword_1_0_5_1; }
		
		//right=Addition
		public Assignment getRightAssignment_1_1() { return cRightAssignment_1_1; }
		
		//Addition
		public RuleCall getRightAdditionParserRuleCall_1_1_0() { return cRightAdditionParserRuleCall_1_1_0; }
	}
	public class AdditionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Addition");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cSubstractionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cAdditionLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cPlusSignKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightSubstractionParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//Addition Expression:
		//	Substraction ({Addition.left=current} '+' right=Substraction)*
		@Override public ParserRule getRule() { return rule; }
		
		//Substraction ({Addition.left=current} '+' right=Substraction)*
		public Group getGroup() { return cGroup; }
		
		//Substraction
		public RuleCall getSubstractionParserRuleCall_0() { return cSubstractionParserRuleCall_0; }
		
		//({Addition.left=current} '+' right=Substraction)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{Addition.left=current}
		public Action getAdditionLeftAction_1_0() { return cAdditionLeftAction_1_0; }
		
		//'+'
		public Keyword getPlusSignKeyword_1_1() { return cPlusSignKeyword_1_1; }
		
		//right=Substraction
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//Substraction
		public RuleCall getRightSubstractionParserRuleCall_1_2_0() { return cRightSubstractionParserRuleCall_1_2_0; }
	}
	public class SubstractionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Substraction");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cMultiplicationParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cSubstractionLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cHyphenMinusKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightMultiplicationParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//Substraction Expression:
		//	Multiplication ({Substraction.left=current} '-' right=Multiplication)*
		@Override public ParserRule getRule() { return rule; }
		
		//Multiplication ({Substraction.left=current} '-' right=Multiplication)*
		public Group getGroup() { return cGroup; }
		
		//Multiplication
		public RuleCall getMultiplicationParserRuleCall_0() { return cMultiplicationParserRuleCall_0; }
		
		//({Substraction.left=current} '-' right=Multiplication)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{Substraction.left=current}
		public Action getSubstractionLeftAction_1_0() { return cSubstractionLeftAction_1_0; }
		
		//'-'
		public Keyword getHyphenMinusKeyword_1_1() { return cHyphenMinusKeyword_1_1; }
		
		//right=Multiplication
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//Multiplication
		public RuleCall getRightMultiplicationParserRuleCall_1_2_0() { return cRightMultiplicationParserRuleCall_1_2_0; }
	}
	public class MultiplicationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Multiplication");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cDivisionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cMultiplicationLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cAsteriskKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightDivisionParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//Multiplication Expression:
		//	Division ({Multiplication.left=current} '*' right=Division)*
		@Override public ParserRule getRule() { return rule; }
		
		//Division ({Multiplication.left=current} '*' right=Division)*
		public Group getGroup() { return cGroup; }
		
		//Division
		public RuleCall getDivisionParserRuleCall_0() { return cDivisionParserRuleCall_0; }
		
		//({Multiplication.left=current} '*' right=Division)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{Multiplication.left=current}
		public Action getMultiplicationLeftAction_1_0() { return cMultiplicationLeftAction_1_0; }
		
		//'*'
		public Keyword getAsteriskKeyword_1_1() { return cAsteriskKeyword_1_1; }
		
		//right=Division
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//Division
		public RuleCall getRightDivisionParserRuleCall_1_2_0() { return cRightDivisionParserRuleCall_1_2_0; }
	}
	public class DivisionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Division");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cModuloParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cDivisionLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cSolidusKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightModuloParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//Division Expression:
		//	Modulo ({Division.left=current} '/' right=Modulo)*
		@Override public ParserRule getRule() { return rule; }
		
		//Modulo ({Division.left=current} '/' right=Modulo)*
		public Group getGroup() { return cGroup; }
		
		//Modulo
		public RuleCall getModuloParserRuleCall_0() { return cModuloParserRuleCall_0; }
		
		//({Division.left=current} '/' right=Modulo)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{Division.left=current}
		public Action getDivisionLeftAction_1_0() { return cDivisionLeftAction_1_0; }
		
		//'/'
		public Keyword getSolidusKeyword_1_1() { return cSolidusKeyword_1_1; }
		
		//right=Modulo
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//Modulo
		public RuleCall getRightModuloParserRuleCall_1_2_0() { return cRightModuloParserRuleCall_1_2_0; }
	}
	public class ModuloElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Modulo");
		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 cModuloLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cPercentSignKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightUnaryExpressionParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//Modulo Expression:
		//	UnaryExpression ({Modulo.left=current} '%' right=UnaryExpression)*
		@Override public ParserRule getRule() { return rule; }
		
		//UnaryExpression ({Modulo.left=current} '%' right=UnaryExpression)*
		public Group getGroup() { return cGroup; }
		
		//UnaryExpression
		public RuleCall getUnaryExpressionParserRuleCall_0() { return cUnaryExpressionParserRuleCall_0; }
		
		//({Modulo.left=current} '%' right=UnaryExpression)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{Modulo.left=current}
		public Action getModuloLeftAction_1_0() { return cModuloLeftAction_1_0; }
		
		//'%'
		public Keyword getPercentSignKeyword_1_1() { return cPercentSignKeyword_1_1; }
		
		//right=UnaryExpression
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//UnaryExpression
		public RuleCall getRightUnaryExpressionParserRuleCall_1_2_0() { return cRightUnaryExpressionParserRuleCall_1_2_0; }
	}
	public class UnaryExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.UnaryExpression");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Alternatives cAlternatives_0_0 = (Alternatives)cGroup_0.eContents().get(0);
		private final Group cGroup_0_0_0 = (Group)cAlternatives_0_0.eContents().get(0);
		private final Action cUnaryPlusExpressionAction_0_0_0_0 = (Action)cGroup_0_0_0.eContents().get(0);
		private final Keyword cPlusSignKeyword_0_0_0_1 = (Keyword)cGroup_0_0_0.eContents().get(1);
		private final Group cGroup_0_0_1 = (Group)cAlternatives_0_0.eContents().get(1);
		private final Action cUnaryMinusExpressionAction_0_0_1_0 = (Action)cGroup_0_0_1.eContents().get(0);
		private final Keyword cHyphenMinusKeyword_0_0_1_1 = (Keyword)cGroup_0_0_1.eContents().get(1);
		private final Group cGroup_0_0_2 = (Group)cAlternatives_0_0.eContents().get(2);
		private final Action cUnaryNegationExpressionAction_0_0_2_0 = (Action)cGroup_0_0_2.eContents().get(0);
		private final Keyword cNotKeyword_0_0_2_1 = (Keyword)cGroup_0_0_2.eContents().get(1);
		private final Group cGroup_0_0_3 = (Group)cAlternatives_0_0.eContents().get(3);
		private final Action cUnaryFirstExpressionAction_0_0_3_0 = (Action)cGroup_0_0_3.eContents().get(0);
		private final Keyword cFirstKeyword_0_0_3_1 = (Keyword)cGroup_0_0_3.eContents().get(1);
		private final Group cGroup_0_0_4 = (Group)cAlternatives_0_0.eContents().get(4);
		private final Action cUnaryLengthExpressionAction_0_0_4_0 = (Action)cGroup_0_0_4.eContents().get(0);
		private final Keyword cLengthKeyword_0_0_4_1 = (Keyword)cGroup_0_0_4.eContents().get(1);
		private final Group cGroup_0_0_5 = (Group)cAlternatives_0_0.eContents().get(5);
		private final Action cUnaryCoerceExpressionAction_0_0_5_0 = (Action)cGroup_0_0_5.eContents().get(0);
		private final Keyword cDollarSignKeyword_0_0_5_1 = (Keyword)cGroup_0_0_5.eContents().get(1);
		private final Group cGroup_0_0_6 = (Group)cAlternatives_0_0.eContents().get(6);
		private final Action cUnaryFullExpressionAction_0_0_6_0 = (Action)cGroup_0_0_6.eContents().get(0);
		private final Keyword cFullKeyword_0_0_6_1 = (Keyword)cGroup_0_0_6.eContents().get(1);
		private final Group cGroup_0_0_7 = (Group)cAlternatives_0_0.eContents().get(7);
		private final Action cUnaryDeQueueExpressionAction_0_0_7_0 = (Action)cGroup_0_0_7.eContents().get(0);
		private final Keyword cDequeueKeyword_0_0_7_1 = (Keyword)cGroup_0_0_7.eContents().get(1);
		private final Group cGroup_0_0_8 = (Group)cAlternatives_0_0.eContents().get(8);
		private final Action cUnaryEmptyExpressionAction_0_0_8_0 = (Action)cGroup_0_0_8.eContents().get(0);
		private final Keyword cEmptyKeyword_0_0_8_1 = (Keyword)cGroup_0_0_8.eContents().get(1);
		private final Assignment cChildAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
		private final RuleCall cChildUnaryExpressionParserRuleCall_0_1_0 = (RuleCall)cChildAssignment_0_1.eContents().get(0);
		private final RuleCall cProjectionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//UnaryExpression Expression:
		//	({UnaryPlusExpression} '+'
		//	| {UnaryMinusExpression} '-'
		//	| {UnaryNegationExpression} 'not'
		//	| {UnaryFirstExpression} 'first'
		//	| {UnaryLengthExpression} 'length'
		//	| {UnaryCoerceExpression} '$'
		//	| {UnaryFullExpression} 'full'
		//	| {UnaryDeQueueExpression} 'dequeue'
		//	| {UnaryEmptyExpression} 'empty') child=UnaryExpression | Projection
		@Override public ParserRule getRule() { return rule; }
		
		//({UnaryPlusExpression} '+' | {UnaryMinusExpression} '-' | {UnaryNegationExpression} 'not' | {UnaryFirstExpression}
		//'first' | {UnaryLengthExpression} 'length' | {UnaryCoerceExpression} '$' | {UnaryFullExpression} 'full' |
		//{UnaryDeQueueExpression} 'dequeue' | {UnaryEmptyExpression} 'empty') child=UnaryExpression | Projection
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//({UnaryPlusExpression} '+' | {UnaryMinusExpression} '-' | {UnaryNegationExpression} 'not' | {UnaryFirstExpression}
		//'first' | {UnaryLengthExpression} 'length' | {UnaryCoerceExpression} '$' | {UnaryFullExpression} 'full' |
		//{UnaryDeQueueExpression} 'dequeue' | {UnaryEmptyExpression} 'empty') child=UnaryExpression
		public Group getGroup_0() { return cGroup_0; }
		
		//({UnaryPlusExpression} '+' | {UnaryMinusExpression} '-' | {UnaryNegationExpression} 'not' | {UnaryFirstExpression}
		//'first' | {UnaryLengthExpression} 'length' | {UnaryCoerceExpression} '$' | {UnaryFullExpression} 'full' |
		//{UnaryDeQueueExpression} 'dequeue' | {UnaryEmptyExpression} 'empty')
		public Alternatives getAlternatives_0_0() { return cAlternatives_0_0; }
		
		//{UnaryPlusExpression} '+'
		public Group getGroup_0_0_0() { return cGroup_0_0_0; }
		
		//{UnaryPlusExpression}
		public Action getUnaryPlusExpressionAction_0_0_0_0() { return cUnaryPlusExpressionAction_0_0_0_0; }
		
		//'+'
		public Keyword getPlusSignKeyword_0_0_0_1() { return cPlusSignKeyword_0_0_0_1; }
		
		//{UnaryMinusExpression} '-'
		public Group getGroup_0_0_1() { return cGroup_0_0_1; }
		
		//{UnaryMinusExpression}
		public Action getUnaryMinusExpressionAction_0_0_1_0() { return cUnaryMinusExpressionAction_0_0_1_0; }
		
		//'-'
		public Keyword getHyphenMinusKeyword_0_0_1_1() { return cHyphenMinusKeyword_0_0_1_1; }
		
		//{UnaryNegationExpression} 'not'
		public Group getGroup_0_0_2() { return cGroup_0_0_2; }
		
		//{UnaryNegationExpression}
		public Action getUnaryNegationExpressionAction_0_0_2_0() { return cUnaryNegationExpressionAction_0_0_2_0; }
		
		//'not'
		public Keyword getNotKeyword_0_0_2_1() { return cNotKeyword_0_0_2_1; }
		
		//{UnaryFirstExpression} 'first'
		public Group getGroup_0_0_3() { return cGroup_0_0_3; }
		
		//{UnaryFirstExpression}
		public Action getUnaryFirstExpressionAction_0_0_3_0() { return cUnaryFirstExpressionAction_0_0_3_0; }
		
		//'first'
		public Keyword getFirstKeyword_0_0_3_1() { return cFirstKeyword_0_0_3_1; }
		
		//{UnaryLengthExpression} 'length'
		public Group getGroup_0_0_4() { return cGroup_0_0_4; }
		
		//{UnaryLengthExpression}
		public Action getUnaryLengthExpressionAction_0_0_4_0() { return cUnaryLengthExpressionAction_0_0_4_0; }
		
		//'length'
		public Keyword getLengthKeyword_0_0_4_1() { return cLengthKeyword_0_0_4_1; }
		
		//{UnaryCoerceExpression} '$'
		public Group getGroup_0_0_5() { return cGroup_0_0_5; }
		
		//{UnaryCoerceExpression}
		public Action getUnaryCoerceExpressionAction_0_0_5_0() { return cUnaryCoerceExpressionAction_0_0_5_0; }
		
		//'$'
		public Keyword getDollarSignKeyword_0_0_5_1() { return cDollarSignKeyword_0_0_5_1; }
		
		//{UnaryFullExpression} 'full'
		public Group getGroup_0_0_6() { return cGroup_0_0_6; }
		
		//{UnaryFullExpression}
		public Action getUnaryFullExpressionAction_0_0_6_0() { return cUnaryFullExpressionAction_0_0_6_0; }
		
		//'full'
		public Keyword getFullKeyword_0_0_6_1() { return cFullKeyword_0_0_6_1; }
		
		//{UnaryDeQueueExpression} 'dequeue'
		public Group getGroup_0_0_7() { return cGroup_0_0_7; }
		
		//{UnaryDeQueueExpression}
		public Action getUnaryDeQueueExpressionAction_0_0_7_0() { return cUnaryDeQueueExpressionAction_0_0_7_0; }
		
		//'dequeue'
		public Keyword getDequeueKeyword_0_0_7_1() { return cDequeueKeyword_0_0_7_1; }
		
		//{UnaryEmptyExpression} 'empty'
		public Group getGroup_0_0_8() { return cGroup_0_0_8; }
		
		//{UnaryEmptyExpression}
		public Action getUnaryEmptyExpressionAction_0_0_8_0() { return cUnaryEmptyExpressionAction_0_0_8_0; }
		
		//'empty'
		public Keyword getEmptyKeyword_0_0_8_1() { return cEmptyKeyword_0_0_8_1; }
		
		//child=UnaryExpression
		public Assignment getChildAssignment_0_1() { return cChildAssignment_0_1; }
		
		//UnaryExpression
		public RuleCall getChildUnaryExpressionParserRuleCall_0_1_0() { return cChildUnaryExpressionParserRuleCall_0_1_0; }
		
		//Projection
		public RuleCall getProjectionParserRuleCall_1() { return cProjectionParserRuleCall_1; }
	}
	public class ProjectionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Projection");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cAtomicExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cProjectionChannelAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cCircumflexAccentKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cFieldAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cFieldAtomicExpressionParserRuleCall_1_2_0 = (RuleCall)cFieldAssignment_1_2.eContents().get(0);
		
		//Projection Expression:
		//	AtomicExpression ({Projection.channel=current} '^'
		//	field=AtomicExpression)?
		@Override public ParserRule getRule() { return rule; }
		
		//AtomicExpression ({Projection.channel=current} '^' field=AtomicExpression)?
		public Group getGroup() { return cGroup; }
		
		//AtomicExpression
		public RuleCall getAtomicExpressionParserRuleCall_0() { return cAtomicExpressionParserRuleCall_0; }
		
		//({Projection.channel=current} '^' field=AtomicExpression)?
		public Group getGroup_1() { return cGroup_1; }
		
		//{Projection.channel=current}
		public Action getProjectionChannelAction_1_0() { return cProjectionChannelAction_1_0; }
		
		//'^'
		public Keyword getCircumflexAccentKeyword_1_1() { return cCircumflexAccentKeyword_1_1; }
		
		//field=AtomicExpression
		public Assignment getFieldAssignment_1_2() { return cFieldAssignment_1_2; }
		
		//AtomicExpression
		public RuleCall getFieldAtomicExpressionParserRuleCall_1_2_0() { return cFieldAtomicExpressionParserRuleCall_1_2_0; }
	}
	public class ValueExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ValueExpression");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cIdentifierExpressionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cLiteralExpressionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cRecordExpressionParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cArrayExpressionParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		private final RuleCall cQueueExpressionParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
		
		//// Added to manage the type of current value of a fiacre value during execution		
		//ValueExpression:
		//	IdentifierExpression
		//	| LiteralExpression
		//	| RecordExpression
		//	| ArrayExpression
		//	| QueueExpression;
		@Override public ParserRule getRule() { return rule; }
		
		//IdentifierExpression | LiteralExpression | RecordExpression | ArrayExpression | QueueExpression
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//IdentifierExpression
		public RuleCall getIdentifierExpressionParserRuleCall_0() { return cIdentifierExpressionParserRuleCall_0; }
		
		//LiteralExpression
		public RuleCall getLiteralExpressionParserRuleCall_1() { return cLiteralExpressionParserRuleCall_1; }
		
		//RecordExpression
		public RuleCall getRecordExpressionParserRuleCall_2() { return cRecordExpressionParserRuleCall_2; }
		
		//ArrayExpression
		public RuleCall getArrayExpressionParserRuleCall_3() { return cArrayExpressionParserRuleCall_3; }
		
		//QueueExpression
		public RuleCall getQueueExpressionParserRuleCall_4() { return cQueueExpressionParserRuleCall_4; }
	}
	public class AtomicExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.AtomicExpression");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cIdentifierExpressionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cReferenceExpressionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cLiteralExpressionParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cRecordExpressionParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		private final RuleCall cArrayExpressionParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
		private final RuleCall cQueueExpressionParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
		private final RuleCall cEnqueueExpressionParserRuleCall_6 = (RuleCall)cAlternatives.eContents().get(6);
		private final RuleCall cAppendExpressionParserRuleCall_7 = (RuleCall)cAlternatives.eContents().get(7);
		private final Group cGroup_8 = (Group)cAlternatives.eContents().get(8);
		private final Keyword cLeftParenthesisKeyword_8_0 = (Keyword)cGroup_8.eContents().get(0);
		private final RuleCall cExpressionParserRuleCall_8_1 = (RuleCall)cGroup_8.eContents().get(1);
		private final Keyword cRightParenthesisKeyword_8_2 = (Keyword)cGroup_8.eContents().get(2);
		
		//AtomicExpression Expression:
		//	IdentifierExpression
		//	| ReferenceExpression
		//	| LiteralExpression
		//	| RecordExpression
		//	| ArrayExpression
		//	| QueueExpression
		//	| EnqueueExpression
		//	| AppendExpression
		//	| '(' Expression ')'
		@Override public ParserRule getRule() { return rule; }
		
		//IdentifierExpression | ReferenceExpression | LiteralExpression | RecordExpression | ArrayExpression | QueueExpression |
		//EnqueueExpression | AppendExpression | '(' Expression ')'
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//IdentifierExpression
		public RuleCall getIdentifierExpressionParserRuleCall_0() { return cIdentifierExpressionParserRuleCall_0; }
		
		//ReferenceExpression
		public RuleCall getReferenceExpressionParserRuleCall_1() { return cReferenceExpressionParserRuleCall_1; }
		
		//LiteralExpression
		public RuleCall getLiteralExpressionParserRuleCall_2() { return cLiteralExpressionParserRuleCall_2; }
		
		//RecordExpression
		public RuleCall getRecordExpressionParserRuleCall_3() { return cRecordExpressionParserRuleCall_3; }
		
		//ArrayExpression
		public RuleCall getArrayExpressionParserRuleCall_4() { return cArrayExpressionParserRuleCall_4; }
		
		//QueueExpression
		public RuleCall getQueueExpressionParserRuleCall_5() { return cQueueExpressionParserRuleCall_5; }
		
		//EnqueueExpression
		public RuleCall getEnqueueExpressionParserRuleCall_6() { return cEnqueueExpressionParserRuleCall_6; }
		
		//AppendExpression
		public RuleCall getAppendExpressionParserRuleCall_7() { return cAppendExpressionParserRuleCall_7; }
		
		//'(' Expression ')'
		public Group getGroup_8() { return cGroup_8; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_8_0() { return cLeftParenthesisKeyword_8_0; }
		
		//Expression
		public RuleCall getExpressionParserRuleCall_8_1() { return cExpressionParserRuleCall_8_1; }
		
		//')'
		public Keyword getRightParenthesisKeyword_8_2() { return cRightParenthesisKeyword_8_2; }
	}
	public class ReferenceExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ReferenceExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cAmpersandKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cDeclarationAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final CrossReference cDeclarationReferenceDeclarationUseCrossReference_1_0 = (CrossReference)cDeclarationAssignment_1.eContents().get(0);
		private final RuleCall cDeclarationReferenceDeclarationUseIDTerminalRuleCall_1_0_1 = (RuleCall)cDeclarationReferenceDeclarationUseCrossReference_1_0.eContents().get(1);
		
		//ReferenceExpression:
		//	'&' declaration=[ReferenceDeclarationUse];
		@Override public ParserRule getRule() { return rule; }
		
		//'&' declaration=[ReferenceDeclarationUse]
		public Group getGroup() { return cGroup; }
		
		//'&'
		public Keyword getAmpersandKeyword_0() { return cAmpersandKeyword_0; }
		
		//declaration=[ReferenceDeclarationUse]
		public Assignment getDeclarationAssignment_1() { return cDeclarationAssignment_1; }
		
		//[ReferenceDeclarationUse]
		public CrossReference getDeclarationReferenceDeclarationUseCrossReference_1_0() { return cDeclarationReferenceDeclarationUseCrossReference_1_0; }
		
		//ID
		public RuleCall getDeclarationReferenceDeclarationUseIDTerminalRuleCall_1_0_1() { return cDeclarationReferenceDeclarationUseIDTerminalRuleCall_1_0_1; }
	}
	public class IdentifierExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.IdentifierExpression");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Action cConstructionExpressionAction_0_0 = (Action)cGroup_0.eContents().get(0);
		private final Assignment cDeclarationAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
		private final CrossReference cDeclarationExpressionDeclarationUseCrossReference_0_1_0 = (CrossReference)cDeclarationAssignment_0_1.eContents().get(0);
		private final RuleCall cDeclarationExpressionDeclarationUseIDTerminalRuleCall_0_1_0_1 = (RuleCall)cDeclarationExpressionDeclarationUseCrossReference_0_1_0.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_0_2 = (Keyword)cGroup_0.eContents().get(2);
		private final Group cGroup_0_3 = (Group)cGroup_0.eContents().get(3);
		private final Assignment cParametersAssignment_0_3_0 = (Assignment)cGroup_0_3.eContents().get(0);
		private final RuleCall cParametersExpressionParserRuleCall_0_3_0_0 = (RuleCall)cParametersAssignment_0_3_0.eContents().get(0);
		private final Group cGroup_0_3_1 = (Group)cGroup_0_3.eContents().get(1);
		private final Keyword cCommaKeyword_0_3_1_0 = (Keyword)cGroup_0_3_1.eContents().get(0);
		private final Assignment cParametersAssignment_0_3_1_1 = (Assignment)cGroup_0_3_1.eContents().get(1);
		private final RuleCall cParametersExpressionParserRuleCall_0_3_1_1_0 = (RuleCall)cParametersAssignment_0_3_1_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_0_4 = (Keyword)cGroup_0.eContents().get(4);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Assignment cDeclarationAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
		private final CrossReference cDeclarationExpressionDeclarationUseCrossReference_1_0_0 = (CrossReference)cDeclarationAssignment_1_0.eContents().get(0);
		private final RuleCall cDeclarationExpressionDeclarationUseIDTerminalRuleCall_1_0_0_1 = (RuleCall)cDeclarationExpressionDeclarationUseCrossReference_1_0_0.eContents().get(1);
		private final Alternatives cAlternatives_1_1 = (Alternatives)cGroup_1.eContents().get(1);
		private final Group cGroup_1_1_0 = (Group)cAlternatives_1_1.eContents().get(0);
		private final Keyword cLeftSquareBracketKeyword_1_1_0_0 = (Keyword)cGroup_1_1_0.eContents().get(0);
		private final Action cArrayAccessExpressionChildAction_1_1_0_1 = (Action)cGroup_1_1_0.eContents().get(1);
		private final Assignment cIndexesAssignment_1_1_0_2 = (Assignment)cGroup_1_1_0.eContents().get(2);
		private final RuleCall cIndexesExpressionParserRuleCall_1_1_0_2_0 = (RuleCall)cIndexesAssignment_1_1_0_2.eContents().get(0);
		private final Group cGroup_1_1_0_3 = (Group)cGroup_1_1_0.eContents().get(3);
		private final Keyword cCommaKeyword_1_1_0_3_0 = (Keyword)cGroup_1_1_0_3.eContents().get(0);
		private final Assignment cIndexesAssignment_1_1_0_3_1 = (Assignment)cGroup_1_1_0_3.eContents().get(1);
		private final RuleCall cIndexesExpressionParserRuleCall_1_1_0_3_1_0 = (RuleCall)cIndexesAssignment_1_1_0_3_1.eContents().get(0);
		private final Keyword cRightSquareBracketKeyword_1_1_0_4 = (Keyword)cGroup_1_1_0.eContents().get(4);
		private final Group cGroup_1_1_1 = (Group)cAlternatives_1_1.eContents().get(1);
		private final Keyword cFullStopKeyword_1_1_1_0 = (Keyword)cGroup_1_1_1.eContents().get(0);
		private final Action cRecordAccessExpressionChildAction_1_1_1_1 = (Action)cGroup_1_1_1.eContents().get(1);
		private final Assignment cFieldAssignment_1_1_1_2 = (Assignment)cGroup_1_1_1.eContents().get(2);
		private final CrossReference cFieldRecordFieldDeclarationCrossReference_1_1_1_2_0 = (CrossReference)cFieldAssignment_1_1_1_2.eContents().get(0);
		private final RuleCall cFieldRecordFieldDeclarationIDTerminalRuleCall_1_1_1_2_0_1 = (RuleCall)cFieldRecordFieldDeclarationCrossReference_1_1_1_2_0.eContents().get(1);
		
		//IdentifierExpression:
		//	{ConstructionExpression} declaration=[ExpressionDeclarationUse] '(' (parameters+=Expression (','
		//	parameters+=Expression)*)? ')' | declaration=[ExpressionDeclarationUse] ('[' {ArrayAccessExpression.child=current}
		//	indexes+=Expression (',' indexes+=Expression)* ']' | '.' {RecordAccessExpression.child=current}
		//	field=[RecordFieldDeclaration])*;
		@Override public ParserRule getRule() { return rule; }
		
		//{ConstructionExpression} declaration=[ExpressionDeclarationUse] '(' (parameters+=Expression (','
		//parameters+=Expression)*)? ')' | declaration=[ExpressionDeclarationUse] ('[' {ArrayAccessExpression.child=current}
		//indexes+=Expression (',' indexes+=Expression)* ']' | '.' {RecordAccessExpression.child=current}
		//field=[RecordFieldDeclaration])*
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//{ConstructionExpression} declaration=[ExpressionDeclarationUse] '(' (parameters+=Expression (','
		//parameters+=Expression)*)? ')'
		public Group getGroup_0() { return cGroup_0; }
		
		//{ConstructionExpression}
		public Action getConstructionExpressionAction_0_0() { return cConstructionExpressionAction_0_0; }
		
		//declaration=[ExpressionDeclarationUse]
		public Assignment getDeclarationAssignment_0_1() { return cDeclarationAssignment_0_1; }
		
		//[ExpressionDeclarationUse]
		public CrossReference getDeclarationExpressionDeclarationUseCrossReference_0_1_0() { return cDeclarationExpressionDeclarationUseCrossReference_0_1_0; }
		
		//ID
		public RuleCall getDeclarationExpressionDeclarationUseIDTerminalRuleCall_0_1_0_1() { return cDeclarationExpressionDeclarationUseIDTerminalRuleCall_0_1_0_1; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_0_2() { return cLeftParenthesisKeyword_0_2; }
		
		//(parameters+=Expression (',' parameters+=Expression)*)?
		public Group getGroup_0_3() { return cGroup_0_3; }
		
		//parameters+=Expression
		public Assignment getParametersAssignment_0_3_0() { return cParametersAssignment_0_3_0; }
		
		//Expression
		public RuleCall getParametersExpressionParserRuleCall_0_3_0_0() { return cParametersExpressionParserRuleCall_0_3_0_0; }
		
		//(',' parameters+=Expression)*
		public Group getGroup_0_3_1() { return cGroup_0_3_1; }
		
		//','
		public Keyword getCommaKeyword_0_3_1_0() { return cCommaKeyword_0_3_1_0; }
		
		//parameters+=Expression
		public Assignment getParametersAssignment_0_3_1_1() { return cParametersAssignment_0_3_1_1; }
		
		//Expression
		public RuleCall getParametersExpressionParserRuleCall_0_3_1_1_0() { return cParametersExpressionParserRuleCall_0_3_1_1_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_0_4() { return cRightParenthesisKeyword_0_4; }
		
		//declaration=[ExpressionDeclarationUse] ('[' {ArrayAccessExpression.child=current} indexes+=Expression (','
		//indexes+=Expression)* ']' | '.' {RecordAccessExpression.child=current} field=[RecordFieldDeclaration])*
		public Group getGroup_1() { return cGroup_1; }
		
		//declaration=[ExpressionDeclarationUse]
		public Assignment getDeclarationAssignment_1_0() { return cDeclarationAssignment_1_0; }
		
		//[ExpressionDeclarationUse]
		public CrossReference getDeclarationExpressionDeclarationUseCrossReference_1_0_0() { return cDeclarationExpressionDeclarationUseCrossReference_1_0_0; }
		
		//ID
		public RuleCall getDeclarationExpressionDeclarationUseIDTerminalRuleCall_1_0_0_1() { return cDeclarationExpressionDeclarationUseIDTerminalRuleCall_1_0_0_1; }
		
		//('[' {ArrayAccessExpression.child=current} indexes+=Expression (',' indexes+=Expression)* ']' | '.'
		//{RecordAccessExpression.child=current} field=[RecordFieldDeclaration])*
		public Alternatives getAlternatives_1_1() { return cAlternatives_1_1; }
		
		//'[' {ArrayAccessExpression.child=current} indexes+=Expression (',' indexes+=Expression)* ']'
		public Group getGroup_1_1_0() { return cGroup_1_1_0; }
		
		//'['
		public Keyword getLeftSquareBracketKeyword_1_1_0_0() { return cLeftSquareBracketKeyword_1_1_0_0; }
		
		//{ArrayAccessExpression.child=current}
		public Action getArrayAccessExpressionChildAction_1_1_0_1() { return cArrayAccessExpressionChildAction_1_1_0_1; }
		
		//indexes+=Expression
		public Assignment getIndexesAssignment_1_1_0_2() { return cIndexesAssignment_1_1_0_2; }
		
		//Expression
		public RuleCall getIndexesExpressionParserRuleCall_1_1_0_2_0() { return cIndexesExpressionParserRuleCall_1_1_0_2_0; }
		
		//(',' indexes+=Expression)*
		public Group getGroup_1_1_0_3() { return cGroup_1_1_0_3; }
		
		//','
		public Keyword getCommaKeyword_1_1_0_3_0() { return cCommaKeyword_1_1_0_3_0; }
		
		//indexes+=Expression
		public Assignment getIndexesAssignment_1_1_0_3_1() { return cIndexesAssignment_1_1_0_3_1; }
		
		//Expression
		public RuleCall getIndexesExpressionParserRuleCall_1_1_0_3_1_0() { return cIndexesExpressionParserRuleCall_1_1_0_3_1_0; }
		
		//']'
		public Keyword getRightSquareBracketKeyword_1_1_0_4() { return cRightSquareBracketKeyword_1_1_0_4; }
		
		//'.' {RecordAccessExpression.child=current} field=[RecordFieldDeclaration]
		public Group getGroup_1_1_1() { return cGroup_1_1_1; }
		
		//'.'
		public Keyword getFullStopKeyword_1_1_1_0() { return cFullStopKeyword_1_1_1_0; }
		
		//{RecordAccessExpression.child=current}
		public Action getRecordAccessExpressionChildAction_1_1_1_1() { return cRecordAccessExpressionChildAction_1_1_1_1; }
		
		//field=[RecordFieldDeclaration]
		public Assignment getFieldAssignment_1_1_1_2() { return cFieldAssignment_1_1_1_2; }
		
		//[RecordFieldDeclaration]
		public CrossReference getFieldRecordFieldDeclarationCrossReference_1_1_1_2_0() { return cFieldRecordFieldDeclarationCrossReference_1_1_1_2_0; }
		
		//ID
		public RuleCall getFieldRecordFieldDeclarationIDTerminalRuleCall_1_1_1_2_0_1() { return cFieldRecordFieldDeclarationIDTerminalRuleCall_1_1_1_2_0_1; }
	}
	public class RecordExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.RecordExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLeftCurlyBracketKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cFieldsAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cFieldsFieldExpressionParserRuleCall_1_0 = (RuleCall)cFieldsAssignment_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 cFieldsAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cFieldsFieldExpressionParserRuleCall_2_1_0 = (RuleCall)cFieldsAssignment_2_1.eContents().get(0);
		private final Keyword cRightCurlyBracketKeyword_3 = (Keyword)cGroup.eContents().get(3);
		
		//RecordExpression:
		//	'{' fields+=FieldExpression (',' fields+=FieldExpression)* '}';
		@Override public ParserRule getRule() { return rule; }
		
		//'{' fields+=FieldExpression (',' fields+=FieldExpression)* '}'
		public Group getGroup() { return cGroup; }
		
		//'{'
		public Keyword getLeftCurlyBracketKeyword_0() { return cLeftCurlyBracketKeyword_0; }
		
		//fields+=FieldExpression
		public Assignment getFieldsAssignment_1() { return cFieldsAssignment_1; }
		
		//FieldExpression
		public RuleCall getFieldsFieldExpressionParserRuleCall_1_0() { return cFieldsFieldExpressionParserRuleCall_1_0; }
		
		//(',' fields+=FieldExpression)*
		public Group getGroup_2() { return cGroup_2; }
		
		//','
		public Keyword getCommaKeyword_2_0() { return cCommaKeyword_2_0; }
		
		//fields+=FieldExpression
		public Assignment getFieldsAssignment_2_1() { return cFieldsAssignment_2_1; }
		
		//FieldExpression
		public RuleCall getFieldsFieldExpressionParserRuleCall_2_1_0() { return cFieldsFieldExpressionParserRuleCall_2_1_0; }
		
		//'}'
		public Keyword getRightCurlyBracketKeyword_3() { return cRightCurlyBracketKeyword_3; }
	}
	public class FieldExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.FieldExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cFieldAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final CrossReference cFieldRecordFieldDeclarationUseCrossReference_0_0 = (CrossReference)cFieldAssignment_0.eContents().get(0);
		private final RuleCall cFieldRecordFieldDeclarationUseIDTerminalRuleCall_0_0_1 = (RuleCall)cFieldRecordFieldDeclarationUseCrossReference_0_0.eContents().get(1);
		private final Keyword cEqualsSignKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cValueAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cValueExpressionParserRuleCall_2_0 = (RuleCall)cValueAssignment_2.eContents().get(0);
		
		//FieldExpression:
		//	field=[RecordFieldDeclarationUse] '=' value=Expression // TODO : Inconsistent
		//;
		@Override public ParserRule getRule() { return rule; }
		
		////FZ je l'ai repris 
		//field=[RecordFieldDeclarationUse] '=' value=Expression
		public Group getGroup() { return cGroup; }
		
		////FZ je l'ai repris 
		//field=[RecordFieldDeclarationUse]
		public Assignment getFieldAssignment_0() { return cFieldAssignment_0; }
		
		//[RecordFieldDeclarationUse]
		public CrossReference getFieldRecordFieldDeclarationUseCrossReference_0_0() { return cFieldRecordFieldDeclarationUseCrossReference_0_0; }
		
		//ID
		public RuleCall getFieldRecordFieldDeclarationUseIDTerminalRuleCall_0_0_1() { return cFieldRecordFieldDeclarationUseIDTerminalRuleCall_0_0_1; }
		
		//'='
		public Keyword getEqualsSignKeyword_1() { return cEqualsSignKeyword_1; }
		
		//value=Expression
		public Assignment getValueAssignment_2() { return cValueAssignment_2; }
		
		//Expression
		public RuleCall getValueExpressionParserRuleCall_2_0() { return cValueExpressionParserRuleCall_2_0; }
	}
	public class ArrayExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ArrayExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cArrayExpressionAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cLeftSquareBracketKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Assignment cValuesAssignment_2_0 = (Assignment)cGroup_2.eContents().get(0);
		private final RuleCall cValuesExpressionParserRuleCall_2_0_0 = (RuleCall)cValuesAssignment_2_0.eContents().get(0);
		private final Group cGroup_2_1 = (Group)cGroup_2.eContents().get(1);
		private final Keyword cCommaKeyword_2_1_0 = (Keyword)cGroup_2_1.eContents().get(0);
		private final Assignment cValuesAssignment_2_1_1 = (Assignment)cGroup_2_1.eContents().get(1);
		private final RuleCall cValuesExpressionParserRuleCall_2_1_1_0 = (RuleCall)cValuesAssignment_2_1_1.eContents().get(0);
		private final Keyword cRightSquareBracketKeyword_3 = (Keyword)cGroup.eContents().get(3);
		
		////ArrayExpression returns Expression :
		////	'[' Expression 
		////		(
		////			{ExplicitArrayExpression.values+=current} (',' values+=Expression)*
		////		|
		////			({ImplicitArrayExpression.body+=current} '|' index=VariableDeclaration 'in' type=RangeType)
		////		)
		////	 ']'
		////;
		//ArrayExpression:
		//	{ArrayExpression} '[' (values+=Expression (',' values+=Expression)*)? ']';
		@Override public ParserRule getRule() { return rule; }
		
		//{ArrayExpression} '[' (values+=Expression (',' values+=Expression)*)? ']'
		public Group getGroup() { return cGroup; }
		
		//{ArrayExpression}
		public Action getArrayExpressionAction_0() { return cArrayExpressionAction_0; }
		
		//'['
		public Keyword getLeftSquareBracketKeyword_1() { return cLeftSquareBracketKeyword_1; }
		
		//(values+=Expression (',' values+=Expression)*)?
		public Group getGroup_2() { return cGroup_2; }
		
		//values+=Expression
		public Assignment getValuesAssignment_2_0() { return cValuesAssignment_2_0; }
		
		//Expression
		public RuleCall getValuesExpressionParserRuleCall_2_0_0() { return cValuesExpressionParserRuleCall_2_0_0; }
		
		//(',' values+=Expression)*
		public Group getGroup_2_1() { return cGroup_2_1; }
		
		//','
		public Keyword getCommaKeyword_2_1_0() { return cCommaKeyword_2_1_0; }
		
		//values+=Expression
		public Assignment getValuesAssignment_2_1_1() { return cValuesAssignment_2_1_1; }
		
		//Expression
		public RuleCall getValuesExpressionParserRuleCall_2_1_1_0() { return cValuesExpressionParserRuleCall_2_1_1_0; }
		
		//']'
		public Keyword getRightSquareBracketKeyword_3() { return cRightSquareBracketKeyword_3; }
	}
	public class QueueExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.QueueExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cQueueExpressionAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cLeftCurlyBracketVerticalLineKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Assignment cValuesAssignment_2_0 = (Assignment)cGroup_2.eContents().get(0);
		private final RuleCall cValuesExpressionParserRuleCall_2_0_0 = (RuleCall)cValuesAssignment_2_0.eContents().get(0);
		private final Group cGroup_2_1 = (Group)cGroup_2.eContents().get(1);
		private final Keyword cCommaKeyword_2_1_0 = (Keyword)cGroup_2_1.eContents().get(0);
		private final Assignment cValuesAssignment_2_1_1 = (Assignment)cGroup_2_1.eContents().get(1);
		private final RuleCall cValuesExpressionParserRuleCall_2_1_1_0 = (RuleCall)cValuesAssignment_2_1_1.eContents().get(0);
		private final Keyword cVerticalLineRightCurlyBracketKeyword_3 = (Keyword)cGroup.eContents().get(3);
		
		//QueueExpression:
		//	{QueueExpression} '{|' (values+=Expression (',' values+=Expression)*)? '|}';
		@Override public ParserRule getRule() { return rule; }
		
		//{QueueExpression} '{|' (values+=Expression (',' values+=Expression)*)? '|}'
		public Group getGroup() { return cGroup; }
		
		//{QueueExpression}
		public Action getQueueExpressionAction_0() { return cQueueExpressionAction_0; }
		
		//'{|'
		public Keyword getLeftCurlyBracketVerticalLineKeyword_1() { return cLeftCurlyBracketVerticalLineKeyword_1; }
		
		//(values+=Expression (',' values+=Expression)*)?
		public Group getGroup_2() { return cGroup_2; }
		
		//values+=Expression
		public Assignment getValuesAssignment_2_0() { return cValuesAssignment_2_0; }
		
		//Expression
		public RuleCall getValuesExpressionParserRuleCall_2_0_0() { return cValuesExpressionParserRuleCall_2_0_0; }
		
		//(',' values+=Expression)*
		public Group getGroup_2_1() { return cGroup_2_1; }
		
		//','
		public Keyword getCommaKeyword_2_1_0() { return cCommaKeyword_2_1_0; }
		
		//values+=Expression
		public Assignment getValuesAssignment_2_1_1() { return cValuesAssignment_2_1_1; }
		
		//Expression
		public RuleCall getValuesExpressionParserRuleCall_2_1_1_0() { return cValuesExpressionParserRuleCall_2_1_1_0; }
		
		//'|}'
		public Keyword getVerticalLineRightCurlyBracketKeyword_3() { return cVerticalLineRightCurlyBracketKeyword_3; }
	}
	public class EnqueueExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.EnqueueExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cEnqueueKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cElementAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cElementExpressionParserRuleCall_2_0 = (RuleCall)cElementAssignment_2.eContents().get(0);
		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cQueueAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cQueueExpressionParserRuleCall_4_0 = (RuleCall)cQueueAssignment_4.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
		
		//EnqueueExpression:
		//	'enqueue' '(' element=Expression ',' queue=Expression ')';
		@Override public ParserRule getRule() { return rule; }
		
		//'enqueue' '(' element=Expression ',' queue=Expression ')'
		public Group getGroup() { return cGroup; }
		
		//'enqueue'
		public Keyword getEnqueueKeyword_0() { return cEnqueueKeyword_0; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
		
		//element=Expression
		public Assignment getElementAssignment_2() { return cElementAssignment_2; }
		
		//Expression
		public RuleCall getElementExpressionParserRuleCall_2_0() { return cElementExpressionParserRuleCall_2_0; }
		
		//','
		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }
		
		//queue=Expression
		public Assignment getQueueAssignment_4() { return cQueueAssignment_4; }
		
		//Expression
		public RuleCall getQueueExpressionParserRuleCall_4_0() { return cQueueExpressionParserRuleCall_4_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_5() { return cRightParenthesisKeyword_5; }
	}
	public class AppendExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.AppendExpression");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cAppendKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Assignment cLeftAssignment_2 = (Assignment)cGroup.eContents().get(2);
		private final RuleCall cLeftExpressionParserRuleCall_2_0 = (RuleCall)cLeftAssignment_2.eContents().get(0);
		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cRightAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cRightExpressionParserRuleCall_4_0 = (RuleCall)cRightAssignment_4.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
		
		//AppendExpression:
		//	'append' '(' left=Expression ',' right=Expression ')';
		@Override public ParserRule getRule() { return rule; }
		
		//'append' '(' left=Expression ',' right=Expression ')'
		public Group getGroup() { return cGroup; }
		
		//'append'
		public Keyword getAppendKeyword_0() { return cAppendKeyword_0; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
		
		//left=Expression
		public Assignment getLeftAssignment_2() { return cLeftAssignment_2; }
		
		//Expression
		public RuleCall getLeftExpressionParserRuleCall_2_0() { return cLeftExpressionParserRuleCall_2_0; }
		
		//','
		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }
		
		//right=Expression
		public Assignment getRightAssignment_4() { return cRightAssignment_4; }
		
		//Expression
		public RuleCall getRightExpressionParserRuleCall_4_0() { return cRightExpressionParserRuleCall_4_0; }
		
		//')'
		public Keyword getRightParenthesisKeyword_5() { return cRightParenthesisKeyword_5; }
	}
	public class LiteralExpressionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.LiteralExpression");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cBooleanLiteralParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cNaturalLiteralParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//LiteralExpression:
		//	BooleanLiteral
		//	| NaturalLiteral;
		@Override public ParserRule getRule() { return rule; }
		
		//BooleanLiteral | NaturalLiteral
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//BooleanLiteral
		public RuleCall getBooleanLiteralParserRuleCall_0() { return cBooleanLiteralParserRuleCall_0; }
		
		//NaturalLiteral
		public RuleCall getNaturalLiteralParserRuleCall_1() { return cNaturalLiteralParserRuleCall_1; }
	}
	public class BooleanLiteralElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.BooleanLiteral");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Action cTrueLiteralAction_0_0 = (Action)cGroup_0.eContents().get(0);
		private final Keyword cTrueKeyword_0_1 = (Keyword)cGroup_0.eContents().get(1);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Action cFalseLiteralAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cFalseKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		
		//BooleanLiteral:
		//	{TrueLiteral} 'true' | {FalseLiteral} 'false';
		@Override public ParserRule getRule() { return rule; }
		
		//{TrueLiteral} 'true' | {FalseLiteral} 'false'
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//{TrueLiteral} 'true'
		public Group getGroup_0() { return cGroup_0; }
		
		//{TrueLiteral}
		public Action getTrueLiteralAction_0_0() { return cTrueLiteralAction_0_0; }
		
		//'true'
		public Keyword getTrueKeyword_0_1() { return cTrueKeyword_0_1; }
		
		//{FalseLiteral} 'false'
		public Group getGroup_1() { return cGroup_1; }
		
		//{FalseLiteral}
		public Action getFalseLiteralAction_1_0() { return cFalseLiteralAction_1_0; }
		
		//'false'
		public Keyword getFalseKeyword_1_1() { return cFalseKeyword_1_1; }
	}
	public class NaturalLiteralElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.NaturalLiteral");
		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cValueINTTerminalRuleCall_0 = (RuleCall)cValueAssignment.eContents().get(0);
		
		//NaturalLiteral:
		//	value=INT;
		@Override public ParserRule getRule() { return rule; }
		
		//value=INT
		public Assignment getValueAssignment() { return cValueAssignment; }
		
		//INT
		public RuleCall getValueINTTerminalRuleCall_0() { return cValueINTTerminalRuleCall_0; }
	}
	public class LowerBoundElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.LowerBound");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cNaturalLowerBoundParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cDecimalLowerBoundParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cVariableLowerBoundParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		
		//LowerBound:
		//	NaturalLowerBound
		//	| DecimalLowerBound
		//	| VariableLowerBound;
		@Override public ParserRule getRule() { return rule; }
		
		//NaturalLowerBound | DecimalLowerBound | VariableLowerBound
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//NaturalLowerBound
		public RuleCall getNaturalLowerBoundParserRuleCall_0() { return cNaturalLowerBoundParserRuleCall_0; }
		
		//DecimalLowerBound
		public RuleCall getDecimalLowerBoundParserRuleCall_1() { return cDecimalLowerBoundParserRuleCall_1; }
		
		//VariableLowerBound
		public RuleCall getVariableLowerBoundParserRuleCall_2() { return cVariableLowerBoundParserRuleCall_2; }
	}
	public class UpperBoundElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.UpperBound");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cNaturalUpperBoundParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cDecimalUpperBoundParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cVariableUpperBoundParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cInfiniteUpperBoundParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		
		//UpperBound:
		//	NaturalUpperBound
		//	| DecimalUpperBound
		//	| VariableUpperBound
		//	| InfiniteUpperBound;
		@Override public ParserRule getRule() { return rule; }
		
		//NaturalUpperBound | DecimalUpperBound | VariableUpperBound | InfiniteUpperBound
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//NaturalUpperBound
		public RuleCall getNaturalUpperBoundParserRuleCall_0() { return cNaturalUpperBoundParserRuleCall_0; }
		
		//DecimalUpperBound
		public RuleCall getDecimalUpperBoundParserRuleCall_1() { return cDecimalUpperBoundParserRuleCall_1; }
		
		//VariableUpperBound
		public RuleCall getVariableUpperBoundParserRuleCall_2() { return cVariableUpperBoundParserRuleCall_2; }
		
		//InfiniteUpperBound
		public RuleCall getInfiniteUpperBoundParserRuleCall_3() { return cInfiniteUpperBoundParserRuleCall_3; }
	}
	public class NaturalLowerBoundElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.NaturalLowerBound");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
		private final Assignment cLeftAssignment_0_0 = (Assignment)cAlternatives_0.eContents().get(0);
		private final Keyword cLeftLeftSquareBracketKeyword_0_0_0 = (Keyword)cLeftAssignment_0_0.eContents().get(0);
		private final Assignment cRightAssignment_0_1 = (Assignment)cAlternatives_0.eContents().get(1);
		private final Keyword cRightRightSquareBracketKeyword_0_1_0 = (Keyword)cRightAssignment_0_1.eContents().get(0);
		private final Assignment cValueAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cValueINTTerminalRuleCall_1_0 = (RuleCall)cValueAssignment_1.eContents().get(0);
		
		//NaturalLowerBound:
		//	(left?='[' | right?=']') value=INT;
		@Override public ParserRule getRule() { return rule; }
		
		//(left?='[' | right?=']') value=INT
		public Group getGroup() { return cGroup; }
		
		//(left?='[' | right?=']')
		public Alternatives getAlternatives_0() { return cAlternatives_0; }
		
		//left?='['
		public Assignment getLeftAssignment_0_0() { return cLeftAssignment_0_0; }
		
		//'['
		public Keyword getLeftLeftSquareBracketKeyword_0_0_0() { return cLeftLeftSquareBracketKeyword_0_0_0; }
		
		//right?=']'
		public Assignment getRightAssignment_0_1() { return cRightAssignment_0_1; }
		
		//']'
		public Keyword getRightRightSquareBracketKeyword_0_1_0() { return cRightRightSquareBracketKeyword_0_1_0; }
		
		//value=INT
		public Assignment getValueAssignment_1() { return cValueAssignment_1; }
		
		//INT
		public RuleCall getValueINTTerminalRuleCall_1_0() { return cValueINTTerminalRuleCall_1_0; }
	}
	public class NaturalUpperBoundElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.NaturalUpperBound");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cValueAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cValueINTTerminalRuleCall_0_0 = (RuleCall)cValueAssignment_0.eContents().get(0);
		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
		private final Assignment cLeftAssignment_1_0 = (Assignment)cAlternatives_1.eContents().get(0);
		private final Keyword cLeftLeftSquareBracketKeyword_1_0_0 = (Keyword)cLeftAssignment_1_0.eContents().get(0);
		private final Assignment cRightAssignment_1_1 = (Assignment)cAlternatives_1.eContents().get(1);
		private final Keyword cRightRightSquareBracketKeyword_1_1_0 = (Keyword)cRightAssignment_1_1.eContents().get(0);
		
		//NaturalUpperBound:
		//	value=INT (left?='[' | right?=']');
		@Override public ParserRule getRule() { return rule; }
		
		//value=INT (left?='[' | right?=']')
		public Group getGroup() { return cGroup; }
		
		//value=INT
		public Assignment getValueAssignment_0() { return cValueAssignment_0; }
		
		//INT
		public RuleCall getValueINTTerminalRuleCall_0_0() { return cValueINTTerminalRuleCall_0_0; }
		
		//(left?='[' | right?=']')
		public Alternatives getAlternatives_1() { return cAlternatives_1; }
		
		//left?='['
		public Assignment getLeftAssignment_1_0() { return cLeftAssignment_1_0; }
		
		//'['
		public Keyword getLeftLeftSquareBracketKeyword_1_0_0() { return cLeftLeftSquareBracketKeyword_1_0_0; }
		
		//right?=']'
		public Assignment getRightAssignment_1_1() { return cRightAssignment_1_1; }
		
		//']'
		public Keyword getRightRightSquareBracketKeyword_1_1_0() { return cRightRightSquareBracketKeyword_1_1_0; }
	}
	public class DecimalLowerBoundElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.DecimalLowerBound");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
		private final Assignment cLeftAssignment_0_0 = (Assignment)cAlternatives_0.eContents().get(0);
		private final Keyword cLeftLeftSquareBracketKeyword_0_0_0 = (Keyword)cLeftAssignment_0_0.eContents().get(0);
		private final Assignment cRightAssignment_0_1 = (Assignment)cAlternatives_0.eContents().get(1);
		private final Keyword cRightRightSquareBracketKeyword_0_1_0 = (Keyword)cRightAssignment_0_1.eContents().get(0);
		private final Assignment cValueAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cValueFLTTerminalRuleCall_1_0 = (RuleCall)cValueAssignment_1.eContents().get(0);
		
		//DecimalLowerBound:
		//	(left?='[' | right?=']') value=FLT;
		@Override public ParserRule getRule() { return rule; }
		
		//(left?='[' | right?=']') value=FLT
		public Group getGroup() { return cGroup; }
		
		//(left?='[' | right?=']')
		public Alternatives getAlternatives_0() { return cAlternatives_0; }
		
		//left?='['
		public Assignment getLeftAssignment_0_0() { return cLeftAssignment_0_0; }
		
		//'['
		public Keyword getLeftLeftSquareBracketKeyword_0_0_0() { return cLeftLeftSquareBracketKeyword_0_0_0; }
		
		//right?=']'
		public Assignment getRightAssignment_0_1() { return cRightAssignment_0_1; }
		
		//']'
		public Keyword getRightRightSquareBracketKeyword_0_1_0() { return cRightRightSquareBracketKeyword_0_1_0; }
		
		//value=FLT
		public Assignment getValueAssignment_1() { return cValueAssignment_1; }
		
		//FLT
		public RuleCall getValueFLTTerminalRuleCall_1_0() { return cValueFLTTerminalRuleCall_1_0; }
	}
	public class DecimalUpperBoundElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.DecimalUpperBound");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cValueAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cValueFLTTerminalRuleCall_0_0 = (RuleCall)cValueAssignment_0.eContents().get(0);
		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
		private final Assignment cLeftAssignment_1_0 = (Assignment)cAlternatives_1.eContents().get(0);
		private final Keyword cLeftLeftSquareBracketKeyword_1_0_0 = (Keyword)cLeftAssignment_1_0.eContents().get(0);
		private final Assignment cRightAssignment_1_1 = (Assignment)cAlternatives_1.eContents().get(1);
		private final Keyword cRightRightSquareBracketKeyword_1_1_0 = (Keyword)cRightAssignment_1_1.eContents().get(0);
		
		//DecimalUpperBound:
		//	value=FLT (left?='[' | right?=']');
		@Override public ParserRule getRule() { return rule; }
		
		//value=FLT (left?='[' | right?=']')
		public Group getGroup() { return cGroup; }
		
		//value=FLT
		public Assignment getValueAssignment_0() { return cValueAssignment_0; }
		
		//FLT
		public RuleCall getValueFLTTerminalRuleCall_0_0() { return cValueFLTTerminalRuleCall_0_0; }
		
		//(left?='[' | right?=']')
		public Alternatives getAlternatives_1() { return cAlternatives_1; }
		
		//left?='['
		public Assignment getLeftAssignment_1_0() { return cLeftAssignment_1_0; }
		
		//'['
		public Keyword getLeftLeftSquareBracketKeyword_1_0_0() { return cLeftLeftSquareBracketKeyword_1_0_0; }
		
		//right?=']'
		public Assignment getRightAssignment_1_1() { return cRightAssignment_1_1; }
		
		//']'
		public Keyword getRightRightSquareBracketKeyword_1_1_0() { return cRightRightSquareBracketKeyword_1_1_0; }
	}
	public class VariableLowerBoundElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.VariableLowerBound");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
		private final Assignment cLeftAssignment_0_0 = (Assignment)cAlternatives_0.eContents().get(0);
		private final Keyword cLeftLeftSquareBracketKeyword_0_0_0 = (Keyword)cLeftAssignment_0_0.eContents().get(0);
		private final Assignment cRightAssignment_0_1 = (Assignment)cAlternatives_0.eContents().get(1);
		private final Keyword cRightRightSquareBracketKeyword_0_1_0 = (Keyword)cRightAssignment_0_1.eContents().get(0);
		private final Assignment cVariableAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final CrossReference cVariableBoundDeclarationUseCrossReference_1_0 = (CrossReference)cVariableAssignment_1.eContents().get(0);
		private final RuleCall cVariableBoundDeclarationUseIDTerminalRuleCall_1_0_1 = (RuleCall)cVariableBoundDeclarationUseCrossReference_1_0.eContents().get(1);
		
		//VariableLowerBound:
		//	(left?='[' | right?=']') variable=[BoundDeclarationUse];
		@Override public ParserRule getRule() { return rule; }
		
		//(left?='[' | right?=']') variable=[BoundDeclarationUse]
		public Group getGroup() { return cGroup; }
		
		//(left?='[' | right?=']')
		public Alternatives getAlternatives_0() { return cAlternatives_0; }
		
		//left?='['
		public Assignment getLeftAssignment_0_0() { return cLeftAssignment_0_0; }
		
		//'['
		public Keyword getLeftLeftSquareBracketKeyword_0_0_0() { return cLeftLeftSquareBracketKeyword_0_0_0; }
		
		//right?=']'
		public Assignment getRightAssignment_0_1() { return cRightAssignment_0_1; }
		
		//']'
		public Keyword getRightRightSquareBracketKeyword_0_1_0() { return cRightRightSquareBracketKeyword_0_1_0; }
		
		//variable=[BoundDeclarationUse]
		public Assignment getVariableAssignment_1() { return cVariableAssignment_1; }
		
		//[BoundDeclarationUse]
		public CrossReference getVariableBoundDeclarationUseCrossReference_1_0() { return cVariableBoundDeclarationUseCrossReference_1_0; }
		
		//ID
		public RuleCall getVariableBoundDeclarationUseIDTerminalRuleCall_1_0_1() { return cVariableBoundDeclarationUseIDTerminalRuleCall_1_0_1; }
	}
	public class VariableUpperBoundElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.VariableUpperBound");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cVariableAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final CrossReference cVariableBoundDeclarationUseCrossReference_0_0 = (CrossReference)cVariableAssignment_0.eContents().get(0);
		private final RuleCall cVariableBoundDeclarationUseIDTerminalRuleCall_0_0_1 = (RuleCall)cVariableBoundDeclarationUseCrossReference_0_0.eContents().get(1);
		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
		private final Assignment cLeftAssignment_1_0 = (Assignment)cAlternatives_1.eContents().get(0);
		private final Keyword cLeftLeftSquareBracketKeyword_1_0_0 = (Keyword)cLeftAssignment_1_0.eContents().get(0);
		private final Assignment cRightAssignment_1_1 = (Assignment)cAlternatives_1.eContents().get(1);
		private final Keyword cRightRightSquareBracketKeyword_1_1_0 = (Keyword)cRightAssignment_1_1.eContents().get(0);
		
		//VariableUpperBound:
		//	variable=[BoundDeclarationUse] (left?='[' | right?=']');
		@Override public ParserRule getRule() { return rule; }
		
		//variable=[BoundDeclarationUse] (left?='[' | right?=']')
		public Group getGroup() { return cGroup; }
		
		//variable=[BoundDeclarationUse]
		public Assignment getVariableAssignment_0() { return cVariableAssignment_0; }
		
		//[BoundDeclarationUse]
		public CrossReference getVariableBoundDeclarationUseCrossReference_0_0() { return cVariableBoundDeclarationUseCrossReference_0_0; }
		
		//ID
		public RuleCall getVariableBoundDeclarationUseIDTerminalRuleCall_0_0_1() { return cVariableBoundDeclarationUseIDTerminalRuleCall_0_0_1; }
		
		//(left?='[' | right?=']')
		public Alternatives getAlternatives_1() { return cAlternatives_1; }
		
		//left?='['
		public Assignment getLeftAssignment_1_0() { return cLeftAssignment_1_0; }
		
		//'['
		public Keyword getLeftLeftSquareBracketKeyword_1_0_0() { return cLeftLeftSquareBracketKeyword_1_0_0; }
		
		//right?=']'
		public Assignment getRightAssignment_1_1() { return cRightAssignment_1_1; }
		
		//']'
		public Keyword getRightRightSquareBracketKeyword_1_1_0() { return cRightRightSquareBracketKeyword_1_1_0; }
	}
	public class InfiniteUpperBoundElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.InfiniteUpperBound");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cInfiniteUpperBoundAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cFullStopFullStopFullStopKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Keyword cLeftSquareBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		
		//InfiniteUpperBound:
		//	{InfiniteUpperBound} '...' '[';
		@Override public ParserRule getRule() { return rule; }
		
		//{InfiniteUpperBound} '...' '['
		public Group getGroup() { return cGroup; }
		
		//{InfiniteUpperBound}
		public Action getInfiniteUpperBoundAction_0() { return cInfiniteUpperBoundAction_0; }
		
		//'...'
		public Keyword getFullStopFullStopFullStopKeyword_1() { return cFullStopFullStopFullStopKeyword_1; }
		
		//'['
		public Keyword getLeftSquareBracketKeyword_2() { return cLeftSquareBracketKeyword_2; }
	}
	public class RequirementElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Requirement");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cAssertKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cPropertyAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final CrossReference cPropertyPropertyDeclarationCrossReference_1_0 = (CrossReference)cPropertyAssignment_1.eContents().get(0);
		private final RuleCall cPropertyPropertyDeclarationIDTerminalRuleCall_1_0_1 = (RuleCall)cPropertyPropertyDeclarationCrossReference_1_0.eContents().get(1);
		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
		private final Keyword cTrueKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final Assignment cPositiveAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cPositiveSTRINGTerminalRuleCall_2_1_0 = (RuleCall)cPositiveAssignment_2_1.eContents().get(0);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Keyword cFalseKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final Assignment cNegativeAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
		private final RuleCall cNegativeSTRINGTerminalRuleCall_3_1_0 = (RuleCall)cNegativeAssignment_3_1.eContents().get(0);
		
		//Requirement:
		//	'assert' property=[PropertyDeclaration] ('-true' positive=STRING)? ('-false' negative=STRING)?;
		@Override public ParserRule getRule() { return rule; }
		
		//'assert' property=[PropertyDeclaration] ('-true' positive=STRING)? ('-false' negative=STRING)?
		public Group getGroup() { return cGroup; }
		
		//'assert'
		public Keyword getAssertKeyword_0() { return cAssertKeyword_0; }
		
		//property=[PropertyDeclaration]
		public Assignment getPropertyAssignment_1() { return cPropertyAssignment_1; }
		
		//[PropertyDeclaration]
		public CrossReference getPropertyPropertyDeclarationCrossReference_1_0() { return cPropertyPropertyDeclarationCrossReference_1_0; }
		
		//ID
		public RuleCall getPropertyPropertyDeclarationIDTerminalRuleCall_1_0_1() { return cPropertyPropertyDeclarationIDTerminalRuleCall_1_0_1; }
		
		//('-true' positive=STRING)?
		public Group getGroup_2() { return cGroup_2; }
		
		//'-true'
		public Keyword getTrueKeyword_2_0() { return cTrueKeyword_2_0; }
		
		//positive=STRING
		public Assignment getPositiveAssignment_2_1() { return cPositiveAssignment_2_1; }
		
		//STRING
		public RuleCall getPositiveSTRINGTerminalRuleCall_2_1_0() { return cPositiveSTRINGTerminalRuleCall_2_1_0; }
		
		//('-false' negative=STRING)?
		public Group getGroup_3() { return cGroup_3; }
		
		//'-false'
		public Keyword getFalseKeyword_3_0() { return cFalseKeyword_3_0; }
		
		//negative=STRING
		public Assignment getNegativeAssignment_3_1() { return cNegativeAssignment_3_1; }
		
		//STRING
		public RuleCall getNegativeSTRINGTerminalRuleCall_3_1_0() { return cNegativeSTRINGTerminalRuleCall_3_1_0; }
	}
	public class PropertyDeclarationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PropertyDeclaration");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cPropertyKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
		private final Keyword cIsKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Assignment cPropertyAssignment_3 = (Assignment)cGroup.eContents().get(3);
		private final RuleCall cPropertyPropertyParserRuleCall_3_0 = (RuleCall)cPropertyAssignment_3.eContents().get(0);
		
		//PropertyDeclaration:
		//	'property' name=ID 'is' property=Property;
		@Override public ParserRule getRule() { return rule; }
		
		//'property' name=ID 'is' property=Property
		public Group getGroup() { return cGroup; }
		
		//'property'
		public Keyword getPropertyKeyword_0() { return cPropertyKeyword_0; }
		
		//name=ID
		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
		
		//ID
		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
		
		//'is'
		public Keyword getIsKeyword_2() { return cIsKeyword_2; }
		
		//property=Property
		public Assignment getPropertyAssignment_3() { return cPropertyAssignment_3; }
		
		//Property
		public RuleCall getPropertyPropertyParserRuleCall_3_0() { return cPropertyPropertyParserRuleCall_3_0; }
	}
	public class PropertyElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Property");
		private final RuleCall cQuantifiedPropertyParserRuleCall = (RuleCall)rule.eContents().get(1);
		
		//Property:
		//	QuantifiedProperty;
		@Override public ParserRule getRule() { return rule; }
		
		//QuantifiedProperty
		public RuleCall getQuantifiedPropertyParserRuleCall() { return cQuantifiedPropertyParserRuleCall; }
	}
	public class QuantifiedPropertyElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.QuantifiedProperty");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Alternatives cAlternatives_0_0 = (Alternatives)cGroup_0.eContents().get(0);
		private final Group cGroup_0_0_0 = (Group)cAlternatives_0_0.eContents().get(0);
		private final Action cAllPropertyAction_0_0_0_0 = (Action)cGroup_0_0_0.eContents().get(0);
		private final Keyword cAllKeyword_0_0_0_1 = (Keyword)cGroup_0_0_0.eContents().get(1);
		private final Group cGroup_0_0_1 = (Group)cAlternatives_0_0.eContents().get(1);
		private final Action cExistsPropertyAction_0_0_1_0 = (Action)cGroup_0_0_1.eContents().get(0);
		private final Keyword cExistsKeyword_0_0_1_1 = (Keyword)cGroup_0_0_1.eContents().get(1);
		private final Assignment cVariableAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
		private final RuleCall cVariableVariableDeclarationParserRuleCall_0_1_0 = (RuleCall)cVariableAssignment_0_1.eContents().get(0);
		private final Keyword cInKeyword_0_2 = (Keyword)cGroup_0.eContents().get(2);
		private final Assignment cTypeAssignment_0_3 = (Assignment)cGroup_0.eContents().get(3);
		private final RuleCall cTypeRangeTypeParserRuleCall_0_3_0 = (RuleCall)cTypeAssignment_0_3.eContents().get(0);
		private final Keyword cFullStopKeyword_0_4 = (Keyword)cGroup_0.eContents().get(4);
		private final Assignment cChildAssignment_0_5 = (Assignment)cGroup_0.eContents().get(5);
		private final RuleCall cChildQuantifiedPropertyParserRuleCall_0_5_0 = (RuleCall)cChildAssignment_0_5.eContents().get(0);
		private final RuleCall cPropertyDisjunctionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//QuantifiedProperty Property:
		//	({AllProperty} 'all' | {ExistsProperty} 'exists') variable=VariableDeclaration
		//	'in' type=RangeType '.' child=QuantifiedProperty | PropertyDisjunction
		@Override public ParserRule getRule() { return rule; }
		
		//({AllProperty} 'all' | {ExistsProperty} 'exists') variable=VariableDeclaration 'in' type=RangeType '.'
		//child=QuantifiedProperty | PropertyDisjunction
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//({AllProperty} 'all' | {ExistsProperty} 'exists') variable=VariableDeclaration 'in' type=RangeType '.'
		//child=QuantifiedProperty
		public Group getGroup_0() { return cGroup_0; }
		
		//({AllProperty} 'all' | {ExistsProperty} 'exists')
		public Alternatives getAlternatives_0_0() { return cAlternatives_0_0; }
		
		//{AllProperty} 'all'
		public Group getGroup_0_0_0() { return cGroup_0_0_0; }
		
		//{AllProperty}
		public Action getAllPropertyAction_0_0_0_0() { return cAllPropertyAction_0_0_0_0; }
		
		//'all'
		public Keyword getAllKeyword_0_0_0_1() { return cAllKeyword_0_0_0_1; }
		
		//{ExistsProperty} 'exists'
		public Group getGroup_0_0_1() { return cGroup_0_0_1; }
		
		//{ExistsProperty}
		public Action getExistsPropertyAction_0_0_1_0() { return cExistsPropertyAction_0_0_1_0; }
		
		//'exists'
		public Keyword getExistsKeyword_0_0_1_1() { return cExistsKeyword_0_0_1_1; }
		
		//variable=VariableDeclaration
		public Assignment getVariableAssignment_0_1() { return cVariableAssignment_0_1; }
		
		//VariableDeclaration
		public RuleCall getVariableVariableDeclarationParserRuleCall_0_1_0() { return cVariableVariableDeclarationParserRuleCall_0_1_0; }
		
		//'in'
		public Keyword getInKeyword_0_2() { return cInKeyword_0_2; }
		
		//type=RangeType
		public Assignment getTypeAssignment_0_3() { return cTypeAssignment_0_3; }
		
		//RangeType
		public RuleCall getTypeRangeTypeParserRuleCall_0_3_0() { return cTypeRangeTypeParserRuleCall_0_3_0; }
		
		//'.'
		public Keyword getFullStopKeyword_0_4() { return cFullStopKeyword_0_4; }
		
		//child=QuantifiedProperty
		public Assignment getChildAssignment_0_5() { return cChildAssignment_0_5; }
		
		//QuantifiedProperty
		public RuleCall getChildQuantifiedPropertyParserRuleCall_0_5_0() { return cChildQuantifiedPropertyParserRuleCall_0_5_0; }
		
		//PropertyDisjunction
		public RuleCall getPropertyDisjunctionParserRuleCall_1() { return cPropertyDisjunctionParserRuleCall_1; }
	}
	public class PropertyDisjunctionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PropertyDisjunction");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cPropertyImplicationParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cPropertyDisjunctionLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cOrKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightPropertyImplicationParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//PropertyDisjunction Property:
		//	PropertyImplication ({PropertyDisjunction.left=current} 'or' right=PropertyImplication)*
		@Override public ParserRule getRule() { return rule; }
		
		//PropertyImplication ({PropertyDisjunction.left=current} 'or' right=PropertyImplication)*
		public Group getGroup() { return cGroup; }
		
		//PropertyImplication
		public RuleCall getPropertyImplicationParserRuleCall_0() { return cPropertyImplicationParserRuleCall_0; }
		
		//({PropertyDisjunction.left=current} 'or' right=PropertyImplication)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{PropertyDisjunction.left=current}
		public Action getPropertyDisjunctionLeftAction_1_0() { return cPropertyDisjunctionLeftAction_1_0; }
		
		//'or'
		public Keyword getOrKeyword_1_1() { return cOrKeyword_1_1; }
		
		//right=PropertyImplication
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//PropertyImplication
		public RuleCall getRightPropertyImplicationParserRuleCall_1_2_0() { return cRightPropertyImplicationParserRuleCall_1_2_0; }
	}
	public class PropertyImplicationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PropertyImplication");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cPropertyConjunctionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cPropertyImplicationLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cEqualsSignGreaterThanSignKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightPropertyImplicationParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//PropertyImplication Property:
		//	PropertyConjunction ({PropertyImplication.left=current} '=>' right=PropertyImplication)?
		@Override public ParserRule getRule() { return rule; }
		
		//PropertyConjunction ({PropertyImplication.left=current} '=>' right=PropertyImplication)?
		public Group getGroup() { return cGroup; }
		
		//PropertyConjunction
		public RuleCall getPropertyConjunctionParserRuleCall_0() { return cPropertyConjunctionParserRuleCall_0; }
		
		//({PropertyImplication.left=current} '=>' right=PropertyImplication)?
		public Group getGroup_1() { return cGroup_1; }
		
		//{PropertyImplication.left=current}
		public Action getPropertyImplicationLeftAction_1_0() { return cPropertyImplicationLeftAction_1_0; }
		
		//'=>'
		public Keyword getEqualsSignGreaterThanSignKeyword_1_1() { return cEqualsSignGreaterThanSignKeyword_1_1; }
		
		//right=PropertyImplication
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//PropertyImplication
		public RuleCall getRightPropertyImplicationParserRuleCall_1_2_0() { return cRightPropertyImplicationParserRuleCall_1_2_0; }
	}
	public class PropertyConjunctionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PropertyConjunction");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cPropertyNegationParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cPropertyConjunctionLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cAndKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightPropertyNegationParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//PropertyConjunction Property:
		//	PropertyNegation ({PropertyConjunction.left=current} 'and' right=PropertyNegation)*
		@Override public ParserRule getRule() { return rule; }
		
		//PropertyNegation ({PropertyConjunction.left=current} 'and' right=PropertyNegation)*
		public Group getGroup() { return cGroup; }
		
		//PropertyNegation
		public RuleCall getPropertyNegationParserRuleCall_0() { return cPropertyNegationParserRuleCall_0; }
		
		//({PropertyConjunction.left=current} 'and' right=PropertyNegation)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{PropertyConjunction.left=current}
		public Action getPropertyConjunctionLeftAction_1_0() { return cPropertyConjunctionLeftAction_1_0; }
		
		//'and'
		public Keyword getAndKeyword_1_1() { return cAndKeyword_1_1; }
		
		//right=PropertyNegation
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//PropertyNegation
		public RuleCall getRightPropertyNegationParserRuleCall_1_2_0() { return cRightPropertyNegationParserRuleCall_1_2_0; }
	}
	public class PropertyNegationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PropertyNegation");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Action cPropertyNegationAction_0_0 = (Action)cGroup_0.eContents().get(0);
		private final Keyword cNotKeyword_0_1 = (Keyword)cGroup_0.eContents().get(1);
		private final Assignment cChildAssignment_0_2 = (Assignment)cGroup_0.eContents().get(2);
		private final RuleCall cChildPropertyNegationParserRuleCall_0_2_0 = (RuleCall)cChildAssignment_0_2.eContents().get(0);
		private final RuleCall cAtomicPropertyParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//PropertyNegation Property:
		//	{PropertyNegation} 'not' child=PropertyNegation | AtomicProperty
		@Override public ParserRule getRule() { return rule; }
		
		//{PropertyNegation} 'not' child=PropertyNegation | AtomicProperty
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//{PropertyNegation} 'not' child=PropertyNegation
		public Group getGroup_0() { return cGroup_0; }
		
		//{PropertyNegation}
		public Action getPropertyNegationAction_0_0() { return cPropertyNegationAction_0_0; }
		
		//'not'
		public Keyword getNotKeyword_0_1() { return cNotKeyword_0_1; }
		
		//child=PropertyNegation
		public Assignment getChildAssignment_0_2() { return cChildAssignment_0_2; }
		
		//PropertyNegation
		public RuleCall getChildPropertyNegationParserRuleCall_0_2_0() { return cChildPropertyNegationParserRuleCall_0_2_0; }
		
		//AtomicProperty
		public RuleCall getAtomicPropertyParserRuleCall_1() { return cAtomicPropertyParserRuleCall_1; }
	}
	public class AtomicPropertyElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.AtomicProperty");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cPatternPropertyParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final RuleCall cPropertyParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
		private final Keyword cRightParenthesisKeyword_1_2 = (Keyword)cGroup_1.eContents().get(2);
		
		//AtomicProperty Property:
		//	PatternProperty | '(' Property ')'
		@Override public ParserRule getRule() { return rule; }
		
		//PatternProperty | '(' Property ')'
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//PatternProperty
		public RuleCall getPatternPropertyParserRuleCall_0() { return cPatternPropertyParserRuleCall_0; }
		
		//'(' Property ')'
		public Group getGroup_1() { return cGroup_1; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_1_0() { return cLeftParenthesisKeyword_1_0; }
		
		//Property
		public RuleCall getPropertyParserRuleCall_1_1() { return cPropertyParserRuleCall_1_1; }
		
		//')'
		public Keyword getRightParenthesisKeyword_1_2() { return cRightParenthesisKeyword_1_2; }
	}
	public class PatternPropertyElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PatternProperty");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cLTLPatternParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cDeadlockFreePatternParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cInfinitelyOftenPatternParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cMortalPatternParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		private final RuleCall cPresencePatternParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
		private final RuleCall cAbsencePatternParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
		private final RuleCall cAlwaysPatternParserRuleCall_6 = (RuleCall)cAlternatives.eContents().get(6);
		private final RuleCall cSequencePatternParserRuleCall_7 = (RuleCall)cAlternatives.eContents().get(7);
		
		//PatternProperty:
		//	LTLPattern | DeadlockFreePattern | InfinitelyOftenPattern | MortalPattern | PresencePattern | AbsencePattern |
		//	AlwaysPattern | SequencePattern;
		@Override public ParserRule getRule() { return rule; }
		
		//LTLPattern | DeadlockFreePattern | InfinitelyOftenPattern | MortalPattern | PresencePattern | AbsencePattern |
		//AlwaysPattern | SequencePattern
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//LTLPattern
		public RuleCall getLTLPatternParserRuleCall_0() { return cLTLPatternParserRuleCall_0; }
		
		//DeadlockFreePattern
		public RuleCall getDeadlockFreePatternParserRuleCall_1() { return cDeadlockFreePatternParserRuleCall_1; }
		
		//InfinitelyOftenPattern
		public RuleCall getInfinitelyOftenPatternParserRuleCall_2() { return cInfinitelyOftenPatternParserRuleCall_2; }
		
		//MortalPattern
		public RuleCall getMortalPatternParserRuleCall_3() { return cMortalPatternParserRuleCall_3; }
		
		//PresencePattern
		public RuleCall getPresencePatternParserRuleCall_4() { return cPresencePatternParserRuleCall_4; }
		
		//AbsencePattern
		public RuleCall getAbsencePatternParserRuleCall_5() { return cAbsencePatternParserRuleCall_5; }
		
		//AlwaysPattern
		public RuleCall getAlwaysPatternParserRuleCall_6() { return cAlwaysPatternParserRuleCall_6; }
		
		//SequencePattern
		public RuleCall getSequencePatternParserRuleCall_7() { return cSequencePatternParserRuleCall_7; }
	}
	public class LTLPatternElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.LTLPattern");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLtlKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cPropertyAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cPropertyLTLUnaryParserRuleCall_1_0 = (RuleCall)cPropertyAssignment_1.eContents().get(0);
		
		//LTLPattern:
		//	'ltl' property=LTLUnary;
		@Override public ParserRule getRule() { return rule; }
		
		//'ltl' property=LTLUnary
		public Group getGroup() { return cGroup; }
		
		//'ltl'
		public Keyword getLtlKeyword_0() { return cLtlKeyword_0; }
		
		//property=LTLUnary
		public Assignment getPropertyAssignment_1() { return cPropertyAssignment_1; }
		
		//LTLUnary
		public RuleCall getPropertyLTLUnaryParserRuleCall_1_0() { return cPropertyLTLUnaryParserRuleCall_1_0; }
	}
	public class DeadlockFreePatternElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.DeadlockFreePattern");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Action cDeadlockFreePatternAction_0 = (Action)cGroup.eContents().get(0);
		private final Keyword cDeadlockfreeKeyword_1 = (Keyword)cGroup.eContents().get(1);
		
		//DeadlockFreePattern:
		//	{DeadlockFreePattern} 'deadlockfree';
		@Override public ParserRule getRule() { return rule; }
		
		//{DeadlockFreePattern} 'deadlockfree'
		public Group getGroup() { return cGroup; }
		
		//{DeadlockFreePattern}
		public Action getDeadlockFreePatternAction_0() { return cDeadlockFreePatternAction_0; }
		
		//'deadlockfree'
		public Keyword getDeadlockfreeKeyword_1() { return cDeadlockfreeKeyword_1; }
	}
	public class InfinitelyOftenPatternElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.InfinitelyOftenPattern");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cInfinitelyoftenKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cSubjectAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cSubjectAtomicObservableParserRuleCall_1_0 = (RuleCall)cSubjectAssignment_1.eContents().get(0);
		
		//InfinitelyOftenPattern:
		//	'infinitelyoften' subject=AtomicObservable;
		@Override public ParserRule getRule() { return rule; }
		
		//'infinitelyoften' subject=AtomicObservable
		public Group getGroup() { return cGroup; }
		
		//'infinitelyoften'
		public Keyword getInfinitelyoftenKeyword_0() { return cInfinitelyoftenKeyword_0; }
		
		//subject=AtomicObservable
		public Assignment getSubjectAssignment_1() { return cSubjectAssignment_1; }
		
		//AtomicObservable
		public RuleCall getSubjectAtomicObservableParserRuleCall_1_0() { return cSubjectAtomicObservableParserRuleCall_1_0; }
	}
	public class MortalPatternElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.MortalPattern");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cMortalKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cSubjectAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cSubjectAtomicObservableParserRuleCall_1_0 = (RuleCall)cSubjectAssignment_1.eContents().get(0);
		
		//MortalPattern:
		//	'mortal' subject=AtomicObservable;
		@Override public ParserRule getRule() { return rule; }
		
		//'mortal' subject=AtomicObservable
		public Group getGroup() { return cGroup; }
		
		//'mortal'
		public Keyword getMortalKeyword_0() { return cMortalKeyword_0; }
		
		//subject=AtomicObservable
		public Assignment getSubjectAssignment_1() { return cSubjectAssignment_1; }
		
		//AtomicObservable
		public RuleCall getSubjectAtomicObservableParserRuleCall_1_0() { return cSubjectAtomicObservableParserRuleCall_1_0; }
	}
	public class PresencePatternElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PresencePattern");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cPresentKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cSubjectAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cSubjectAtomicObservableParserRuleCall_1_0 = (RuleCall)cSubjectAssignment_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 cLastingKeyword_2_0_0 = (Keyword)cGroup_2_0.eContents().get(0);
		private final Assignment cLastingAssignment_2_0_1 = (Assignment)cGroup_2_0.eContents().get(1);
		private final RuleCall cLastingINTTerminalRuleCall_2_0_1_0 = (RuleCall)cLastingAssignment_2_0_1.eContents().get(0);
		private final Group cGroup_2_1 = (Group)cAlternatives_2.eContents().get(1);
		private final Group cGroup_2_1_0 = (Group)cGroup_2_1.eContents().get(0);
		private final Keyword cAfterKeyword_2_1_0_0 = (Keyword)cGroup_2_1_0.eContents().get(0);
		private final Assignment cAfterAssignment_2_1_0_1 = (Assignment)cGroup_2_1_0.eContents().get(1);
		private final RuleCall cAfterAtomicObservableParserRuleCall_2_1_0_1_0 = (RuleCall)cAfterAssignment_2_1_0_1.eContents().get(0);
		private final Alternatives cAlternatives_2_1_1 = (Alternatives)cGroup_2_1.eContents().get(1);
		private final Group cGroup_2_1_1_0 = (Group)cAlternatives_2_1_1.eContents().get(0);
		private final Keyword cWithinKeyword_2_1_1_0_0 = (Keyword)cGroup_2_1_1_0.eContents().get(0);
		private final Assignment cLowerAssignment_2_1_1_0_1 = (Assignment)cGroup_2_1_1_0.eContents().get(1);
		private final RuleCall cLowerLowerBoundParserRuleCall_2_1_1_0_1_0 = (RuleCall)cLowerAssignment_2_1_1_0_1.eContents().get(0);
		private final Keyword cCommaKeyword_2_1_1_0_2 = (Keyword)cGroup_2_1_1_0.eContents().get(2);
		private final Assignment cUpperAssignment_2_1_1_0_3 = (Assignment)cGroup_2_1_1_0.eContents().get(3);
		private final RuleCall cUpperUpperBoundParserRuleCall_2_1_1_0_3_0 = (RuleCall)cUpperAssignment_2_1_1_0_3.eContents().get(0);
		private final Group cGroup_2_1_1_1 = (Group)cAlternatives_2_1_1.eContents().get(1);
		private final Keyword cUntilKeyword_2_1_1_1_0 = (Keyword)cGroup_2_1_1_1.eContents().get(0);
		private final Assignment cUntilAssignment_2_1_1_1_1 = (Assignment)cGroup_2_1_1_1.eContents().get(1);
		private final RuleCall cUntilAtomicObservableParserRuleCall_2_1_1_1_1_0 = (RuleCall)cUntilAssignment_2_1_1_1_1.eContents().get(0);
		private final Group cGroup_2_2 = (Group)cAlternatives_2.eContents().get(2);
		private final Group cGroup_2_2_0 = (Group)cGroup_2_2.eContents().get(0);
		private final Keyword cBeforeKeyword_2_2_0_0 = (Keyword)cGroup_2_2_0.eContents().get(0);
		private final Assignment cBeforeAssignment_2_2_0_1 = (Assignment)cGroup_2_2_0.eContents().get(1);
		private final RuleCall cBeforeAtomicObservableParserRuleCall_2_2_0_1_0 = (RuleCall)cBeforeAssignment_2_2_0_1.eContents().get(0);
		private final Group cGroup_2_2_1 = (Group)cGroup_2_2.eContents().get(1);
		private final Keyword cWithinKeyword_2_2_1_0 = (Keyword)cGroup_2_2_1.eContents().get(0);
		private final Assignment cLowerAssignment_2_2_1_1 = (Assignment)cGroup_2_2_1.eContents().get(1);
		private final RuleCall cLowerLowerBoundParserRuleCall_2_2_1_1_0 = (RuleCall)cLowerAssignment_2_2_1_1.eContents().get(0);
		private final Keyword cCommaKeyword_2_2_1_2 = (Keyword)cGroup_2_2_1.eContents().get(2);
		private final Assignment cUpperAssignment_2_2_1_3 = (Assignment)cGroup_2_2_1.eContents().get(3);
		private final RuleCall cUpperUpperBoundParserRuleCall_2_2_1_3_0 = (RuleCall)cUpperAssignment_2_2_1_3.eContents().get(0);
		private final Group cGroup_2_3 = (Group)cAlternatives_2.eContents().get(3);
		private final Keyword cBetweenKeyword_2_3_0 = (Keyword)cGroup_2_3.eContents().get(0);
		private final Assignment cMinAssignment_2_3_1 = (Assignment)cGroup_2_3.eContents().get(1);
		private final RuleCall cMinAtomicObservableParserRuleCall_2_3_1_0 = (RuleCall)cMinAssignment_2_3_1.eContents().get(0);
		private final Keyword cAndKeyword_2_3_2 = (Keyword)cGroup_2_3.eContents().get(2);
		private final Assignment cMaxAssignment_2_3_3 = (Assignment)cGroup_2_3.eContents().get(3);
		private final RuleCall cMaxAtomicObservableParserRuleCall_2_3_3_0 = (RuleCall)cMaxAssignment_2_3_3.eContents().get(0);
		
		//PresencePattern:
		//	'present' subject=AtomicObservable ('lasting' lasting=INT | ('after' after=AtomicObservable) ('within'
		//	lower=LowerBound ',' upper=UpperBound | 'until' until=AtomicObservable)?
		//	| ('before' before=AtomicObservable) ('within' lower=LowerBound ',' upper=UpperBound)?
		//	| 'between' min=AtomicObservable 'and' max=AtomicObservable)?;
		@Override public ParserRule getRule() { return rule; }
		
		//'present' subject=AtomicObservable ('lasting' lasting=INT | ('after' after=AtomicObservable) ('within' lower=LowerBound
		//',' upper=UpperBound | 'until' until=AtomicObservable)? | ('before' before=AtomicObservable) ('within' lower=LowerBound
		//',' upper=UpperBound)? | 'between' min=AtomicObservable 'and' max=AtomicObservable)?
		public Group getGroup() { return cGroup; }
		
		//'present'
		public Keyword getPresentKeyword_0() { return cPresentKeyword_0; }
		
		//subject=AtomicObservable
		public Assignment getSubjectAssignment_1() { return cSubjectAssignment_1; }
		
		//AtomicObservable
		public RuleCall getSubjectAtomicObservableParserRuleCall_1_0() { return cSubjectAtomicObservableParserRuleCall_1_0; }
		
		//('lasting' lasting=INT | ('after' after=AtomicObservable) ('within' lower=LowerBound ',' upper=UpperBound | 'until'
		//until=AtomicObservable)? | ('before' before=AtomicObservable) ('within' lower=LowerBound ',' upper=UpperBound)? |
		//'between' min=AtomicObservable 'and' max=AtomicObservable)?
		public Alternatives getAlternatives_2() { return cAlternatives_2; }
		
		//'lasting' lasting=INT
		public Group getGroup_2_0() { return cGroup_2_0; }
		
		//'lasting'
		public Keyword getLastingKeyword_2_0_0() { return cLastingKeyword_2_0_0; }
		
		//lasting=INT
		public Assignment getLastingAssignment_2_0_1() { return cLastingAssignment_2_0_1; }
		
		//INT
		public RuleCall getLastingINTTerminalRuleCall_2_0_1_0() { return cLastingINTTerminalRuleCall_2_0_1_0; }
		
		//('after' after=AtomicObservable) ('within' lower=LowerBound ',' upper=UpperBound | 'until' until=AtomicObservable)?
		public Group getGroup_2_1() { return cGroup_2_1; }
		
		//('after' after=AtomicObservable)
		public Group getGroup_2_1_0() { return cGroup_2_1_0; }
		
		//'after'
		public Keyword getAfterKeyword_2_1_0_0() { return cAfterKeyword_2_1_0_0; }
		
		//after=AtomicObservable
		public Assignment getAfterAssignment_2_1_0_1() { return cAfterAssignment_2_1_0_1; }
		
		//AtomicObservable
		public RuleCall getAfterAtomicObservableParserRuleCall_2_1_0_1_0() { return cAfterAtomicObservableParserRuleCall_2_1_0_1_0; }
		
		//('within' lower=LowerBound ',' upper=UpperBound | 'until' until=AtomicObservable)?
		public Alternatives getAlternatives_2_1_1() { return cAlternatives_2_1_1; }
		
		//'within' lower=LowerBound ',' upper=UpperBound
		public Group getGroup_2_1_1_0() { return cGroup_2_1_1_0; }
		
		//'within'
		public Keyword getWithinKeyword_2_1_1_0_0() { return cWithinKeyword_2_1_1_0_0; }
		
		//lower=LowerBound
		public Assignment getLowerAssignment_2_1_1_0_1() { return cLowerAssignment_2_1_1_0_1; }
		
		//LowerBound
		public RuleCall getLowerLowerBoundParserRuleCall_2_1_1_0_1_0() { return cLowerLowerBoundParserRuleCall_2_1_1_0_1_0; }
		
		//','
		public Keyword getCommaKeyword_2_1_1_0_2() { return cCommaKeyword_2_1_1_0_2; }
		
		//upper=UpperBound
		public Assignment getUpperAssignment_2_1_1_0_3() { return cUpperAssignment_2_1_1_0_3; }
		
		//UpperBound
		public RuleCall getUpperUpperBoundParserRuleCall_2_1_1_0_3_0() { return cUpperUpperBoundParserRuleCall_2_1_1_0_3_0; }
		
		//'until' until=AtomicObservable
		public Group getGroup_2_1_1_1() { return cGroup_2_1_1_1; }
		
		//'until'
		public Keyword getUntilKeyword_2_1_1_1_0() { return cUntilKeyword_2_1_1_1_0; }
		
		//until=AtomicObservable
		public Assignment getUntilAssignment_2_1_1_1_1() { return cUntilAssignment_2_1_1_1_1; }
		
		//AtomicObservable
		public RuleCall getUntilAtomicObservableParserRuleCall_2_1_1_1_1_0() { return cUntilAtomicObservableParserRuleCall_2_1_1_1_1_0; }
		
		//('before' before=AtomicObservable) ('within' lower=LowerBound ',' upper=UpperBound)?
		public Group getGroup_2_2() { return cGroup_2_2; }
		
		//('before' before=AtomicObservable)
		public Group getGroup_2_2_0() { return cGroup_2_2_0; }
		
		//'before'
		public Keyword getBeforeKeyword_2_2_0_0() { return cBeforeKeyword_2_2_0_0; }
		
		//before=AtomicObservable
		public Assignment getBeforeAssignment_2_2_0_1() { return cBeforeAssignment_2_2_0_1; }
		
		//AtomicObservable
		public RuleCall getBeforeAtomicObservableParserRuleCall_2_2_0_1_0() { return cBeforeAtomicObservableParserRuleCall_2_2_0_1_0; }
		
		//('within' lower=LowerBound ',' upper=UpperBound)?
		public Group getGroup_2_2_1() { return cGroup_2_2_1; }
		
		//'within'
		public Keyword getWithinKeyword_2_2_1_0() { return cWithinKeyword_2_2_1_0; }
		
		//lower=LowerBound
		public Assignment getLowerAssignment_2_2_1_1() { return cLowerAssignment_2_2_1_1; }
		
		//LowerBound
		public RuleCall getLowerLowerBoundParserRuleCall_2_2_1_1_0() { return cLowerLowerBoundParserRuleCall_2_2_1_1_0; }
		
		//','
		public Keyword getCommaKeyword_2_2_1_2() { return cCommaKeyword_2_2_1_2; }
		
		//upper=UpperBound
		public Assignment getUpperAssignment_2_2_1_3() { return cUpperAssignment_2_2_1_3; }
		
		//UpperBound
		public RuleCall getUpperUpperBoundParserRuleCall_2_2_1_3_0() { return cUpperUpperBoundParserRuleCall_2_2_1_3_0; }
		
		//'between' min=AtomicObservable 'and' max=AtomicObservable
		public Group getGroup_2_3() { return cGroup_2_3; }
		
		//'between'
		public Keyword getBetweenKeyword_2_3_0() { return cBetweenKeyword_2_3_0; }
		
		//min=AtomicObservable
		public Assignment getMinAssignment_2_3_1() { return cMinAssignment_2_3_1; }
		
		//AtomicObservable
		public RuleCall getMinAtomicObservableParserRuleCall_2_3_1_0() { return cMinAtomicObservableParserRuleCall_2_3_1_0; }
		
		//'and'
		public Keyword getAndKeyword_2_3_2() { return cAndKeyword_2_3_2; }
		
		//max=AtomicObservable
		public Assignment getMaxAssignment_2_3_3() { return cMaxAssignment_2_3_3; }
		
		//AtomicObservable
		public RuleCall getMaxAtomicObservableParserRuleCall_2_3_3_0() { return cMaxAtomicObservableParserRuleCall_2_3_3_0; }
	}
	public class AbsencePatternElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.AbsencePattern");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cAbsentKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cSubjectAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cSubjectAtomicObservableParserRuleCall_1_0 = (RuleCall)cSubjectAssignment_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 Group cGroup_2_0_0 = (Group)cGroup_2_0.eContents().get(0);
		private final Keyword cAfterKeyword_2_0_0_0 = (Keyword)cGroup_2_0_0.eContents().get(0);
		private final Assignment cAfterAssignment_2_0_0_1 = (Assignment)cGroup_2_0_0.eContents().get(1);
		private final RuleCall cAfterAtomicObservableParserRuleCall_2_0_0_1_0 = (RuleCall)cAfterAssignment_2_0_0_1.eContents().get(0);
		private final Alternatives cAlternatives_2_0_1 = (Alternatives)cGroup_2_0.eContents().get(1);
		private final Group cGroup_2_0_1_0 = (Group)cAlternatives_2_0_1.eContents().get(0);
		private final Keyword cWithinKeyword_2_0_1_0_0 = (Keyword)cGroup_2_0_1_0.eContents().get(0);
		private final Assignment cLowerAssignment_2_0_1_0_1 = (Assignment)cGroup_2_0_1_0.eContents().get(1);
		private final RuleCall cLowerLowerBoundParserRuleCall_2_0_1_0_1_0 = (RuleCall)cLowerAssignment_2_0_1_0_1.eContents().get(0);
		private final Keyword cCommaKeyword_2_0_1_0_2 = (Keyword)cGroup_2_0_1_0.eContents().get(2);
		private final Assignment cUpperAssignment_2_0_1_0_3 = (Assignment)cGroup_2_0_1_0.eContents().get(3);
		private final RuleCall cUpperUpperBoundParserRuleCall_2_0_1_0_3_0 = (RuleCall)cUpperAssignment_2_0_1_0_3.eContents().get(0);
		private final Group cGroup_2_0_1_1 = (Group)cAlternatives_2_0_1.eContents().get(1);
		private final Keyword cUntilKeyword_2_0_1_1_0 = (Keyword)cGroup_2_0_1_1.eContents().get(0);
		private final Assignment cUntilAssignment_2_0_1_1_1 = (Assignment)cGroup_2_0_1_1.eContents().get(1);
		private final RuleCall cUntilAtomicObservableParserRuleCall_2_0_1_1_1_0 = (RuleCall)cUntilAssignment_2_0_1_1_1.eContents().get(0);
		private final Group cGroup_2_1 = (Group)cAlternatives_2.eContents().get(1);
		private final Group cGroup_2_1_0 = (Group)cGroup_2_1.eContents().get(0);
		private final Keyword cBeforeKeyword_2_1_0_0 = (Keyword)cGroup_2_1_0.eContents().get(0);
		private final Assignment cBeforeAssignment_2_1_0_1 = (Assignment)cGroup_2_1_0.eContents().get(1);
		private final RuleCall cBeforeAtomicObservableParserRuleCall_2_1_0_1_0 = (RuleCall)cBeforeAssignment_2_1_0_1.eContents().get(0);
		private final Group cGroup_2_1_1 = (Group)cGroup_2_1.eContents().get(1);
		private final Keyword cForKeyword_2_1_1_0 = (Keyword)cGroup_2_1_1.eContents().get(0);
		private final Assignment cLowerAssignment_2_1_1_1 = (Assignment)cGroup_2_1_1.eContents().get(1);
		private final RuleCall cLowerLowerBoundParserRuleCall_2_1_1_1_0 = (RuleCall)cLowerAssignment_2_1_1_1.eContents().get(0);
		private final Keyword cCommaKeyword_2_1_1_2 = (Keyword)cGroup_2_1_1.eContents().get(2);
		private final Assignment cUpperAssignment_2_1_1_3 = (Assignment)cGroup_2_1_1.eContents().get(3);
		private final RuleCall cUpperUpperBoundParserRuleCall_2_1_1_3_0 = (RuleCall)cUpperAssignment_2_1_1_3.eContents().get(0);
		private final Group cGroup_2_2 = (Group)cAlternatives_2.eContents().get(2);
		private final Keyword cBetweenKeyword_2_2_0 = (Keyword)cGroup_2_2.eContents().get(0);
		private final Assignment cMinAssignment_2_2_1 = (Assignment)cGroup_2_2.eContents().get(1);
		private final RuleCall cMinAtomicObservableParserRuleCall_2_2_1_0 = (RuleCall)cMinAssignment_2_2_1.eContents().get(0);
		private final Keyword cAndKeyword_2_2_2 = (Keyword)cGroup_2_2.eContents().get(2);
		private final Assignment cMaxAssignment_2_2_3 = (Assignment)cGroup_2_2.eContents().get(3);
		private final RuleCall cMaxAtomicObservableParserRuleCall_2_2_3_0 = (RuleCall)cMaxAssignment_2_2_3.eContents().get(0);
		
		//AbsencePattern:
		//	'absent' subject=AtomicObservable (('after' after=AtomicObservable) ('within' lower=LowerBound ',' upper=UpperBound |
		//	'until' until=AtomicObservable)?
		//	| ('before' before=AtomicObservable) ('for' lower=LowerBound ',' upper=UpperBound)?
		//	| 'between' min=AtomicObservable 'and' max=AtomicObservable)?;
		@Override public ParserRule getRule() { return rule; }
		
		//'absent' subject=AtomicObservable (('after' after=AtomicObservable) ('within' lower=LowerBound ',' upper=UpperBound |
		//'until' until=AtomicObservable)? | ('before' before=AtomicObservable) ('for' lower=LowerBound ',' upper=UpperBound)? |
		//'between' min=AtomicObservable 'and' max=AtomicObservable)?
		public Group getGroup() { return cGroup; }
		
		//'absent'
		public Keyword getAbsentKeyword_0() { return cAbsentKeyword_0; }
		
		//subject=AtomicObservable
		public Assignment getSubjectAssignment_1() { return cSubjectAssignment_1; }
		
		//AtomicObservable
		public RuleCall getSubjectAtomicObservableParserRuleCall_1_0() { return cSubjectAtomicObservableParserRuleCall_1_0; }
		
		//(('after' after=AtomicObservable) ('within' lower=LowerBound ',' upper=UpperBound | 'until' until=AtomicObservable)? |
		//('before' before=AtomicObservable) ('for' lower=LowerBound ',' upper=UpperBound)? | 'between' min=AtomicObservable
		//'and' max=AtomicObservable)?
		public Alternatives getAlternatives_2() { return cAlternatives_2; }
		
		//('after' after=AtomicObservable) ('within' lower=LowerBound ',' upper=UpperBound | 'until' until=AtomicObservable)?
		public Group getGroup_2_0() { return cGroup_2_0; }
		
		//('after' after=AtomicObservable)
		public Group getGroup_2_0_0() { return cGroup_2_0_0; }
		
		//'after'
		public Keyword getAfterKeyword_2_0_0_0() { return cAfterKeyword_2_0_0_0; }
		
		//after=AtomicObservable
		public Assignment getAfterAssignment_2_0_0_1() { return cAfterAssignment_2_0_0_1; }
		
		//AtomicObservable
		public RuleCall getAfterAtomicObservableParserRuleCall_2_0_0_1_0() { return cAfterAtomicObservableParserRuleCall_2_0_0_1_0; }
		
		//('within' lower=LowerBound ',' upper=UpperBound | 'until' until=AtomicObservable)?
		public Alternatives getAlternatives_2_0_1() { return cAlternatives_2_0_1; }
		
		//'within' lower=LowerBound ',' upper=UpperBound
		public Group getGroup_2_0_1_0() { return cGroup_2_0_1_0; }
		
		//'within'
		public Keyword getWithinKeyword_2_0_1_0_0() { return cWithinKeyword_2_0_1_0_0; }
		
		//lower=LowerBound
		public Assignment getLowerAssignment_2_0_1_0_1() { return cLowerAssignment_2_0_1_0_1; }
		
		//LowerBound
		public RuleCall getLowerLowerBoundParserRuleCall_2_0_1_0_1_0() { return cLowerLowerBoundParserRuleCall_2_0_1_0_1_0; }
		
		//','
		public Keyword getCommaKeyword_2_0_1_0_2() { return cCommaKeyword_2_0_1_0_2; }
		
		//upper=UpperBound
		public Assignment getUpperAssignment_2_0_1_0_3() { return cUpperAssignment_2_0_1_0_3; }
		
		//UpperBound
		public RuleCall getUpperUpperBoundParserRuleCall_2_0_1_0_3_0() { return cUpperUpperBoundParserRuleCall_2_0_1_0_3_0; }
		
		//'until' until=AtomicObservable
		public Group getGroup_2_0_1_1() { return cGroup_2_0_1_1; }
		
		//'until'
		public Keyword getUntilKeyword_2_0_1_1_0() { return cUntilKeyword_2_0_1_1_0; }
		
		//until=AtomicObservable
		public Assignment getUntilAssignment_2_0_1_1_1() { return cUntilAssignment_2_0_1_1_1; }
		
		//AtomicObservable
		public RuleCall getUntilAtomicObservableParserRuleCall_2_0_1_1_1_0() { return cUntilAtomicObservableParserRuleCall_2_0_1_1_1_0; }
		
		//('before' before=AtomicObservable) ('for' lower=LowerBound ',' upper=UpperBound)?
		public Group getGroup_2_1() { return cGroup_2_1; }
		
		//('before' before=AtomicObservable)
		public Group getGroup_2_1_0() { return cGroup_2_1_0; }
		
		//'before'
		public Keyword getBeforeKeyword_2_1_0_0() { return cBeforeKeyword_2_1_0_0; }
		
		//before=AtomicObservable
		public Assignment getBeforeAssignment_2_1_0_1() { return cBeforeAssignment_2_1_0_1; }
		
		//AtomicObservable
		public RuleCall getBeforeAtomicObservableParserRuleCall_2_1_0_1_0() { return cBeforeAtomicObservableParserRuleCall_2_1_0_1_0; }
		
		//('for' lower=LowerBound ',' upper=UpperBound)?
		public Group getGroup_2_1_1() { return cGroup_2_1_1; }
		
		//'for'
		public Keyword getForKeyword_2_1_1_0() { return cForKeyword_2_1_1_0; }
		
		//lower=LowerBound
		public Assignment getLowerAssignment_2_1_1_1() { return cLowerAssignment_2_1_1_1; }
		
		//LowerBound
		public RuleCall getLowerLowerBoundParserRuleCall_2_1_1_1_0() { return cLowerLowerBoundParserRuleCall_2_1_1_1_0; }
		
		//','
		public Keyword getCommaKeyword_2_1_1_2() { return cCommaKeyword_2_1_1_2; }
		
		//upper=UpperBound
		public Assignment getUpperAssignment_2_1_1_3() { return cUpperAssignment_2_1_1_3; }
		
		//UpperBound
		public RuleCall getUpperUpperBoundParserRuleCall_2_1_1_3_0() { return cUpperUpperBoundParserRuleCall_2_1_1_3_0; }
		
		//'between' min=AtomicObservable 'and' max=AtomicObservable
		public Group getGroup_2_2() { return cGroup_2_2; }
		
		//'between'
		public Keyword getBetweenKeyword_2_2_0() { return cBetweenKeyword_2_2_0; }
		
		//min=AtomicObservable
		public Assignment getMinAssignment_2_2_1() { return cMinAssignment_2_2_1; }
		
		//AtomicObservable
		public RuleCall getMinAtomicObservableParserRuleCall_2_2_1_0() { return cMinAtomicObservableParserRuleCall_2_2_1_0; }
		
		//'and'
		public Keyword getAndKeyword_2_2_2() { return cAndKeyword_2_2_2; }
		
		//max=AtomicObservable
		public Assignment getMaxAssignment_2_2_3() { return cMaxAssignment_2_2_3; }
		
		//AtomicObservable
		public RuleCall getMaxAtomicObservableParserRuleCall_2_2_3_0() { return cMaxAtomicObservableParserRuleCall_2_2_3_0; }
	}
	public class AlwaysPatternElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.AlwaysPattern");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cAlwaysKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cSubjectAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cSubjectAtomicObservableParserRuleCall_1_0 = (RuleCall)cSubjectAssignment_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 cBeforeKeyword_2_0_0 = (Keyword)cGroup_2_0.eContents().get(0);
		private final Assignment cBeforeAssignment_2_0_1 = (Assignment)cGroup_2_0.eContents().get(1);
		private final RuleCall cBeforeAtomicObservableParserRuleCall_2_0_1_0 = (RuleCall)cBeforeAssignment_2_0_1.eContents().get(0);
		private final Group cGroup_2_1 = (Group)cAlternatives_2.eContents().get(1);
		private final Keyword cAfterKeyword_2_1_0 = (Keyword)cGroup_2_1.eContents().get(0);
		private final Assignment cAfterAssignment_2_1_1 = (Assignment)cGroup_2_1.eContents().get(1);
		private final RuleCall cAfterAtomicObservableParserRuleCall_2_1_1_0 = (RuleCall)cAfterAssignment_2_1_1.eContents().get(0);
		private final Group cGroup_2_1_2 = (Group)cGroup_2_1.eContents().get(2);
		private final Keyword cUntilKeyword_2_1_2_0 = (Keyword)cGroup_2_1_2.eContents().get(0);
		private final Assignment cUntilAssignment_2_1_2_1 = (Assignment)cGroup_2_1_2.eContents().get(1);
		private final RuleCall cUntilAtomicObservableParserRuleCall_2_1_2_1_0 = (RuleCall)cUntilAssignment_2_1_2_1.eContents().get(0);
		private final Group cGroup_2_2 = (Group)cAlternatives_2.eContents().get(2);
		private final Keyword cBetweenKeyword_2_2_0 = (Keyword)cGroup_2_2.eContents().get(0);
		private final Assignment cMinAssignment_2_2_1 = (Assignment)cGroup_2_2.eContents().get(1);
		private final RuleCall cMinAtomicObservableParserRuleCall_2_2_1_0 = (RuleCall)cMinAssignment_2_2_1.eContents().get(0);
		private final Keyword cAndKeyword_2_2_2 = (Keyword)cGroup_2_2.eContents().get(2);
		private final Assignment cMaxAssignment_2_2_3 = (Assignment)cGroup_2_2.eContents().get(3);
		private final RuleCall cMaxAtomicObservableParserRuleCall_2_2_3_0 = (RuleCall)cMaxAssignment_2_2_3.eContents().get(0);
		
		//AlwaysPattern:
		//	'always' subject=AtomicObservable ('before' before=AtomicObservable | 'after' after=AtomicObservable ('until'
		//	until=AtomicObservable)? | 'between' min=AtomicObservable 'and' max=AtomicObservable)?;
		@Override public ParserRule getRule() { return rule; }
		
		//'always' subject=AtomicObservable ('before' before=AtomicObservable | 'after' after=AtomicObservable ('until'
		//until=AtomicObservable)? | 'between' min=AtomicObservable 'and' max=AtomicObservable)?
		public Group getGroup() { return cGroup; }
		
		//'always'
		public Keyword getAlwaysKeyword_0() { return cAlwaysKeyword_0; }
		
		//subject=AtomicObservable
		public Assignment getSubjectAssignment_1() { return cSubjectAssignment_1; }
		
		//AtomicObservable
		public RuleCall getSubjectAtomicObservableParserRuleCall_1_0() { return cSubjectAtomicObservableParserRuleCall_1_0; }
		
		//('before' before=AtomicObservable | 'after' after=AtomicObservable ('until' until=AtomicObservable)? | 'between'
		//min=AtomicObservable 'and' max=AtomicObservable)?
		public Alternatives getAlternatives_2() { return cAlternatives_2; }
		
		//'before' before=AtomicObservable
		public Group getGroup_2_0() { return cGroup_2_0; }
		
		//'before'
		public Keyword getBeforeKeyword_2_0_0() { return cBeforeKeyword_2_0_0; }
		
		//before=AtomicObservable
		public Assignment getBeforeAssignment_2_0_1() { return cBeforeAssignment_2_0_1; }
		
		//AtomicObservable
		public RuleCall getBeforeAtomicObservableParserRuleCall_2_0_1_0() { return cBeforeAtomicObservableParserRuleCall_2_0_1_0; }
		
		//'after' after=AtomicObservable ('until' until=AtomicObservable)?
		public Group getGroup_2_1() { return cGroup_2_1; }
		
		//'after'
		public Keyword getAfterKeyword_2_1_0() { return cAfterKeyword_2_1_0; }
		
		//after=AtomicObservable
		public Assignment getAfterAssignment_2_1_1() { return cAfterAssignment_2_1_1; }
		
		//AtomicObservable
		public RuleCall getAfterAtomicObservableParserRuleCall_2_1_1_0() { return cAfterAtomicObservableParserRuleCall_2_1_1_0; }
		
		//('until' until=AtomicObservable)?
		public Group getGroup_2_1_2() { return cGroup_2_1_2; }
		
		//'until'
		public Keyword getUntilKeyword_2_1_2_0() { return cUntilKeyword_2_1_2_0; }
		
		//until=AtomicObservable
		public Assignment getUntilAssignment_2_1_2_1() { return cUntilAssignment_2_1_2_1; }
		
		//AtomicObservable
		public RuleCall getUntilAtomicObservableParserRuleCall_2_1_2_1_0() { return cUntilAtomicObservableParserRuleCall_2_1_2_1_0; }
		
		//'between' min=AtomicObservable 'and' max=AtomicObservable
		public Group getGroup_2_2() { return cGroup_2_2; }
		
		//'between'
		public Keyword getBetweenKeyword_2_2_0() { return cBetweenKeyword_2_2_0; }
		
		//min=AtomicObservable
		public Assignment getMinAssignment_2_2_1() { return cMinAssignment_2_2_1; }
		
		//AtomicObservable
		public RuleCall getMinAtomicObservableParserRuleCall_2_2_1_0() { return cMinAtomicObservableParserRuleCall_2_2_1_0; }
		
		//'and'
		public Keyword getAndKeyword_2_2_2() { return cAndKeyword_2_2_2; }
		
		//max=AtomicObservable
		public Assignment getMaxAssignment_2_2_3() { return cMaxAssignment_2_2_3; }
		
		//AtomicObservable
		public RuleCall getMaxAtomicObservableParserRuleCall_2_2_3_0() { return cMaxAtomicObservableParserRuleCall_2_2_3_0; }
	}
	public class SequencePatternElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.SequencePattern");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cAtomicObservableParserRuleCall_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 Keyword cLeadstoKeyword_1_0_0 = (Keyword)cGroup_1_0.eContents().get(0);
		private final Action cLeadsToPatternSubjectAction_1_0_1 = (Action)cGroup_1_0.eContents().get(1);
		private final Assignment cFollowerAssignment_1_0_2 = (Assignment)cGroup_1_0.eContents().get(2);
		private final RuleCall cFollowerAtomicObservableParserRuleCall_1_0_2_0 = (RuleCall)cFollowerAssignment_1_0_2.eContents().get(0);
		private final Alternatives cAlternatives_1_0_3 = (Alternatives)cGroup_1_0.eContents().get(3);
		private final Group cGroup_1_0_3_0 = (Group)cAlternatives_1_0_3.eContents().get(0);
		private final Keyword cBeforeKeyword_1_0_3_0_0 = (Keyword)cGroup_1_0_3_0.eContents().get(0);
		private final Assignment cBeforeAssignment_1_0_3_0_1 = (Assignment)cGroup_1_0_3_0.eContents().get(1);
		private final RuleCall cBeforeAtomicObservableParserRuleCall_1_0_3_0_1_0 = (RuleCall)cBeforeAssignment_1_0_3_0_1.eContents().get(0);
		private final Group cGroup_1_0_3_0_2 = (Group)cGroup_1_0_3_0.eContents().get(2);
		private final Keyword cWithinKeyword_1_0_3_0_2_0 = (Keyword)cGroup_1_0_3_0_2.eContents().get(0);
		private final Assignment cLowerAssignment_1_0_3_0_2_1 = (Assignment)cGroup_1_0_3_0_2.eContents().get(1);
		private final RuleCall cLowerLowerBoundParserRuleCall_1_0_3_0_2_1_0 = (RuleCall)cLowerAssignment_1_0_3_0_2_1.eContents().get(0);
		private final Keyword cCommaKeyword_1_0_3_0_2_2 = (Keyword)cGroup_1_0_3_0_2.eContents().get(2);
		private final Assignment cUpperAssignment_1_0_3_0_2_3 = (Assignment)cGroup_1_0_3_0_2.eContents().get(3);
		private final RuleCall cUpperUpperBoundParserRuleCall_1_0_3_0_2_3_0 = (RuleCall)cUpperAssignment_1_0_3_0_2_3.eContents().get(0);
		private final Group cGroup_1_0_3_1 = (Group)cAlternatives_1_0_3.eContents().get(1);
		private final Keyword cWithinKeyword_1_0_3_1_0 = (Keyword)cGroup_1_0_3_1.eContents().get(0);
		private final Assignment cLowerAssignment_1_0_3_1_1 = (Assignment)cGroup_1_0_3_1.eContents().get(1);
		private final RuleCall cLowerLowerBoundParserRuleCall_1_0_3_1_1_0 = (RuleCall)cLowerAssignment_1_0_3_1_1.eContents().get(0);
		private final Keyword cCommaKeyword_1_0_3_1_2 = (Keyword)cGroup_1_0_3_1.eContents().get(2);
		private final Assignment cUpperAssignment_1_0_3_1_3 = (Assignment)cGroup_1_0_3_1.eContents().get(3);
		private final RuleCall cUpperUpperBoundParserRuleCall_1_0_3_1_3_0 = (RuleCall)cUpperAssignment_1_0_3_1_3.eContents().get(0);
		private final Group cGroup_1_0_3_2 = (Group)cAlternatives_1_0_3.eContents().get(2);
		private final Keyword cAfterKeyword_1_0_3_2_0 = (Keyword)cGroup_1_0_3_2.eContents().get(0);
		private final Assignment cAfterAssignment_1_0_3_2_1 = (Assignment)cGroup_1_0_3_2.eContents().get(1);
		private final RuleCall cAfterAtomicObservableParserRuleCall_1_0_3_2_1_0 = (RuleCall)cAfterAssignment_1_0_3_2_1.eContents().get(0);
		private final Alternatives cAlternatives_1_0_3_2_2 = (Alternatives)cGroup_1_0_3_2.eContents().get(2);
		private final Group cGroup_1_0_3_2_2_0 = (Group)cAlternatives_1_0_3_2_2.eContents().get(0);
		private final Keyword cWithinKeyword_1_0_3_2_2_0_0 = (Keyword)cGroup_1_0_3_2_2_0.eContents().get(0);
		private final Assignment cLowerAssignment_1_0_3_2_2_0_1 = (Assignment)cGroup_1_0_3_2_2_0.eContents().get(1);
		private final RuleCall cLowerLowerBoundParserRuleCall_1_0_3_2_2_0_1_0 = (RuleCall)cLowerAssignment_1_0_3_2_2_0_1.eContents().get(0);
		private final Keyword cCommaKeyword_1_0_3_2_2_0_2 = (Keyword)cGroup_1_0_3_2_2_0.eContents().get(2);
		private final Assignment cUpperAssignment_1_0_3_2_2_0_3 = (Assignment)cGroup_1_0_3_2_2_0.eContents().get(3);
		private final RuleCall cUpperUpperBoundParserRuleCall_1_0_3_2_2_0_3_0 = (RuleCall)cUpperAssignment_1_0_3_2_2_0_3.eContents().get(0);
		private final Group cGroup_1_0_3_2_2_1 = (Group)cAlternatives_1_0_3_2_2.eContents().get(1);
		private final Keyword cUntilKeyword_1_0_3_2_2_1_0 = (Keyword)cGroup_1_0_3_2_2_1.eContents().get(0);
		private final Assignment cUntilAssignment_1_0_3_2_2_1_1 = (Assignment)cGroup_1_0_3_2_2_1.eContents().get(1);
		private final RuleCall cUntilAtomicObservableParserRuleCall_1_0_3_2_2_1_1_0 = (RuleCall)cUntilAssignment_1_0_3_2_2_1_1.eContents().get(0);
		private final Group cGroup_1_0_3_3 = (Group)cAlternatives_1_0_3.eContents().get(3);
		private final Keyword cBetweenKeyword_1_0_3_3_0 = (Keyword)cGroup_1_0_3_3.eContents().get(0);
		private final Assignment cMinAssignment_1_0_3_3_1 = (Assignment)cGroup_1_0_3_3.eContents().get(1);
		private final RuleCall cMinAtomicObservableParserRuleCall_1_0_3_3_1_0 = (RuleCall)cMinAssignment_1_0_3_3_1.eContents().get(0);
		private final Keyword cAndKeyword_1_0_3_3_2 = (Keyword)cGroup_1_0_3_3.eContents().get(2);
		private final Assignment cMaxAssignment_1_0_3_3_3 = (Assignment)cGroup_1_0_3_3.eContents().get(3);
		private final RuleCall cMaxAtomicObservableParserRuleCall_1_0_3_3_3_0 = (RuleCall)cMaxAssignment_1_0_3_3_3.eContents().get(0);
		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
		private final Keyword cPrecedesKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
		private final Action cPrecedesPatternSubjectAction_1_1_1 = (Action)cGroup_1_1.eContents().get(1);
		private final Assignment cFollowerAssignment_1_1_2 = (Assignment)cGroup_1_1.eContents().get(2);
		private final RuleCall cFollowerAtomicObservableParserRuleCall_1_1_2_0 = (RuleCall)cFollowerAssignment_1_1_2.eContents().get(0);
		private final Alternatives cAlternatives_1_1_3 = (Alternatives)cGroup_1_1.eContents().get(3);
		private final Group cGroup_1_1_3_0 = (Group)cAlternatives_1_1_3.eContents().get(0);
		private final Keyword cBeforeKeyword_1_1_3_0_0 = (Keyword)cGroup_1_1_3_0.eContents().get(0);
		private final Assignment cBeforeAssignment_1_1_3_0_1 = (Assignment)cGroup_1_1_3_0.eContents().get(1);
		private final RuleCall cBeforeAtomicObservableParserRuleCall_1_1_3_0_1_0 = (RuleCall)cBeforeAssignment_1_1_3_0_1.eContents().get(0);
		private final Group cGroup_1_1_3_1 = (Group)cAlternatives_1_1_3.eContents().get(1);
		private final Keyword cAfterKeyword_1_1_3_1_0 = (Keyword)cGroup_1_1_3_1.eContents().get(0);
		private final Assignment cAfterAssignment_1_1_3_1_1 = (Assignment)cGroup_1_1_3_1.eContents().get(1);
		private final RuleCall cAfterAtomicObservableParserRuleCall_1_1_3_1_1_0 = (RuleCall)cAfterAssignment_1_1_3_1_1.eContents().get(0);
		private final Group cGroup_1_1_3_1_2 = (Group)cGroup_1_1_3_1.eContents().get(2);
		private final Keyword cUntilKeyword_1_1_3_1_2_0 = (Keyword)cGroup_1_1_3_1_2.eContents().get(0);
		private final Assignment cUntilAssignment_1_1_3_1_2_1 = (Assignment)cGroup_1_1_3_1_2.eContents().get(1);
		private final RuleCall cUntilAtomicObservableParserRuleCall_1_1_3_1_2_1_0 = (RuleCall)cUntilAssignment_1_1_3_1_2_1.eContents().get(0);
		private final Group cGroup_1_1_3_2 = (Group)cAlternatives_1_1_3.eContents().get(2);
		private final Keyword cBetweenKeyword_1_1_3_2_0 = (Keyword)cGroup_1_1_3_2.eContents().get(0);
		private final Assignment cMinAssignment_1_1_3_2_1 = (Assignment)cGroup_1_1_3_2.eContents().get(1);
		private final RuleCall cMinAtomicObservableParserRuleCall_1_1_3_2_1_0 = (RuleCall)cMinAssignment_1_1_3_2_1.eContents().get(0);
		private final Keyword cAndKeyword_1_1_3_2_2 = (Keyword)cGroup_1_1_3_2.eContents().get(2);
		private final Assignment cMaxAssignment_1_1_3_2_3 = (Assignment)cGroup_1_1_3_2.eContents().get(3);
		private final RuleCall cMaxAtomicObservableParserRuleCall_1_1_3_2_3_0 = (RuleCall)cMaxAssignment_1_1_3_2_3.eContents().get(0);
		
		//SequencePattern:
		//	AtomicObservable ('leadsto' {LeadsToPattern.subject=current} follower=AtomicObservable ('before'
		//	before=AtomicObservable ('within' lower=LowerBound ',' upper=UpperBound)? | 'within' lower=LowerBound ','
		//	upper=UpperBound | 'after' after=AtomicObservable ('within' lower=LowerBound ',' upper=UpperBound | 'until'
		//	until=AtomicObservable)?
		//	| 'between' min=AtomicObservable 'and' max=AtomicObservable)?
		//	| 'precedes' {PrecedesPattern.subject=current} follower=AtomicObservable ('before' before=AtomicObservable | 'after'
		//	after=AtomicObservable ('until' until=AtomicObservable)? | 'between' min=AtomicObservable 'and'
		//	max=AtomicObservable)?);
		@Override public ParserRule getRule() { return rule; }
		
		//AtomicObservable ('leadsto' {LeadsToPattern.subject=current} follower=AtomicObservable ('before' before=AtomicObservable
		//('within' lower=LowerBound ',' upper=UpperBound)? | 'within' lower=LowerBound ',' upper=UpperBound | 'after'
		//after=AtomicObservable ('within' lower=LowerBound ',' upper=UpperBound | 'until' until=AtomicObservable)? | 'between'
		//min=AtomicObservable 'and' max=AtomicObservable)? | 'precedes' {PrecedesPattern.subject=current}
		//follower=AtomicObservable ('before' before=AtomicObservable | 'after' after=AtomicObservable ('until'
		//until=AtomicObservable)? | 'between' min=AtomicObservable 'and' max=AtomicObservable)?)
		public Group getGroup() { return cGroup; }
		
		//AtomicObservable
		public RuleCall getAtomicObservableParserRuleCall_0() { return cAtomicObservableParserRuleCall_0; }
		
		//('leadsto' {LeadsToPattern.subject=current} follower=AtomicObservable ('before' before=AtomicObservable ('within'
		//lower=LowerBound ',' upper=UpperBound)? | 'within' lower=LowerBound ',' upper=UpperBound | 'after'
		//after=AtomicObservable ('within' lower=LowerBound ',' upper=UpperBound | 'until' until=AtomicObservable)? | 'between'
		//min=AtomicObservable 'and' max=AtomicObservable)? | 'precedes' {PrecedesPattern.subject=current}
		//follower=AtomicObservable ('before' before=AtomicObservable | 'after' after=AtomicObservable ('until'
		//until=AtomicObservable)? | 'between' min=AtomicObservable 'and' max=AtomicObservable)?)
		public Alternatives getAlternatives_1() { return cAlternatives_1; }
		
		//'leadsto' {LeadsToPattern.subject=current} follower=AtomicObservable ('before' before=AtomicObservable ('within'
		//lower=LowerBound ',' upper=UpperBound)? | 'within' lower=LowerBound ',' upper=UpperBound | 'after'
		//after=AtomicObservable ('within' lower=LowerBound ',' upper=UpperBound | 'until' until=AtomicObservable)? | 'between'
		//min=AtomicObservable 'and' max=AtomicObservable)?
		public Group getGroup_1_0() { return cGroup_1_0; }
		
		//'leadsto'
		public Keyword getLeadstoKeyword_1_0_0() { return cLeadstoKeyword_1_0_0; }
		
		//{LeadsToPattern.subject=current}
		public Action getLeadsToPatternSubjectAction_1_0_1() { return cLeadsToPatternSubjectAction_1_0_1; }
		
		//follower=AtomicObservable
		public Assignment getFollowerAssignment_1_0_2() { return cFollowerAssignment_1_0_2; }
		
		//AtomicObservable
		public RuleCall getFollowerAtomicObservableParserRuleCall_1_0_2_0() { return cFollowerAtomicObservableParserRuleCall_1_0_2_0; }
		
		//('before' before=AtomicObservable ('within' lower=LowerBound ',' upper=UpperBound)? | 'within' lower=LowerBound ','
		//upper=UpperBound | 'after' after=AtomicObservable ('within' lower=LowerBound ',' upper=UpperBound | 'until'
		//until=AtomicObservable)? | 'between' min=AtomicObservable 'and' max=AtomicObservable)?
		public Alternatives getAlternatives_1_0_3() { return cAlternatives_1_0_3; }
		
		//'before' before=AtomicObservable ('within' lower=LowerBound ',' upper=UpperBound)?
		public Group getGroup_1_0_3_0() { return cGroup_1_0_3_0; }
		
		//'before'
		public Keyword getBeforeKeyword_1_0_3_0_0() { return cBeforeKeyword_1_0_3_0_0; }
		
		//before=AtomicObservable
		public Assignment getBeforeAssignment_1_0_3_0_1() { return cBeforeAssignment_1_0_3_0_1; }
		
		//AtomicObservable
		public RuleCall getBeforeAtomicObservableParserRuleCall_1_0_3_0_1_0() { return cBeforeAtomicObservableParserRuleCall_1_0_3_0_1_0; }
		
		//('within' lower=LowerBound ',' upper=UpperBound)?
		public Group getGroup_1_0_3_0_2() { return cGroup_1_0_3_0_2; }
		
		//'within'
		public Keyword getWithinKeyword_1_0_3_0_2_0() { return cWithinKeyword_1_0_3_0_2_0; }
		
		//lower=LowerBound
		public Assignment getLowerAssignment_1_0_3_0_2_1() { return cLowerAssignment_1_0_3_0_2_1; }
		
		//LowerBound
		public RuleCall getLowerLowerBoundParserRuleCall_1_0_3_0_2_1_0() { return cLowerLowerBoundParserRuleCall_1_0_3_0_2_1_0; }
		
		//','
		public Keyword getCommaKeyword_1_0_3_0_2_2() { return cCommaKeyword_1_0_3_0_2_2; }
		
		//upper=UpperBound
		public Assignment getUpperAssignment_1_0_3_0_2_3() { return cUpperAssignment_1_0_3_0_2_3; }
		
		//UpperBound
		public RuleCall getUpperUpperBoundParserRuleCall_1_0_3_0_2_3_0() { return cUpperUpperBoundParserRuleCall_1_0_3_0_2_3_0; }
		
		//'within' lower=LowerBound ',' upper=UpperBound
		public Group getGroup_1_0_3_1() { return cGroup_1_0_3_1; }
		
		//'within'
		public Keyword getWithinKeyword_1_0_3_1_0() { return cWithinKeyword_1_0_3_1_0; }
		
		//lower=LowerBound
		public Assignment getLowerAssignment_1_0_3_1_1() { return cLowerAssignment_1_0_3_1_1; }
		
		//LowerBound
		public RuleCall getLowerLowerBoundParserRuleCall_1_0_3_1_1_0() { return cLowerLowerBoundParserRuleCall_1_0_3_1_1_0; }
		
		//','
		public Keyword getCommaKeyword_1_0_3_1_2() { return cCommaKeyword_1_0_3_1_2; }
		
		//upper=UpperBound
		public Assignment getUpperAssignment_1_0_3_1_3() { return cUpperAssignment_1_0_3_1_3; }
		
		//UpperBound
		public RuleCall getUpperUpperBoundParserRuleCall_1_0_3_1_3_0() { return cUpperUpperBoundParserRuleCall_1_0_3_1_3_0; }
		
		//'after' after=AtomicObservable ('within' lower=LowerBound ',' upper=UpperBound | 'until' until=AtomicObservable)?
		public Group getGroup_1_0_3_2() { return cGroup_1_0_3_2; }
		
		//'after'
		public Keyword getAfterKeyword_1_0_3_2_0() { return cAfterKeyword_1_0_3_2_0; }
		
		//after=AtomicObservable
		public Assignment getAfterAssignment_1_0_3_2_1() { return cAfterAssignment_1_0_3_2_1; }
		
		//AtomicObservable
		public RuleCall getAfterAtomicObservableParserRuleCall_1_0_3_2_1_0() { return cAfterAtomicObservableParserRuleCall_1_0_3_2_1_0; }
		
		//('within' lower=LowerBound ',' upper=UpperBound | 'until' until=AtomicObservable)?
		public Alternatives getAlternatives_1_0_3_2_2() { return cAlternatives_1_0_3_2_2; }
		
		//'within' lower=LowerBound ',' upper=UpperBound
		public Group getGroup_1_0_3_2_2_0() { return cGroup_1_0_3_2_2_0; }
		
		//'within'
		public Keyword getWithinKeyword_1_0_3_2_2_0_0() { return cWithinKeyword_1_0_3_2_2_0_0; }
		
		//lower=LowerBound
		public Assignment getLowerAssignment_1_0_3_2_2_0_1() { return cLowerAssignment_1_0_3_2_2_0_1; }
		
		//LowerBound
		public RuleCall getLowerLowerBoundParserRuleCall_1_0_3_2_2_0_1_0() { return cLowerLowerBoundParserRuleCall_1_0_3_2_2_0_1_0; }
		
		//','
		public Keyword getCommaKeyword_1_0_3_2_2_0_2() { return cCommaKeyword_1_0_3_2_2_0_2; }
		
		//upper=UpperBound
		public Assignment getUpperAssignment_1_0_3_2_2_0_3() { return cUpperAssignment_1_0_3_2_2_0_3; }
		
		//UpperBound
		public RuleCall getUpperUpperBoundParserRuleCall_1_0_3_2_2_0_3_0() { return cUpperUpperBoundParserRuleCall_1_0_3_2_2_0_3_0; }
		
		//'until' until=AtomicObservable
		public Group getGroup_1_0_3_2_2_1() { return cGroup_1_0_3_2_2_1; }
		
		//'until'
		public Keyword getUntilKeyword_1_0_3_2_2_1_0() { return cUntilKeyword_1_0_3_2_2_1_0; }
		
		//until=AtomicObservable
		public Assignment getUntilAssignment_1_0_3_2_2_1_1() { return cUntilAssignment_1_0_3_2_2_1_1; }
		
		//AtomicObservable
		public RuleCall getUntilAtomicObservableParserRuleCall_1_0_3_2_2_1_1_0() { return cUntilAtomicObservableParserRuleCall_1_0_3_2_2_1_1_0; }
		
		//'between' min=AtomicObservable 'and' max=AtomicObservable
		public Group getGroup_1_0_3_3() { return cGroup_1_0_3_3; }
		
		//'between'
		public Keyword getBetweenKeyword_1_0_3_3_0() { return cBetweenKeyword_1_0_3_3_0; }
		
		//min=AtomicObservable
		public Assignment getMinAssignment_1_0_3_3_1() { return cMinAssignment_1_0_3_3_1; }
		
		//AtomicObservable
		public RuleCall getMinAtomicObservableParserRuleCall_1_0_3_3_1_0() { return cMinAtomicObservableParserRuleCall_1_0_3_3_1_0; }
		
		//'and'
		public Keyword getAndKeyword_1_0_3_3_2() { return cAndKeyword_1_0_3_3_2; }
		
		//max=AtomicObservable
		public Assignment getMaxAssignment_1_0_3_3_3() { return cMaxAssignment_1_0_3_3_3; }
		
		//AtomicObservable
		public RuleCall getMaxAtomicObservableParserRuleCall_1_0_3_3_3_0() { return cMaxAtomicObservableParserRuleCall_1_0_3_3_3_0; }
		
		//'precedes' {PrecedesPattern.subject=current} follower=AtomicObservable ('before' before=AtomicObservable | 'after'
		//after=AtomicObservable ('until' until=AtomicObservable)? | 'between' min=AtomicObservable 'and' max=AtomicObservable)?
		public Group getGroup_1_1() { return cGroup_1_1; }
		
		//'precedes'
		public Keyword getPrecedesKeyword_1_1_0() { return cPrecedesKeyword_1_1_0; }
		
		//{PrecedesPattern.subject=current}
		public Action getPrecedesPatternSubjectAction_1_1_1() { return cPrecedesPatternSubjectAction_1_1_1; }
		
		//follower=AtomicObservable
		public Assignment getFollowerAssignment_1_1_2() { return cFollowerAssignment_1_1_2; }
		
		//AtomicObservable
		public RuleCall getFollowerAtomicObservableParserRuleCall_1_1_2_0() { return cFollowerAtomicObservableParserRuleCall_1_1_2_0; }
		
		//('before' before=AtomicObservable | 'after' after=AtomicObservable ('until' until=AtomicObservable)? | 'between'
		//min=AtomicObservable 'and' max=AtomicObservable)?
		public Alternatives getAlternatives_1_1_3() { return cAlternatives_1_1_3; }
		
		//'before' before=AtomicObservable
		public Group getGroup_1_1_3_0() { return cGroup_1_1_3_0; }
		
		//'before'
		public Keyword getBeforeKeyword_1_1_3_0_0() { return cBeforeKeyword_1_1_3_0_0; }
		
		//before=AtomicObservable
		public Assignment getBeforeAssignment_1_1_3_0_1() { return cBeforeAssignment_1_1_3_0_1; }
		
		//AtomicObservable
		public RuleCall getBeforeAtomicObservableParserRuleCall_1_1_3_0_1_0() { return cBeforeAtomicObservableParserRuleCall_1_1_3_0_1_0; }
		
		//'after' after=AtomicObservable ('until' until=AtomicObservable)?
		public Group getGroup_1_1_3_1() { return cGroup_1_1_3_1; }
		
		//'after'
		public Keyword getAfterKeyword_1_1_3_1_0() { return cAfterKeyword_1_1_3_1_0; }
		
		//after=AtomicObservable
		public Assignment getAfterAssignment_1_1_3_1_1() { return cAfterAssignment_1_1_3_1_1; }
		
		//AtomicObservable
		public RuleCall getAfterAtomicObservableParserRuleCall_1_1_3_1_1_0() { return cAfterAtomicObservableParserRuleCall_1_1_3_1_1_0; }
		
		//('until' until=AtomicObservable)?
		public Group getGroup_1_1_3_1_2() { return cGroup_1_1_3_1_2; }
		
		//'until'
		public Keyword getUntilKeyword_1_1_3_1_2_0() { return cUntilKeyword_1_1_3_1_2_0; }
		
		//until=AtomicObservable
		public Assignment getUntilAssignment_1_1_3_1_2_1() { return cUntilAssignment_1_1_3_1_2_1; }
		
		//AtomicObservable
		public RuleCall getUntilAtomicObservableParserRuleCall_1_1_3_1_2_1_0() { return cUntilAtomicObservableParserRuleCall_1_1_3_1_2_1_0; }
		
		//'between' min=AtomicObservable 'and' max=AtomicObservable
		public Group getGroup_1_1_3_2() { return cGroup_1_1_3_2; }
		
		//'between'
		public Keyword getBetweenKeyword_1_1_3_2_0() { return cBetweenKeyword_1_1_3_2_0; }
		
		//min=AtomicObservable
		public Assignment getMinAssignment_1_1_3_2_1() { return cMinAssignment_1_1_3_2_1; }
		
		//AtomicObservable
		public RuleCall getMinAtomicObservableParserRuleCall_1_1_3_2_1_0() { return cMinAtomicObservableParserRuleCall_1_1_3_2_1_0; }
		
		//'and'
		public Keyword getAndKeyword_1_1_3_2_2() { return cAndKeyword_1_1_3_2_2; }
		
		//max=AtomicObservable
		public Assignment getMaxAssignment_1_1_3_2_3() { return cMaxAssignment_1_1_3_2_3; }
		
		//AtomicObservable
		public RuleCall getMaxAtomicObservableParserRuleCall_1_1_3_2_3_0() { return cMaxAtomicObservableParserRuleCall_1_1_3_2_3_0; }
	}
	public class LTLPropertyElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.LTLProperty");
		private final RuleCall cLTLQuantifiedParserRuleCall = (RuleCall)rule.eContents().get(1);
		
		//LTLProperty:
		//	LTLQuantified;
		@Override public ParserRule getRule() { return rule; }
		
		//LTLQuantified
		public RuleCall getLTLQuantifiedParserRuleCall() { return cLTLQuantifiedParserRuleCall; }
	}
	public class LTLQuantifiedElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.LTLQuantified");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Alternatives cAlternatives_0_0 = (Alternatives)cGroup_0.eContents().get(0);
		private final Group cGroup_0_0_0 = (Group)cAlternatives_0_0.eContents().get(0);
		private final Action cLTLAllAction_0_0_0_0 = (Action)cGroup_0_0_0.eContents().get(0);
		private final Keyword cAllKeyword_0_0_0_1 = (Keyword)cGroup_0_0_0.eContents().get(1);
		private final Group cGroup_0_0_1 = (Group)cAlternatives_0_0.eContents().get(1);
		private final Action cLTLExistsAction_0_0_1_0 = (Action)cGroup_0_0_1.eContents().get(0);
		private final Keyword cExistsKeyword_0_0_1_1 = (Keyword)cGroup_0_0_1.eContents().get(1);
		private final Assignment cIndexAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
		private final RuleCall cIndexVariableDeclarationParserRuleCall_0_1_0 = (RuleCall)cIndexAssignment_0_1.eContents().get(0);
		private final Keyword cInKeyword_0_2 = (Keyword)cGroup_0.eContents().get(2);
		private final Assignment cTypeAssignment_0_3 = (Assignment)cGroup_0.eContents().get(3);
		private final RuleCall cTypeRangeTypeParserRuleCall_0_3_0 = (RuleCall)cTypeAssignment_0_3.eContents().get(0);
		private final Keyword cFullStopKeyword_0_4 = (Keyword)cGroup_0.eContents().get(4);
		private final Assignment cChildAssignment_0_5 = (Assignment)cGroup_0.eContents().get(5);
		private final RuleCall cChildLTLQuantifiedParserRuleCall_0_5_0 = (RuleCall)cChildAssignment_0_5.eContents().get(0);
		private final RuleCall cLTLDisjunctionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//LTLQuantified LTLProperty:
		//	({LTLAll} 'all' | {LTLExists} 'exists') index=VariableDeclaration
		//	'in' type=RangeType '.' child=LTLQuantified | LTLDisjunction
		@Override public ParserRule getRule() { return rule; }
		
		//({LTLAll} 'all' | {LTLExists} 'exists') index=VariableDeclaration 'in' type=RangeType '.' child=LTLQuantified |
		//LTLDisjunction
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//({LTLAll} 'all' | {LTLExists} 'exists') index=VariableDeclaration 'in' type=RangeType '.' child=LTLQuantified
		public Group getGroup_0() { return cGroup_0; }
		
		//({LTLAll} 'all' | {LTLExists} 'exists')
		public Alternatives getAlternatives_0_0() { return cAlternatives_0_0; }
		
		//{LTLAll} 'all'
		public Group getGroup_0_0_0() { return cGroup_0_0_0; }
		
		//{LTLAll}
		public Action getLTLAllAction_0_0_0_0() { return cLTLAllAction_0_0_0_0; }
		
		//'all'
		public Keyword getAllKeyword_0_0_0_1() { return cAllKeyword_0_0_0_1; }
		
		//{LTLExists} 'exists'
		public Group getGroup_0_0_1() { return cGroup_0_0_1; }
		
		//{LTLExists}
		public Action getLTLExistsAction_0_0_1_0() { return cLTLExistsAction_0_0_1_0; }
		
		//'exists'
		public Keyword getExistsKeyword_0_0_1_1() { return cExistsKeyword_0_0_1_1; }
		
		//index=VariableDeclaration
		public Assignment getIndexAssignment_0_1() { return cIndexAssignment_0_1; }
		
		//VariableDeclaration
		public RuleCall getIndexVariableDeclarationParserRuleCall_0_1_0() { return cIndexVariableDeclarationParserRuleCall_0_1_0; }
		
		//'in'
		public Keyword getInKeyword_0_2() { return cInKeyword_0_2; }
		
		//type=RangeType
		public Assignment getTypeAssignment_0_3() { return cTypeAssignment_0_3; }
		
		//RangeType
		public RuleCall getTypeRangeTypeParserRuleCall_0_3_0() { return cTypeRangeTypeParserRuleCall_0_3_0; }
		
		//'.'
		public Keyword getFullStopKeyword_0_4() { return cFullStopKeyword_0_4; }
		
		//child=LTLQuantified
		public Assignment getChildAssignment_0_5() { return cChildAssignment_0_5; }
		
		//LTLQuantified
		public RuleCall getChildLTLQuantifiedParserRuleCall_0_5_0() { return cChildLTLQuantifiedParserRuleCall_0_5_0; }
		
		//LTLDisjunction
		public RuleCall getLTLDisjunctionParserRuleCall_1() { return cLTLDisjunctionParserRuleCall_1; }
	}
	public class LTLDisjunctionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.LTLDisjunction");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cLTLImplicationParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cLTLDisjunctionLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cOrKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightLTLImplicationParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//LTLDisjunction LTLProperty:
		//	LTLImplication ({LTLDisjunction.left=current} 'or' right=LTLImplication)*
		@Override public ParserRule getRule() { return rule; }
		
		//LTLImplication ({LTLDisjunction.left=current} 'or' right=LTLImplication)*
		public Group getGroup() { return cGroup; }
		
		//LTLImplication
		public RuleCall getLTLImplicationParserRuleCall_0() { return cLTLImplicationParserRuleCall_0; }
		
		//({LTLDisjunction.left=current} 'or' right=LTLImplication)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{LTLDisjunction.left=current}
		public Action getLTLDisjunctionLeftAction_1_0() { return cLTLDisjunctionLeftAction_1_0; }
		
		//'or'
		public Keyword getOrKeyword_1_1() { return cOrKeyword_1_1; }
		
		//right=LTLImplication
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//LTLImplication
		public RuleCall getRightLTLImplicationParserRuleCall_1_2_0() { return cRightLTLImplicationParserRuleCall_1_2_0; }
	}
	public class LTLImplicationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.LTLImplication");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cLTLConjunctionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cLTLImplicationLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cEqualsSignGreaterThanSignKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightLTLImplicationParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//LTLImplication LTLProperty:
		//	LTLConjunction ({LTLImplication.left=current} '=>' right=LTLImplication)?
		@Override public ParserRule getRule() { return rule; }
		
		//LTLConjunction ({LTLImplication.left=current} '=>' right=LTLImplication)?
		public Group getGroup() { return cGroup; }
		
		//LTLConjunction
		public RuleCall getLTLConjunctionParserRuleCall_0() { return cLTLConjunctionParserRuleCall_0; }
		
		//({LTLImplication.left=current} '=>' right=LTLImplication)?
		public Group getGroup_1() { return cGroup_1; }
		
		//{LTLImplication.left=current}
		public Action getLTLImplicationLeftAction_1_0() { return cLTLImplicationLeftAction_1_0; }
		
		//'=>'
		public Keyword getEqualsSignGreaterThanSignKeyword_1_1() { return cEqualsSignGreaterThanSignKeyword_1_1; }
		
		//right=LTLImplication
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//LTLImplication
		public RuleCall getRightLTLImplicationParserRuleCall_1_2_0() { return cRightLTLImplicationParserRuleCall_1_2_0; }
	}
	public class LTLConjunctionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.LTLConjunction");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cLTLBinaryParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cLTLConjunctionLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cAndKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightLTLBinaryParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//LTLConjunction LTLProperty:
		//	LTLBinary ({LTLConjunction.left=current} 'and' right=LTLBinary)*
		@Override public ParserRule getRule() { return rule; }
		
		//LTLBinary ({LTLConjunction.left=current} 'and' right=LTLBinary)*
		public Group getGroup() { return cGroup; }
		
		//LTLBinary
		public RuleCall getLTLBinaryParserRuleCall_0() { return cLTLBinaryParserRuleCall_0; }
		
		//({LTLConjunction.left=current} 'and' right=LTLBinary)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{LTLConjunction.left=current}
		public Action getLTLConjunctionLeftAction_1_0() { return cLTLConjunctionLeftAction_1_0; }
		
		//'and'
		public Keyword getAndKeyword_1_1() { return cAndKeyword_1_1; }
		
		//right=LTLBinary
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//LTLBinary
		public RuleCall getRightLTLBinaryParserRuleCall_1_2_0() { return cRightLTLBinaryParserRuleCall_1_2_0; }
	}
	public class LTLBinaryElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.LTLBinary");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cLTLUnaryParserRuleCall_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 cLTLUntilLeftAction_1_0_0 = (Action)cGroup_1_0.eContents().get(0);
		private final Keyword cUntilKeyword_1_0_1 = (Keyword)cGroup_1_0.eContents().get(1);
		private final Assignment cRightAssignment_1_0_2 = (Assignment)cGroup_1_0.eContents().get(2);
		private final RuleCall cRightLTLUnaryParserRuleCall_1_0_2_0 = (RuleCall)cRightAssignment_1_0_2.eContents().get(0);
		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
		private final Action cLTLReleaseLeftAction_1_1_0 = (Action)cGroup_1_1.eContents().get(0);
		private final Keyword cReleaseKeyword_1_1_1 = (Keyword)cGroup_1_1.eContents().get(1);
		private final Assignment cRightAssignment_1_1_2 = (Assignment)cGroup_1_1.eContents().get(2);
		private final RuleCall cRightLTLUnaryParserRuleCall_1_1_2_0 = (RuleCall)cRightAssignment_1_1_2.eContents().get(0);
		
		//LTLBinary LTLProperty:
		//	LTLUnary ({LTLUntil.left=current} 'until' right=LTLUnary | {LTLRelease.left=current} 'release' right=LTLUnary)?
		@Override public ParserRule getRule() { return rule; }
		
		//LTLUnary ({LTLUntil.left=current} 'until' right=LTLUnary | {LTLRelease.left=current} 'release' right=LTLUnary)?
		public Group getGroup() { return cGroup; }
		
		//LTLUnary
		public RuleCall getLTLUnaryParserRuleCall_0() { return cLTLUnaryParserRuleCall_0; }
		
		//({LTLUntil.left=current} 'until' right=LTLUnary | {LTLRelease.left=current} 'release' right=LTLUnary)?
		public Alternatives getAlternatives_1() { return cAlternatives_1; }
		
		//{LTLUntil.left=current} 'until' right=LTLUnary
		public Group getGroup_1_0() { return cGroup_1_0; }
		
		//{LTLUntil.left=current}
		public Action getLTLUntilLeftAction_1_0_0() { return cLTLUntilLeftAction_1_0_0; }
		
		//'until'
		public Keyword getUntilKeyword_1_0_1() { return cUntilKeyword_1_0_1; }
		
		//right=LTLUnary
		public Assignment getRightAssignment_1_0_2() { return cRightAssignment_1_0_2; }
		
		//LTLUnary
		public RuleCall getRightLTLUnaryParserRuleCall_1_0_2_0() { return cRightLTLUnaryParserRuleCall_1_0_2_0; }
		
		//{LTLRelease.left=current} 'release' right=LTLUnary
		public Group getGroup_1_1() { return cGroup_1_1; }
		
		//{LTLRelease.left=current}
		public Action getLTLReleaseLeftAction_1_1_0() { return cLTLReleaseLeftAction_1_1_0; }
		
		//'release'
		public Keyword getReleaseKeyword_1_1_1() { return cReleaseKeyword_1_1_1; }
		
		//right=LTLUnary
		public Assignment getRightAssignment_1_1_2() { return cRightAssignment_1_1_2; }
		
		//LTLUnary
		public RuleCall getRightLTLUnaryParserRuleCall_1_1_2_0() { return cRightLTLUnaryParserRuleCall_1_1_2_0; }
	}
	public class LTLUnaryElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.LTLUnary");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Alternatives cAlternatives_0_0 = (Alternatives)cGroup_0.eContents().get(0);
		private final Group cGroup_0_0_0 = (Group)cAlternatives_0_0.eContents().get(0);
		private final Action cLTLUnaryNegationAction_0_0_0_0 = (Action)cGroup_0_0_0.eContents().get(0);
		private final Keyword cNotKeyword_0_0_0_1 = (Keyword)cGroup_0_0_0.eContents().get(1);
		private final Group cGroup_0_0_1 = (Group)cAlternatives_0_0.eContents().get(1);
		private final Action cLTLUnaryNextAction_0_0_1_0 = (Action)cGroup_0_0_1.eContents().get(0);
		private final Keyword cNextKeyword_0_0_1_1 = (Keyword)cGroup_0_0_1.eContents().get(1);
		private final Group cGroup_0_0_2 = (Group)cAlternatives_0_0.eContents().get(2);
		private final Action cLTLUnaryAlwaysAction_0_0_2_0 = (Action)cGroup_0_0_2.eContents().get(0);
		private final Keyword cLeftSquareBracketRightSquareBracketKeyword_0_0_2_1 = (Keyword)cGroup_0_0_2.eContents().get(1);
		private final Group cGroup_0_0_3 = (Group)cAlternatives_0_0.eContents().get(3);
		private final Action cLTLUnaryEventuallyAction_0_0_3_0 = (Action)cGroup_0_0_3.eContents().get(0);
		private final Keyword cLessThanSignGreaterThanSignKeyword_0_0_3_1 = (Keyword)cGroup_0_0_3.eContents().get(1);
		private final Assignment cOperandAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
		private final RuleCall cOperandLTLUnaryParserRuleCall_0_1_0 = (RuleCall)cOperandAssignment_0_1.eContents().get(0);
		private final RuleCall cAtomicLTLParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//LTLUnary LTLProperty:
		//	({LTLUnaryNegation} 'not' | {LTLUnaryNext} 'next' | {LTLUnaryAlways} '[]' | {LTLUnaryEventually} '<>')
		//	operand=LTLUnary | AtomicLTL
		@Override public ParserRule getRule() { return rule; }
		
		//({LTLUnaryNegation} 'not' | {LTLUnaryNext} 'next' | {LTLUnaryAlways} '[]' | {LTLUnaryEventually} '<>') operand=LTLUnary
		//| AtomicLTL
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//({LTLUnaryNegation} 'not' | {LTLUnaryNext} 'next' | {LTLUnaryAlways} '[]' | {LTLUnaryEventually} '<>') operand=LTLUnary
		public Group getGroup_0() { return cGroup_0; }
		
		//({LTLUnaryNegation} 'not' | {LTLUnaryNext} 'next' | {LTLUnaryAlways} '[]' | {LTLUnaryEventually} '<>')
		public Alternatives getAlternatives_0_0() { return cAlternatives_0_0; }
		
		//{LTLUnaryNegation} 'not'
		public Group getGroup_0_0_0() { return cGroup_0_0_0; }
		
		//{LTLUnaryNegation}
		public Action getLTLUnaryNegationAction_0_0_0_0() { return cLTLUnaryNegationAction_0_0_0_0; }
		
		//'not'
		public Keyword getNotKeyword_0_0_0_1() { return cNotKeyword_0_0_0_1; }
		
		//{LTLUnaryNext} 'next'
		public Group getGroup_0_0_1() { return cGroup_0_0_1; }
		
		//{LTLUnaryNext}
		public Action getLTLUnaryNextAction_0_0_1_0() { return cLTLUnaryNextAction_0_0_1_0; }
		
		//'next'
		public Keyword getNextKeyword_0_0_1_1() { return cNextKeyword_0_0_1_1; }
		
		//{LTLUnaryAlways} '[]'
		public Group getGroup_0_0_2() { return cGroup_0_0_2; }
		
		//{LTLUnaryAlways}
		public Action getLTLUnaryAlwaysAction_0_0_2_0() { return cLTLUnaryAlwaysAction_0_0_2_0; }
		
		//'[]'
		public Keyword getLeftSquareBracketRightSquareBracketKeyword_0_0_2_1() { return cLeftSquareBracketRightSquareBracketKeyword_0_0_2_1; }
		
		//{LTLUnaryEventually} '<>'
		public Group getGroup_0_0_3() { return cGroup_0_0_3; }
		
		//{LTLUnaryEventually}
		public Action getLTLUnaryEventuallyAction_0_0_3_0() { return cLTLUnaryEventuallyAction_0_0_3_0; }
		
		//'<>'
		public Keyword getLessThanSignGreaterThanSignKeyword_0_0_3_1() { return cLessThanSignGreaterThanSignKeyword_0_0_3_1; }
		
		//operand=LTLUnary
		public Assignment getOperandAssignment_0_1() { return cOperandAssignment_0_1; }
		
		//LTLUnary
		public RuleCall getOperandLTLUnaryParserRuleCall_0_1_0() { return cOperandLTLUnaryParserRuleCall_0_1_0; }
		
		//AtomicLTL
		public RuleCall getAtomicLTLParserRuleCall_1() { return cAtomicLTLParserRuleCall_1; }
	}
	public class AtomicLTLElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.AtomicLTL");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Action cLTLVariableAction_0_0 = (Action)cGroup_0.eContents().get(0);
		private final Assignment cDeclarationAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
		private final CrossReference cDeclarationPropertyDeclarationUseCrossReference_0_1_0 = (CrossReference)cDeclarationAssignment_0_1.eContents().get(0);
		private final RuleCall cDeclarationPropertyDeclarationUseIDTerminalRuleCall_0_1_0_1 = (RuleCall)cDeclarationPropertyDeclarationUseCrossReference_0_1_0.eContents().get(1);
		private final RuleCall cObservableEventParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final Group cGroup_2 = (Group)cAlternatives.eContents().get(2);
		private final Keyword cLeftParenthesisKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
		private final RuleCall cLTLPropertyParserRuleCall_2_1 = (RuleCall)cGroup_2.eContents().get(1);
		private final Keyword cRightParenthesisKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
		
		//AtomicLTL LTLProperty:
		//	{LTLVariable} declaration=[PropertyDeclarationUse] | ObservableEvent
		//	| '(' LTLProperty ')'
		@Override public ParserRule getRule() { return rule; }
		
		//{LTLVariable} declaration=[PropertyDeclarationUse] | ObservableEvent | '(' LTLProperty ')'
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//{LTLVariable} declaration=[PropertyDeclarationUse]
		public Group getGroup_0() { return cGroup_0; }
		
		//{LTLVariable}
		public Action getLTLVariableAction_0_0() { return cLTLVariableAction_0_0; }
		
		//declaration=[PropertyDeclarationUse]
		public Assignment getDeclarationAssignment_0_1() { return cDeclarationAssignment_0_1; }
		
		//[PropertyDeclarationUse]
		public CrossReference getDeclarationPropertyDeclarationUseCrossReference_0_1_0() { return cDeclarationPropertyDeclarationUseCrossReference_0_1_0; }
		
		//ID
		public RuleCall getDeclarationPropertyDeclarationUseIDTerminalRuleCall_0_1_0_1() { return cDeclarationPropertyDeclarationUseIDTerminalRuleCall_0_1_0_1; }
		
		//ObservableEvent
		public RuleCall getObservableEventParserRuleCall_1() { return cObservableEventParserRuleCall_1; }
		
		//'(' LTLProperty ')'
		public Group getGroup_2() { return cGroup_2; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_2_0() { return cLeftParenthesisKeyword_2_0; }
		
		//LTLProperty
		public RuleCall getLTLPropertyParserRuleCall_2_1() { return cLTLPropertyParserRuleCall_2_1; }
		
		//')'
		public Keyword getRightParenthesisKeyword_2_2() { return cRightParenthesisKeyword_2_2; }
	}
	public class StateEventElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.StateEvent");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cEnterStateEventParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cLeaveStateEventParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//StateEvent:
		//	EnterStateEvent
		//	| LeaveStateEvent;
		@Override public ParserRule getRule() { return rule; }
		
		//EnterStateEvent | LeaveStateEvent
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//EnterStateEvent
		public RuleCall getEnterStateEventParserRuleCall_0() { return cEnterStateEventParserRuleCall_0; }
		
		//LeaveStateEvent
		public RuleCall getLeaveStateEventParserRuleCall_1() { return cLeaveStateEventParserRuleCall_1; }
	}
	public class EnterStateEventElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.EnterStateEvent");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cEnterKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cSubjectAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cSubjectAtomicObservableParserRuleCall_1_0 = (RuleCall)cSubjectAssignment_1.eContents().get(0);
		
		//EnterStateEvent:
		//	'enter' subject=AtomicObservable;
		@Override public ParserRule getRule() { return rule; }
		
		//'enter' subject=AtomicObservable
		public Group getGroup() { return cGroup; }
		
		//'enter'
		public Keyword getEnterKeyword_0() { return cEnterKeyword_0; }
		
		//subject=AtomicObservable
		public Assignment getSubjectAssignment_1() { return cSubjectAssignment_1; }
		
		//AtomicObservable
		public RuleCall getSubjectAtomicObservableParserRuleCall_1_0() { return cSubjectAtomicObservableParserRuleCall_1_0; }
	}
	public class LeaveStateEventElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.LeaveStateEvent");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLeaveKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cSubjectAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cSubjectAtomicObservableParserRuleCall_1_0 = (RuleCall)cSubjectAssignment_1.eContents().get(0);
		
		//LeaveStateEvent:
		//	'leave' subject=AtomicObservable;
		@Override public ParserRule getRule() { return rule; }
		
		//'leave' subject=AtomicObservable
		public Group getGroup() { return cGroup; }
		
		//'leave'
		public Keyword getLeaveKeyword_0() { return cLeaveKeyword_0; }
		
		//subject=AtomicObservable
		public Assignment getSubjectAssignment_1() { return cSubjectAssignment_1; }
		
		//AtomicObservable
		public RuleCall getSubjectAtomicObservableParserRuleCall_1_0() { return cSubjectAtomicObservableParserRuleCall_1_0; }
	}
	public class ObservableElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Observable");
		private final RuleCall cObservableDisjunctionParserRuleCall = (RuleCall)rule.eContents().get(1);
		
		//Observable:
		//	ObservableDisjunction;
		@Override public ParserRule getRule() { return rule; }
		
		//ObservableDisjunction
		public RuleCall getObservableDisjunctionParserRuleCall() { return cObservableDisjunctionParserRuleCall; }
	}
	public class ObservableDisjunctionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ObservableDisjunction");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cObservableImplicationParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cObservableDisjunctionLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cOrKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightObservableImplicationParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//ObservableDisjunction Observable:
		//	ObservableImplication ({ObservableDisjunction.left=current} 'or' right=ObservableImplication)*
		@Override public ParserRule getRule() { return rule; }
		
		//ObservableImplication ({ObservableDisjunction.left=current} 'or' right=ObservableImplication)*
		public Group getGroup() { return cGroup; }
		
		//ObservableImplication
		public RuleCall getObservableImplicationParserRuleCall_0() { return cObservableImplicationParserRuleCall_0; }
		
		//({ObservableDisjunction.left=current} 'or' right=ObservableImplication)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{ObservableDisjunction.left=current}
		public Action getObservableDisjunctionLeftAction_1_0() { return cObservableDisjunctionLeftAction_1_0; }
		
		//'or'
		public Keyword getOrKeyword_1_1() { return cOrKeyword_1_1; }
		
		//right=ObservableImplication
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//ObservableImplication
		public RuleCall getRightObservableImplicationParserRuleCall_1_2_0() { return cRightObservableImplicationParserRuleCall_1_2_0; }
	}
	public class ObservableImplicationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ObservableImplication");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cObservableConjunctionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cObservableImplicationLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cEqualsSignGreaterThanSignKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightObservableImplicationParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//ObservableImplication Observable:
		//	ObservableConjunction ({ObservableImplication.left=current} '=>' right=ObservableImplication)?
		@Override public ParserRule getRule() { return rule; }
		
		//ObservableConjunction ({ObservableImplication.left=current} '=>' right=ObservableImplication)?
		public Group getGroup() { return cGroup; }
		
		//ObservableConjunction
		public RuleCall getObservableConjunctionParserRuleCall_0() { return cObservableConjunctionParserRuleCall_0; }
		
		//({ObservableImplication.left=current} '=>' right=ObservableImplication)?
		public Group getGroup_1() { return cGroup_1; }
		
		//{ObservableImplication.left=current}
		public Action getObservableImplicationLeftAction_1_0() { return cObservableImplicationLeftAction_1_0; }
		
		//'=>'
		public Keyword getEqualsSignGreaterThanSignKeyword_1_1() { return cEqualsSignGreaterThanSignKeyword_1_1; }
		
		//right=ObservableImplication
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//ObservableImplication
		public RuleCall getRightObservableImplicationParserRuleCall_1_2_0() { return cRightObservableImplicationParserRuleCall_1_2_0; }
	}
	public class ObservableConjunctionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ObservableConjunction");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cObservableNegationParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Action cObservableConjunctionLeftAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cAndKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cRightAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cRightObservableNegationParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
		
		//ObservableConjunction Observable:
		//	ObservableNegation ({ObservableConjunction.left=current} 'and' right=ObservableNegation)*
		@Override public ParserRule getRule() { return rule; }
		
		//ObservableNegation ({ObservableConjunction.left=current} 'and' right=ObservableNegation)*
		public Group getGroup() { return cGroup; }
		
		//ObservableNegation
		public RuleCall getObservableNegationParserRuleCall_0() { return cObservableNegationParserRuleCall_0; }
		
		//({ObservableConjunction.left=current} 'and' right=ObservableNegation)*
		public Group getGroup_1() { return cGroup_1; }
		
		//{ObservableConjunction.left=current}
		public Action getObservableConjunctionLeftAction_1_0() { return cObservableConjunctionLeftAction_1_0; }
		
		//'and'
		public Keyword getAndKeyword_1_1() { return cAndKeyword_1_1; }
		
		//right=ObservableNegation
		public Assignment getRightAssignment_1_2() { return cRightAssignment_1_2; }
		
		//ObservableNegation
		public RuleCall getRightObservableNegationParserRuleCall_1_2_0() { return cRightObservableNegationParserRuleCall_1_2_0; }
	}
	public class ObservableNegationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ObservableNegation");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Action cObservableNegationAction_0_0 = (Action)cGroup_0.eContents().get(0);
		private final Keyword cNotKeyword_0_1 = (Keyword)cGroup_0.eContents().get(1);
		private final Assignment cChildAssignment_0_2 = (Assignment)cGroup_0.eContents().get(2);
		private final RuleCall cChildObservableNegationParserRuleCall_0_2_0 = (RuleCall)cChildAssignment_0_2.eContents().get(0);
		private final RuleCall cAtomicObservableParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//ObservableNegation Observable:
		//	{ObservableNegation} 'not' child=ObservableNegation | AtomicObservable
		@Override public ParserRule getRule() { return rule; }
		
		//{ObservableNegation} 'not' child=ObservableNegation | AtomicObservable
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//{ObservableNegation} 'not' child=ObservableNegation
		public Group getGroup_0() { return cGroup_0; }
		
		//{ObservableNegation}
		public Action getObservableNegationAction_0_0() { return cObservableNegationAction_0_0; }
		
		//'not'
		public Keyword getNotKeyword_0_1() { return cNotKeyword_0_1; }
		
		//child=ObservableNegation
		public Assignment getChildAssignment_0_2() { return cChildAssignment_0_2; }
		
		//ObservableNegation
		public RuleCall getChildObservableNegationParserRuleCall_0_2_0() { return cChildObservableNegationParserRuleCall_0_2_0; }
		
		//AtomicObservable
		public RuleCall getAtomicObservableParserRuleCall_1() { return cAtomicObservableParserRuleCall_1; }
	}
	public class AtomicObservableElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.AtomicObservable");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_0_0 = (Keyword)cGroup_0.eContents().get(0);
		private final RuleCall cObservableParserRuleCall_0_1 = (RuleCall)cGroup_0.eContents().get(1);
		private final Keyword cRightParenthesisKeyword_0_2 = (Keyword)cGroup_0.eContents().get(2);
		private final RuleCall cObservableEventParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//AtomicObservable Observable:
		//	'(' Observable ')' | ObservableEvent
		@Override public ParserRule getRule() { return rule; }
		
		//'(' Observable ')' | ObservableEvent
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//'(' Observable ')'
		public Group getGroup_0() { return cGroup_0; }
		
		//'('
		public Keyword getLeftParenthesisKeyword_0_0() { return cLeftParenthesisKeyword_0_0; }
		
		//Observable
		public RuleCall getObservableParserRuleCall_0_1() { return cObservableParserRuleCall_0_1; }
		
		//')'
		public Keyword getRightParenthesisKeyword_0_2() { return cRightParenthesisKeyword_0_2; }
		
		//ObservableEvent
		public RuleCall getObservableEventParserRuleCall_1() { return cObservableEventParserRuleCall_1; }
	}
	public class ObservableEventElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ObservableEvent");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cPathEventParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cStateEventParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//ObservableEvent:
		//	PathEvent | StateEvent;
		@Override public ParserRule getRule() { return rule; }
		
		//PathEvent | StateEvent
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//PathEvent
		public RuleCall getPathEventParserRuleCall_0() { return cPathEventParserRuleCall_0; }
		
		//StateEvent
		public RuleCall getStateEventParserRuleCall_1() { return cStateEventParserRuleCall_1; }
	}
	public class PathEventElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PathEvent");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cPathAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cPathPathParserRuleCall_0_0 = (RuleCall)cPathAssignment_0.eContents().get(0);
		private final Assignment cItemAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cItemSubjectParserRuleCall_1_0 = (RuleCall)cItemAssignment_1.eContents().get(0);
		
		//PathEvent:
		//	path=Path item=Subject;
		@Override public ParserRule getRule() { return rule; }
		
		//path=Path item=Subject
		public Group getGroup() { return cGroup; }
		
		//path=Path
		public Assignment getPathAssignment_0() { return cPathAssignment_0; }
		
		//Path
		public RuleCall getPathPathParserRuleCall_0_0() { return cPathPathParserRuleCall_0_0; }
		
		//item=Subject
		public Assignment getItemAssignment_1() { return cItemAssignment_1; }
		
		//Subject
		public RuleCall getItemSubjectParserRuleCall_1_0() { return cItemSubjectParserRuleCall_1_0; }
	}
	public class PathElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Path");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cItemsAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cItemsPathItemParserRuleCall_0_0 = (RuleCall)cItemsAssignment_0.eContents().get(0);
		private final Keyword cSolidusKeyword_1 = (Keyword)cGroup.eContents().get(1);
		
		//Path:
		//	(items+=PathItem '/')+;
		@Override public ParserRule getRule() { return rule; }
		
		//(items+=PathItem '/')+
		public Group getGroup() { return cGroup; }
		
		//items+=PathItem
		public Assignment getItemsAssignment_0() { return cItemsAssignment_0; }
		
		//PathItem
		public RuleCall getItemsPathItemParserRuleCall_0_0() { return cItemsPathItemParserRuleCall_0_0; }
		
		//'/'
		public Keyword getSolidusKeyword_1() { return cSolidusKeyword_1; }
	}
	public class PathItemElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.PathItem");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cNaturalItemParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cNamedItemParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		
		//PathItem:
		//	NaturalItem | NamedItem;
		@Override public ParserRule getRule() { return rule; }
		
		//NaturalItem | NamedItem
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//NaturalItem
		public RuleCall getNaturalItemParserRuleCall_0() { return cNaturalItemParserRuleCall_0; }
		
		//NamedItem
		public RuleCall getNamedItemParserRuleCall_1() { return cNamedItemParserRuleCall_1; }
	}
	public class NaturalItemElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.NaturalItem");
		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cValueINTTerminalRuleCall_0 = (RuleCall)cValueAssignment.eContents().get(0);
		
		//NaturalItem:
		//	value=INT;
		@Override public ParserRule getRule() { return rule; }
		
		//value=INT
		public Assignment getValueAssignment() { return cValueAssignment; }
		
		//INT
		public RuleCall getValueINTTerminalRuleCall_0() { return cValueINTTerminalRuleCall_0; }
	}
	public class NamedItemElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.NamedItem");
		private final Assignment cDeclarationAssignment = (Assignment)rule.eContents().get(1);
		private final CrossReference cDeclarationPathDeclarationUseCrossReference_0 = (CrossReference)cDeclarationAssignment.eContents().get(0);
		private final RuleCall cDeclarationPathDeclarationUseIDTerminalRuleCall_0_1 = (RuleCall)cDeclarationPathDeclarationUseCrossReference_0.eContents().get(1);
		
		//NamedItem:
		//	declaration=[PathDeclarationUse];
		@Override public ParserRule getRule() { return rule; }
		
		//declaration=[PathDeclarationUse]
		public Assignment getDeclarationAssignment() { return cDeclarationAssignment; }
		
		//[PathDeclarationUse]
		public CrossReference getDeclarationPathDeclarationUseCrossReference_0() { return cDeclarationPathDeclarationUseCrossReference_0; }
		
		//ID
		public RuleCall getDeclarationPathDeclarationUseIDTerminalRuleCall_0_1() { return cDeclarationPathDeclarationUseIDTerminalRuleCall_0_1; }
	}
	public class SubjectElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.Subject");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final RuleCall cStateSubjectParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
		private final RuleCall cValueSubjectParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
		private final RuleCall cTagSubjectParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
		private final RuleCall cEventSubjectParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
		
		//Subject:
		//	StateSubject | ValueSubject | TagSubject | EventSubject;
		@Override public ParserRule getRule() { return rule; }
		
		//StateSubject | ValueSubject | TagSubject | EventSubject
		public Alternatives getAlternatives() { return cAlternatives; }
		
		//StateSubject
		public RuleCall getStateSubjectParserRuleCall_0() { return cStateSubjectParserRuleCall_0; }
		
		//ValueSubject
		public RuleCall getValueSubjectParserRuleCall_1() { return cValueSubjectParserRuleCall_1; }
		
		//TagSubject
		public RuleCall getTagSubjectParserRuleCall_2() { return cTagSubjectParserRuleCall_2; }
		
		//EventSubject
		public RuleCall getEventSubjectParserRuleCall_3() { return cEventSubjectParserRuleCall_3; }
	}
	public class StateSubjectElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.StateSubject");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cStateKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cStateAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final CrossReference cStateStateDeclarationCrossReference_1_0 = (CrossReference)cStateAssignment_1.eContents().get(0);
		private final RuleCall cStateStateDeclarationIDTerminalRuleCall_1_0_1 = (RuleCall)cStateStateDeclarationCrossReference_1_0.eContents().get(1);
		
		//StateSubject:
		//	'state' state=[StateDeclaration];
		@Override public ParserRule getRule() { return rule; }
		
		//'state' state=[StateDeclaration]
		public Group getGroup() { return cGroup; }
		
		//'state'
		public Keyword getStateKeyword_0() { return cStateKeyword_0; }
		
		//state=[StateDeclaration]
		public Assignment getStateAssignment_1() { return cStateAssignment_1; }
		
		//[StateDeclaration]
		public CrossReference getStateStateDeclarationCrossReference_1_0() { return cStateStateDeclarationCrossReference_1_0; }
		
		//ID
		public RuleCall getStateStateDeclarationIDTerminalRuleCall_1_0_1() { return cStateStateDeclarationIDTerminalRuleCall_1_0_1; }
	}
	public class ValueSubjectElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ValueSubject");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cValueKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cValueAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cValueAtomicExpressionParserRuleCall_1_0 = (RuleCall)cValueAssignment_1.eContents().get(0);
		
		//ValueSubject:
		//	'value' value=AtomicExpression;
		@Override public ParserRule getRule() { return rule; }
		
		//'value' value=AtomicExpression
		public Group getGroup() { return cGroup; }
		
		//'value'
		public Keyword getValueKeyword_0() { return cValueKeyword_0; }
		
		//value=AtomicExpression
		public Assignment getValueAssignment_1() { return cValueAssignment_1; }
		
		//AtomicExpression
		public RuleCall getValueAtomicExpressionParserRuleCall_1_0() { return cValueAtomicExpressionParserRuleCall_1_0; }
	}
	public class TagSubjectElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.TagSubject");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cTagKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cTagAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final CrossReference cTagTaggedStatementCrossReference_1_0 = (CrossReference)cTagAssignment_1.eContents().get(0);
		private final RuleCall cTagTaggedStatementIDTerminalRuleCall_1_0_1 = (RuleCall)cTagTaggedStatementCrossReference_1_0.eContents().get(1);
		
		//TagSubject:
		//	'tag' tag=[TaggedStatement];
		@Override public ParserRule getRule() { return rule; }
		
		//'tag' tag=[TaggedStatement]
		public Group getGroup() { return cGroup; }
		
		//'tag'
		public Keyword getTagKeyword_0() { return cTagKeyword_0; }
		
		//tag=[TaggedStatement]
		public Assignment getTagAssignment_1() { return cTagAssignment_1; }
		
		//[TaggedStatement]
		public CrossReference getTagTaggedStatementCrossReference_1_0() { return cTagTaggedStatementCrossReference_1_0; }
		
		//ID
		public RuleCall getTagTaggedStatementIDTerminalRuleCall_1_0_1() { return cTagTaggedStatementIDTerminalRuleCall_1_0_1; }
	}
	public class EventSubjectElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.EventSubject");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cEventKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cEventAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cEventIDTerminalRuleCall_1_0 = (RuleCall)cEventAssignment_1.eContents().get(0);
		
		//EventSubject:
		//	'event' event=ID;
		@Override public ParserRule getRule() { return rule; }
		
		//'event' event=ID
		public Group getGroup() { return cGroup; }
		
		//'event'
		public Keyword getEventKeyword_0() { return cEventKeyword_0; }
		
		//event=ID
		public Assignment getEventAssignment_1() { return cEventAssignment_1; }
		
		//ID
		public RuleCall getEventIDTerminalRuleCall_1_0() { return cEventIDTerminalRuleCall_1_0; }
	}
	
	
	private final ModelElements pModel;
	private final RootDeclarationElements pRootDeclaration;
	private final RootElements pRoot;
	private final NamedElementElements pNamedElement;
	private final TypeDeclarationUseElements pTypeDeclarationUse;
	private final ConstantDeclarationUseElements pConstantDeclarationUse;
	private final ExpressionDeclarationUseElements pExpressionDeclarationUse;
	private final ReferenceDeclarationUseElements pReferenceDeclarationUse;
	private final UnionTagDeclarationUseElements pUnionTagDeclarationUse;
	private final RecordFieldDeclarationUseElements pRecordFieldDeclarationUse;
	private final PatternDeclarationUseElements pPatternDeclarationUse;
	private final BoundDeclarationUseElements pBoundDeclarationUse;
	private final PathDeclarationUseElements pPathDeclarationUse;
	private final PropertyDeclarationUseElements pPropertyDeclarationUse;
	private final ImportDeclarationElements pImportDeclaration;
	private final DeclarationElements pDeclaration;
	private final ParameterizedDeclarationElements pParameterizedDeclaration;
	private final FunctionDeclarationElements pFunctionDeclaration;
	private final TypeDeclarationElements pTypeDeclaration;
	private final ChannelDeclarationElements pChannelDeclaration;
	private final ChannelTypeElements pChannelType;
	private final TypeElements pType;
	private final TupleTypeElements pTupleType;
	private final BasicTypeElements pBasicType;
	private final RangeTypeElements pRangeType;
	private final UnionTypeElements pUnionType;
	private final UnionTagsElements pUnionTags;
	private final UnionTagDeclarationElements pUnionTagDeclaration;
	private final RecordTypeElements pRecordType;
	private final RecordFieldsElements pRecordFields;
	private final RecordFieldDeclarationElements pRecordFieldDeclaration;
	private final QueueTypeElements pQueueType;
	private final ArrayTypeElements pArrayType;
	private final ReferencedTypeElements pReferencedType;
	private final ConstantDeclarationElements pConstantDeclaration;
	private final ProcessDeclarationElements pProcessDeclaration;
	private final StateDeclarationElements pStateDeclaration;
	private final TransitionSourceElements pTransitionSource;
	private final TransitionElements pTransition;
	private final ComponentDeclarationElements pComponentDeclaration;
	private final PortsDeclarationElements pPortsDeclaration;
	private final PortDeclarationElements pPortDeclaration;
	private final LocalPortsDeclarationElements pLocalPortsDeclaration;
	private final ParametersDeclarationElements pParametersDeclaration;
	private final ParameterDeclarationElements pParameterDeclaration;
	private final VariablesDeclarationElements pVariablesDeclaration;
	private final VariableDeclarationElements pVariableDeclaration;
	private final PriorityDeclarationElements pPriorityDeclaration;
	private final PriorityGroupElements pPriorityGroup;
	private final UnlessStatementElements pUnlessStatement;
	private final StatementChoiceElements pStatementChoice;
	private final StatementSequenceElements pStatementSequence;
	private final StatementElements pStatement;
	private final BlockStatementElements pBlockStatement;
	private final ReturnStatementElements pReturnStatement;
	private final NullStatementElements pNullStatement;
	private final TaggedStatementElements pTaggedStatement;
	private final PatternStatementElements pPatternStatement;
	private final PatternElements pPattern;
	private final AnyPatternElements pAnyPattern;
	private final ConstantPatternElements pConstantPattern;
	private final IntegerPatternElements pIntegerPattern;
	private final IdentifierPatternElements pIdentifierPattern;
	private final ConditionalStatementElements pConditionalStatement;
	private final ExtendedConditionalStatementElements pExtendedConditionalStatement;
	private final SelectStatementElements pSelectStatement;
	private final WhileStatementElements pWhileStatement;
	private final ForeachStatementElements pForeachStatement;
	private final ToStatementElements pToStatement;
	private final CaseStatementElements pCaseStatement;
	private final LoopStatementElements pLoopStatement;
	private final OnStatementElements pOnStatement;
	private final WaitStatementElements pWaitStatement;
	private final CompositionElements pComposition;
	private final BlockElements pBlock;
	private final CompositeBlockElements pCompositeBlock;
	private final InstanceDeclarationElements pInstanceDeclaration;
	private final PortSetElements pPortSet;
	private final ComponentInstanceElements pComponentInstance;
	private final ExpressionElements pExpression;
	private final QuantifiedExpressionElements pQuantifiedExpression;
	private final ConditionalElements pConditional;
	private final DisjunctionElements pDisjunction;
	private final ImplicationElements pImplication;
	private final ConjunctionElements pConjunction;
	private final ComparisonElements pComparison;
	private final AdditionElements pAddition;
	private final SubstractionElements pSubstraction;
	private final MultiplicationElements pMultiplication;
	private final DivisionElements pDivision;
	private final ModuloElements pModulo;
	private final UnaryExpressionElements pUnaryExpression;
	private final ProjectionElements pProjection;
	private final ValueExpressionElements pValueExpression;
	private final AtomicExpressionElements pAtomicExpression;
	private final ReferenceExpressionElements pReferenceExpression;
	private final IdentifierExpressionElements pIdentifierExpression;
	private final RecordExpressionElements pRecordExpression;
	private final FieldExpressionElements pFieldExpression;
	private final ArrayExpressionElements pArrayExpression;
	private final QueueExpressionElements pQueueExpression;
	private final EnqueueExpressionElements pEnqueueExpression;
	private final AppendExpressionElements pAppendExpression;
	private final LiteralExpressionElements pLiteralExpression;
	private final BooleanLiteralElements pBooleanLiteral;
	private final NaturalLiteralElements pNaturalLiteral;
	private final LowerBoundElements pLowerBound;
	private final UpperBoundElements pUpperBound;
	private final NaturalLowerBoundElements pNaturalLowerBound;
	private final NaturalUpperBoundElements pNaturalUpperBound;
	private final DecimalLowerBoundElements pDecimalLowerBound;
	private final DecimalUpperBoundElements pDecimalUpperBound;
	private final VariableLowerBoundElements pVariableLowerBound;
	private final VariableUpperBoundElements pVariableUpperBound;
	private final InfiniteUpperBoundElements pInfiniteUpperBound;
	private final RequirementElements pRequirement;
	private final PropertyDeclarationElements pPropertyDeclaration;
	private final PropertyElements pProperty;
	private final QuantifiedPropertyElements pQuantifiedProperty;
	private final PropertyDisjunctionElements pPropertyDisjunction;
	private final PropertyImplicationElements pPropertyImplication;
	private final PropertyConjunctionElements pPropertyConjunction;
	private final PropertyNegationElements pPropertyNegation;
	private final AtomicPropertyElements pAtomicProperty;
	private final PatternPropertyElements pPatternProperty;
	private final LTLPatternElements pLTLPattern;
	private final DeadlockFreePatternElements pDeadlockFreePattern;
	private final InfinitelyOftenPatternElements pInfinitelyOftenPattern;
	private final MortalPatternElements pMortalPattern;
	private final PresencePatternElements pPresencePattern;
	private final AbsencePatternElements pAbsencePattern;
	private final AlwaysPatternElements pAlwaysPattern;
	private final SequencePatternElements pSequencePattern;
	private final LTLPropertyElements pLTLProperty;
	private final LTLQuantifiedElements pLTLQuantified;
	private final LTLDisjunctionElements pLTLDisjunction;
	private final LTLImplicationElements pLTLImplication;
	private final LTLConjunctionElements pLTLConjunction;
	private final LTLBinaryElements pLTLBinary;
	private final LTLUnaryElements pLTLUnary;
	private final AtomicLTLElements pAtomicLTL;
	private final StateEventElements pStateEvent;
	private final EnterStateEventElements pEnterStateEvent;
	private final LeaveStateEventElements pLeaveStateEvent;
	private final ObservableElements pObservable;
	private final ObservableDisjunctionElements pObservableDisjunction;
	private final ObservableImplicationElements pObservableImplication;
	private final ObservableConjunctionElements pObservableConjunction;
	private final ObservableNegationElements pObservableNegation;
	private final AtomicObservableElements pAtomicObservable;
	private final ObservableEventElements pObservableEvent;
	private final PathEventElements pPathEvent;
	private final PathElements pPath;
	private final PathItemElements pPathItem;
	private final NaturalItemElements pNaturalItem;
	private final NamedItemElements pNamedItem;
	private final SubjectElements pSubject;
	private final StateSubjectElements pStateSubject;
	private final ValueSubjectElements pValueSubject;
	private final TagSubjectElements pTagSubject;
	private final EventSubjectElements pEventSubject;
	private final TerminalRule tINT;
	private final TerminalRule tID;
	private final TerminalRule tFLT;
	
	private final Grammar grammar;
	
	private final TerminalsGrammarAccess gaTerminals;

	@Inject
	public FiacreGrammarAccess(GrammarProvider grammarProvider,
			TerminalsGrammarAccess gaTerminals) {
		this.grammar = internalFindGrammar(grammarProvider);
		this.gaTerminals = gaTerminals;
		this.pModel = new ModelElements();
		this.pRootDeclaration = new RootDeclarationElements();
		this.pRoot = new RootElements();
		this.pNamedElement = new NamedElementElements();
		this.pTypeDeclarationUse = new TypeDeclarationUseElements();
		this.pConstantDeclarationUse = new ConstantDeclarationUseElements();
		this.pExpressionDeclarationUse = new ExpressionDeclarationUseElements();
		this.pReferenceDeclarationUse = new ReferenceDeclarationUseElements();
		this.pUnionTagDeclarationUse = new UnionTagDeclarationUseElements();
		this.pRecordFieldDeclarationUse = new RecordFieldDeclarationUseElements();
		this.pPatternDeclarationUse = new PatternDeclarationUseElements();
		this.pBoundDeclarationUse = new BoundDeclarationUseElements();
		this.pPathDeclarationUse = new PathDeclarationUseElements();
		this.pPropertyDeclarationUse = new PropertyDeclarationUseElements();
		this.pImportDeclaration = new ImportDeclarationElements();
		this.pDeclaration = new DeclarationElements();
		this.pParameterizedDeclaration = new ParameterizedDeclarationElements();
		this.pFunctionDeclaration = new FunctionDeclarationElements();
		this.pTypeDeclaration = new TypeDeclarationElements();
		this.pChannelDeclaration = new ChannelDeclarationElements();
		this.pChannelType = new ChannelTypeElements();
		this.pType = new TypeElements();
		this.pTupleType = new TupleTypeElements();
		this.pBasicType = new BasicTypeElements();
		this.pRangeType = new RangeTypeElements();
		this.pUnionType = new UnionTypeElements();
		this.pUnionTags = new UnionTagsElements();
		this.pUnionTagDeclaration = new UnionTagDeclarationElements();
		this.pRecordType = new RecordTypeElements();
		this.pRecordFields = new RecordFieldsElements();
		this.pRecordFieldDeclaration = new RecordFieldDeclarationElements();
		this.pQueueType = new QueueTypeElements();
		this.pArrayType = new ArrayTypeElements();
		this.pReferencedType = new ReferencedTypeElements();
		this.pConstantDeclaration = new ConstantDeclarationElements();
		this.pProcessDeclaration = new ProcessDeclarationElements();
		this.pStateDeclaration = new StateDeclarationElements();
		this.pTransitionSource = new TransitionSourceElements();
		this.pTransition = new TransitionElements();
		this.pComponentDeclaration = new ComponentDeclarationElements();
		this.pPortsDeclaration = new PortsDeclarationElements();
		this.pPortDeclaration = new PortDeclarationElements();
		this.pLocalPortsDeclaration = new LocalPortsDeclarationElements();
		this.pParametersDeclaration = new ParametersDeclarationElements();
		this.pParameterDeclaration = new ParameterDeclarationElements();
		this.pVariablesDeclaration = new VariablesDeclarationElements();
		this.pVariableDeclaration = new VariableDeclarationElements();
		this.pPriorityDeclaration = new PriorityDeclarationElements();
		this.pPriorityGroup = new PriorityGroupElements();
		this.pUnlessStatement = new UnlessStatementElements();
		this.pStatementChoice = new StatementChoiceElements();
		this.pStatementSequence = new StatementSequenceElements();
		this.pStatement = new StatementElements();
		this.pBlockStatement = new BlockStatementElements();
		this.pReturnStatement = new ReturnStatementElements();
		this.pNullStatement = new NullStatementElements();
		this.pTaggedStatement = new TaggedStatementElements();
		this.pPatternStatement = new PatternStatementElements();
		this.pPattern = new PatternElements();
		this.pAnyPattern = new AnyPatternElements();
		this.pConstantPattern = new ConstantPatternElements();
		this.pIntegerPattern = new IntegerPatternElements();
		this.pIdentifierPattern = new IdentifierPatternElements();
		this.pConditionalStatement = new ConditionalStatementElements();
		this.pExtendedConditionalStatement = new ExtendedConditionalStatementElements();
		this.pSelectStatement = new SelectStatementElements();
		this.pWhileStatement = new WhileStatementElements();
		this.pForeachStatement = new ForeachStatementElements();
		this.pToStatement = new ToStatementElements();
		this.pCaseStatement = new CaseStatementElements();
		this.pLoopStatement = new LoopStatementElements();
		this.pOnStatement = new OnStatementElements();
		this.pWaitStatement = new WaitStatementElements();
		this.pComposition = new CompositionElements();
		this.pBlock = new BlockElements();
		this.pCompositeBlock = new CompositeBlockElements();
		this.pInstanceDeclaration = new InstanceDeclarationElements();
		this.pPortSet = new PortSetElements();
		this.pComponentInstance = new ComponentInstanceElements();
		this.pExpression = new ExpressionElements();
		this.pQuantifiedExpression = new QuantifiedExpressionElements();
		this.pConditional = new ConditionalElements();
		this.pDisjunction = new DisjunctionElements();
		this.pImplication = new ImplicationElements();
		this.pConjunction = new ConjunctionElements();
		this.pComparison = new ComparisonElements();
		this.pAddition = new AdditionElements();
		this.pSubstraction = new SubstractionElements();
		this.pMultiplication = new MultiplicationElements();
		this.pDivision = new DivisionElements();
		this.pModulo = new ModuloElements();
		this.pUnaryExpression = new UnaryExpressionElements();
		this.pProjection = new ProjectionElements();
		this.pValueExpression = new ValueExpressionElements();
		this.pAtomicExpression = new AtomicExpressionElements();
		this.pReferenceExpression = new ReferenceExpressionElements();
		this.pIdentifierExpression = new IdentifierExpressionElements();
		this.pRecordExpression = new RecordExpressionElements();
		this.pFieldExpression = new FieldExpressionElements();
		this.pArrayExpression = new ArrayExpressionElements();
		this.pQueueExpression = new QueueExpressionElements();
		this.pEnqueueExpression = new EnqueueExpressionElements();
		this.pAppendExpression = new AppendExpressionElements();
		this.pLiteralExpression = new LiteralExpressionElements();
		this.pBooleanLiteral = new BooleanLiteralElements();
		this.pNaturalLiteral = new NaturalLiteralElements();
		this.pLowerBound = new LowerBoundElements();
		this.pUpperBound = new UpperBoundElements();
		this.pNaturalLowerBound = new NaturalLowerBoundElements();
		this.pNaturalUpperBound = new NaturalUpperBoundElements();
		this.pDecimalLowerBound = new DecimalLowerBoundElements();
		this.pDecimalUpperBound = new DecimalUpperBoundElements();
		this.pVariableLowerBound = new VariableLowerBoundElements();
		this.pVariableUpperBound = new VariableUpperBoundElements();
		this.pInfiniteUpperBound = new InfiniteUpperBoundElements();
		this.pRequirement = new RequirementElements();
		this.pPropertyDeclaration = new PropertyDeclarationElements();
		this.pProperty = new PropertyElements();
		this.pQuantifiedProperty = new QuantifiedPropertyElements();
		this.pPropertyDisjunction = new PropertyDisjunctionElements();
		this.pPropertyImplication = new PropertyImplicationElements();
		this.pPropertyConjunction = new PropertyConjunctionElements();
		this.pPropertyNegation = new PropertyNegationElements();
		this.pAtomicProperty = new AtomicPropertyElements();
		this.pPatternProperty = new PatternPropertyElements();
		this.pLTLPattern = new LTLPatternElements();
		this.pDeadlockFreePattern = new DeadlockFreePatternElements();
		this.pInfinitelyOftenPattern = new InfinitelyOftenPatternElements();
		this.pMortalPattern = new MortalPatternElements();
		this.pPresencePattern = new PresencePatternElements();
		this.pAbsencePattern = new AbsencePatternElements();
		this.pAlwaysPattern = new AlwaysPatternElements();
		this.pSequencePattern = new SequencePatternElements();
		this.pLTLProperty = new LTLPropertyElements();
		this.pLTLQuantified = new LTLQuantifiedElements();
		this.pLTLDisjunction = new LTLDisjunctionElements();
		this.pLTLImplication = new LTLImplicationElements();
		this.pLTLConjunction = new LTLConjunctionElements();
		this.pLTLBinary = new LTLBinaryElements();
		this.pLTLUnary = new LTLUnaryElements();
		this.pAtomicLTL = new AtomicLTLElements();
		this.pStateEvent = new StateEventElements();
		this.pEnterStateEvent = new EnterStateEventElements();
		this.pLeaveStateEvent = new LeaveStateEventElements();
		this.pObservable = new ObservableElements();
		this.pObservableDisjunction = new ObservableDisjunctionElements();
		this.pObservableImplication = new ObservableImplicationElements();
		this.pObservableConjunction = new ObservableConjunctionElements();
		this.pObservableNegation = new ObservableNegationElements();
		this.pAtomicObservable = new AtomicObservableElements();
		this.pObservableEvent = new ObservableEventElements();
		this.pPathEvent = new PathEventElements();
		this.pPath = new PathElements();
		this.pPathItem = new PathItemElements();
		this.pNaturalItem = new NaturalItemElements();
		this.pNamedItem = new NamedItemElements();
		this.pSubject = new SubjectElements();
		this.pStateSubject = new StateSubjectElements();
		this.pValueSubject = new ValueSubjectElements();
		this.pTagSubject = new TagSubjectElements();
		this.pEventSubject = new EventSubjectElements();
		this.tINT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.INT");
		this.tID = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.ID");
		this.tFLT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "fr.irit.fiacre.xtext.Fiacre.FLT");
	}
	
	protected Grammar internalFindGrammar(GrammarProvider grammarProvider) {
		Grammar grammar = grammarProvider.getGrammar(this);
		while (grammar != null) {
			if ("fr.irit.fiacre.xtext.Fiacre".equals(grammar.getName())) {
				return grammar;
			}
			List<Grammar> grammars = grammar.getUsedGrammars();
			if (!grammars.isEmpty()) {
				grammar = grammars.iterator().next();
			} else {
				return null;
			}
		}
		return grammar;
	}
	
	@Override
	public Grammar getGrammar() {
		return grammar;
	}
	
	
	public TerminalsGrammarAccess getTerminalsGrammarAccess() {
		return gaTerminals;
	}

	
	//Model:
	//	{Model} imports+=ImportDeclaration* (declarations+=Declaration | requirements+=Requirement
	//	/ * added alternative root * / | root+=Root)*
	//	//	((root=[RootDeclaration])? (declarations+=Declaration | requirements+=Requirement)*)
	//;
	public ModelElements getModelAccess() {
		return pModel;
	}
	
	public ParserRule getModelRule() {
		return getModelAccess().getRule();
	}
	
	//RootDeclaration:
	//	ComponentDeclaration
	//	| ProcessDeclaration;
	public RootDeclarationElements getRootDeclarationAccess() {
		return pRootDeclaration;
	}
	
	public ParserRule getRootDeclarationRule() {
		return getRootDeclarationAccess().getRule();
	}
	
	//Root:
	//	{Root} declaration=[RootDeclaration] ('>' (observed+=[RootDeclaration] ('|' observed+=[RootDeclaration])*))?;
	public RootElements getRootAccess() {
		return pRoot;
	}
	
	public ParserRule getRootRule() {
		return getRootAccess().getRule();
	}
	
	//NamedElement:
	//	Declaration
	//	//| GenericDeclaration
	//	| PortDeclaration
	//	| ParameterDeclaration
	//	| VariableDeclaration
	//	| StateDeclaration
	//	| RecordFieldDeclaration
	//	| UnionTagDeclaration
	//	//ajout Faiez
	//	//	| TagDeclaration
	//;
	public NamedElementElements getNamedElementAccess() {
		return pNamedElement;
	}
	
	public ParserRule getNamedElementRule() {
		return getNamedElementAccess().getRule();
	}
	
	//TypeDeclarationUse:
	//	TypeDeclaration
	//	//| GenericTypeDeclaration
	//	| ChannelDeclaration
	//	//| GenericConstantDeclaration
	//;
	public TypeDeclarationUseElements getTypeDeclarationUseAccess() {
		return pTypeDeclarationUse;
	}
	
	public ParserRule getTypeDeclarationUseRule() {
		return getTypeDeclarationUseAccess().getRule();
	}
	
	//ConstantDeclarationUse:
	//	ConstantDeclaration
	//	//| GenericConstantDeclaration
	//;
	public ConstantDeclarationUseElements getConstantDeclarationUseAccess() {
		return pConstantDeclarationUse;
	}
	
	public ParserRule getConstantDeclarationUseRule() {
		return getConstantDeclarationUseAccess().getRule();
	}
	
	//ExpressionDeclarationUse:
	//	VariableDeclaration
	//	| ConstantDeclaration
	//	//| GenericConstantDeclaration
	//	| ParameterDeclaration
	//	| PortDeclaration
	//	| UnionTagDeclaration
	//	//| GenericDeclaration
	//	| FunctionDeclaration;
	public ExpressionDeclarationUseElements getExpressionDeclarationUseAccess() {
		return pExpressionDeclarationUse;
	}
	
	public ParserRule getExpressionDeclarationUseRule() {
		return getExpressionDeclarationUseAccess().getRule();
	}
	
	//ReferenceDeclarationUse:
	//	VariableDeclaration
	//	| ParameterDeclaration;
	public ReferenceDeclarationUseElements getReferenceDeclarationUseAccess() {
		return pReferenceDeclarationUse;
	}
	
	public ParserRule getReferenceDeclarationUseRule() {
		return getReferenceDeclarationUseAccess().getRule();
	}
	
	//UnionTagDeclarationUse:
	//	UnionTagDeclaration
	//	//| GenericUnionTagDeclaration
	//;
	public UnionTagDeclarationUseElements getUnionTagDeclarationUseAccess() {
		return pUnionTagDeclarationUse;
	}
	
	public ParserRule getUnionTagDeclarationUseRule() {
		return getUnionTagDeclarationUseAccess().getRule();
	}
	
	//RecordFieldDeclarationUse:
	//	RecordFieldDeclaration
	//	//| GenericRecordFieldDeclaration
	//;
	public RecordFieldDeclarationUseElements getRecordFieldDeclarationUseAccess() {
		return pRecordFieldDeclarationUse;
	}
	
	public ParserRule getRecordFieldDeclarationUseRule() {
		return getRecordFieldDeclarationUseAccess().getRule();
	}
	
	//PatternDeclarationUse:
	//	VariableDeclaration
	//	| ParameterDeclaration
	//	| PortDeclaration
	//	| UnionTagDeclaration
	//	//| GenericUnionTagDeclaration
	//;
	public PatternDeclarationUseElements getPatternDeclarationUseAccess() {
		return pPatternDeclarationUse;
	}
	
	public ParserRule getPatternDeclarationUseRule() {
		return getPatternDeclarationUseAccess().getRule();
	}
	
	//BoundDeclarationUse:
	//	VariableDeclaration
	//	//| GenericConstantDeclaration
	//	| ConstantDeclaration;
	public BoundDeclarationUseElements getBoundDeclarationUseAccess() {
		return pBoundDeclarationUse;
	}
	
	public ParserRule getBoundDeclarationUseRule() {
		return getBoundDeclarationUseAccess().getRule();
	}
	
	//PathDeclarationUse:
	//	ComponentDeclaration
	//	| InstanceDeclaration
	//	| ProcessDeclaration;
	public PathDeclarationUseElements getPathDeclarationUseAccess() {
		return pPathDeclarationUse;
	}
	
	public ParserRule getPathDeclarationUseRule() {
		return getPathDeclarationUseAccess().getRule();
	}
	
	//PropertyDeclarationUse:
	//	PropertyDeclaration
	//	| VariableDeclaration;
	public PropertyDeclarationUseElements getPropertyDeclarationUseAccess() {
		return pPropertyDeclarationUse;
	}
	
	public ParserRule getPropertyDeclarationUseRule() {
		return getPropertyDeclarationUseAccess().getRule();
	}
	
	//ImportDeclaration:
	//	'#include' importURI=STRING;
	public ImportDeclarationElements getImportDeclarationAccess() {
		return pImportDeclaration;
	}
	
	public ParserRule getImportDeclarationRule() {
		return getImportDeclarationAccess().getRule();
	}
	
	//Declaration:
	//	TypeDeclaration
	//	| ChannelDeclaration
	//	| ConstantDeclaration
	//	| ParameterizedDeclaration
	//	| PropertyDeclaration;
	public DeclarationElements getDeclarationAccess() {
		return pDeclaration;
	}
	
	public ParserRule getDeclarationRule() {
		return getDeclarationAccess().getRule();
	}
	
	//ParameterizedDeclaration:
	//	ProcessDeclaration
	//	| ComponentDeclaration
	//	//added
	//	| FunctionDeclaration;
	public ParameterizedDeclarationElements getParameterizedDeclarationAccess() {
		return pParameterizedDeclaration;
	}
	
	public ParserRule getParameterizedDeclarationRule() {
		return getParameterizedDeclarationAccess().getRule();
	}
	
	//FunctionDeclaration:
	//	'function' name=ID ('(' (parameters+=ParametersDeclaration (',' parameters+=ParametersDeclaration)*)? ')')
	//	':' type=Type
	//	'is' ('var' variables+=VariablesDeclaration (',' variables+=VariablesDeclaration)*)?
	//	statement=Statement;
	public FunctionDeclarationElements getFunctionDeclarationAccess() {
		return pFunctionDeclaration;
	}
	
	public ParserRule getFunctionDeclarationRule() {
		return getFunctionDeclarationAccess().getRule();
	}
	
	//TypeDeclaration:
	//	'type' name=ID 'is' value=Type;
	public TypeDeclarationElements getTypeDeclarationAccess() {
		return pTypeDeclaration;
	}
	
	public ParserRule getTypeDeclarationRule() {
		return getTypeDeclarationAccess().getRule();
	}
	
	//ChannelDeclaration:
	//	'channel' name=ID 'is' value=ChannelType;
	public ChannelDeclarationElements getChannelDeclarationAccess() {
		return pChannelDeclaration;
	}
	
	public ParserRule getChannelDeclarationRule() {
		return getChannelDeclarationAccess().getRule();
	}
	
	//ChannelType:
	//	{ChannelType} ('array' size=Expression 'of')? ((in?='in' out?='out'? | out?='out')? (type=TupleType | 'none') | 'none'
	//	| 'sync');
	public ChannelTypeElements getChannelTypeAccess() {
		return pChannelType;
	}
	
	public ParserRule getChannelTypeRule() {
		return getChannelTypeAccess().getRule();
	}
	
	//Type:
	//	BasicType
	//	| RangeType
	//	| UnionType
	//	| RecordType
	//	| QueueType
	//	| ArrayType
	//	| ReferencedType
	//	//	| TupleType
	//;
	public TypeElements getTypeAccess() {
		return pType;
	}
	
	public ParserRule getTypeRule() {
		return getTypeAccess().getRule();
	}
	
	//TupleType Type:
	//	Type ({TupleType.types+=current} '#' types+=Type)*
	public TupleTypeElements getTupleTypeAccess() {
		return pTupleType;
	}
	
	public ParserRule getTupleTypeRule() {
		return getTupleTypeAccess().getRule();
	}
	
	//BasicType:
	//	{NaturalType} 'nat'
	//	| {IntegerType} 'int'
	//	| {BooleanType} 'bool';
	public BasicTypeElements getBasicTypeAccess() {
		return pBasicType;
	}
	
	public ParserRule getBasicTypeRule() {
		return getBasicTypeAccess().getRule();
	}
	
	//// changed
	//RangeType:
	//	minimum=Expression '..' maximum=Expression;
	public RangeTypeElements getRangeTypeAccess() {
		return pRangeType;
	}
	
	public ParserRule getRangeTypeRule() {
		return getRangeTypeAccess().getRule();
	}
	
	//UnionType:
	//	'union' tags+=UnionTags ('|' tags+=UnionTags)* 'end' 'union'?;
	public UnionTypeElements getUnionTypeAccess() {
		return pUnionType;
	}
	
	public ParserRule getUnionTypeRule() {
		return getUnionTypeAccess().getRule();
	}
	
	//UnionTags:
	//	tags+=UnionTagDeclaration (',' tags+=UnionTagDeclaration)* ('of' type=Type)?;
	public UnionTagsElements getUnionTagsAccess() {
		return pUnionTags;
	}
	
	public ParserRule getUnionTagsRule() {
		return getUnionTagsAccess().getRule();
	}
	
	//UnionTagDeclaration:
	//	name=ID;
	public UnionTagDeclarationElements getUnionTagDeclarationAccess() {
		return pUnionTagDeclaration;
	}
	
	public ParserRule getUnionTagDeclarationRule() {
		return getUnionTagDeclarationAccess().getRule();
	}
	
	//RecordType:
	//	'record' fields+=RecordFields (',' fields+=RecordFields)* 'end' 'record'?;
	public RecordTypeElements getRecordTypeAccess() {
		return pRecordType;
	}
	
	public ParserRule getRecordTypeRule() {
		return getRecordTypeAccess().getRule();
	}
	
	//RecordFields:
	//	fields+=RecordFieldDeclaration (',' fields+=RecordFieldDeclaration)* ':' type=Type;
	public RecordFieldsElements getRecordFieldsAccess() {
		return pRecordFields;
	}
	
	public ParserRule getRecordFieldsRule() {
		return getRecordFieldsAccess().getRule();
	}
	
	//RecordFieldDeclaration:
	//	name=ID;
	public RecordFieldDeclarationElements getRecordFieldDeclarationAccess() {
		return pRecordFieldDeclaration;
	}
	
	public ParserRule getRecordFieldDeclarationRule() {
		return getRecordFieldDeclarationAccess().getRule();
	}
	
	//QueueType:
	//	'queue' size=Expression 'of' type=Type;
	public QueueTypeElements getQueueTypeAccess() {
		return pQueueType;
	}
	
	public ParserRule getQueueTypeRule() {
		return getQueueTypeAccess().getRule();
	}
	
	//ArrayType:
	//	'array' size=Expression 'of' type=Type;
	public ArrayTypeElements getArrayTypeAccess() {
		return pArrayType;
	}
	
	public ParserRule getArrayTypeRule() {
		return getArrayTypeAccess().getRule();
	}
	
	//ReferencedType:
	//	type=[TypeDeclarationUse];
	public ReferencedTypeElements getReferencedTypeAccess() {
		return pReferencedType;
	}
	
	public ParserRule getReferencedTypeRule() {
		return getReferencedTypeAccess().getRule();
	}
	
	/// * ChannelDeclaration:
	//	'channel' name=ID 'is' channel=ChannelType
	//; * / ConstantDeclaration:
	//	'const' name=ID ':' type=Type 'is' value=Expression;
	public ConstantDeclarationElements getConstantDeclarationAccess() {
		return pConstantDeclaration;
	}
	
	public ParserRule getConstantDeclarationRule() {
		return getConstantDeclarationAccess().getRule();
	}
	
	//ProcessDeclaration:
	//	'process' name=ID ('[' ports+=PortsDeclaration (',' ports+=PortsDeclaration)* ']')? ('('
	//	parameters+=ParametersDeclaration (',' parameters+=ParametersDeclaration)* ')')?
	//	'is' ('port' localPorts+=PortsDeclaration (',' localPorts+=PortsDeclaration)*)? ('priority'
	//	priorities+=PriorityDeclaration (',' priorities+=PriorityDeclaration)*)?
	//	'states' states+=StateDeclaration (',' states+=StateDeclaration)* ('var' variables+=VariablesDeclaration (','
	//	variables+=VariablesDeclaration)*)? ('init' prelude=StatementSequence)?
	//	transitions+=Transition+;
	public ProcessDeclarationElements getProcessDeclarationAccess() {
		return pProcessDeclaration;
	}
	
	public ParserRule getProcessDeclarationRule() {
		return getProcessDeclarationAccess().getRule();
	}
	
	////GenericDeclaration:
	//// 	('type' GenericTypeDeclaration)
	////	| ('const' GenericConstantDeclaration)
	////	| (('constr0' | 'constr1') GenericUnionTagDeclaration)
	////	| ('field' GenericRecordFieldDeclaration)
	////;
	////
	////GenericTypeDeclaration:
	////	name=ID
	////;
	////
	////GenericConstantDeclaration:
	////	name=ID
	////;
	////
	////GenericUnionTagDeclaration:
	////	name=ID
	////;
	////
	////GenericRecordFieldDeclaration:
	////	name=ID
	////;
	//StateDeclaration:
	//	name=ID;
	public StateDeclarationElements getStateDeclarationAccess() {
		return pStateDeclaration;
	}
	
	public ParserRule getStateDeclarationRule() {
		return getStateDeclarationAccess().getRule();
	}
	
	//TransitionSource:
	//	'from' origin=[StateDeclaration];
	public TransitionSourceElements getTransitionSourceAccess() {
		return pTransitionSource;
	}
	
	public ParserRule getTransitionSourceRule() {
		return getTransitionSourceAccess().getRule();
	}
	
	//Transition:
	//	source=TransitionSource action=StatementSequence;
	public TransitionElements getTransitionAccess() {
		return pTransition;
	}
	
	public ParserRule getTransitionRule() {
		return getTransitionAccess().getRule();
	}
	
	//ComponentDeclaration:
	//	'component' name=ID ('[' ports+=PortsDeclaration (',' ports+=PortsDeclaration)* ']')? ('('
	//	parameters+=ParametersDeclaration (',' parameters+=ParametersDeclaration)* ')')?
	//	'is' ('var' variables+=VariablesDeclaration (',' variables+=VariablesDeclaration)*)? ('port'
	//	localPorts+=LocalPortsDeclaration (',' localPorts+=LocalPortsDeclaration)*)? ('priority'
	//	priorities+=PriorityDeclaration (',' priorities+=PriorityDeclaration)*)? ('init' prelude=StatementSequence)?
	//	body=Composition;
	public ComponentDeclarationElements getComponentDeclarationAccess() {
		return pComponentDeclaration;
	}
	
	public ParserRule getComponentDeclarationRule() {
		return getComponentDeclarationAccess().getRule();
	}
	
	//PortsDeclaration:
	//	ports+=PortDeclaration (',' ports+=PortDeclaration)* ':' type=ChannelType;
	public PortsDeclarationElements getPortsDeclarationAccess() {
		return pPortsDeclaration;
	}
	
	public ParserRule getPortsDeclarationRule() {
		return getPortsDeclarationAccess().getRule();
	}
	
	//PortDeclaration:
	//	name=ID;
	public PortDeclarationElements getPortDeclarationAccess() {
		return pPortDeclaration;
	}
	
	public ParserRule getPortDeclarationRule() {
		return getPortDeclarationAccess().getRule();
	}
	
	//LocalPortsDeclaration:
	//	ports+=PortDeclaration (',' ports+=PortDeclaration)* ':' type=ChannelType ('in' left=LowerBound ','
	//	right=UpperBound)?;
	public LocalPortsDeclarationElements getLocalPortsDeclarationAccess() {
		return pLocalPortsDeclaration;
	}
	
	public ParserRule getLocalPortsDeclarationRule() {
		return getLocalPortsDeclarationAccess().getRule();
	}
	
	//ParametersDeclaration:
	//	parameters+=ParameterDeclaration (',' parameters+=ParameterDeclaration)* ':' read?='read'? write?='write'? type=Type;
	public ParametersDeclarationElements getParametersDeclarationAccess() {
		return pParametersDeclaration;
	}
	
	public ParserRule getParametersDeclarationRule() {
		return getParametersDeclarationAccess().getRule();
	}
	
	//ParameterDeclaration:
	//	(reference?='&' (array?='[' size=Expression ']')?)? name=ID;
	public ParameterDeclarationElements getParameterDeclarationAccess() {
		return pParameterDeclaration;
	}
	
	public ParserRule getParameterDeclarationRule() {
		return getParameterDeclarationAccess().getRule();
	}
	
	//VariablesDeclaration:
	//	variables+=VariableDeclaration (',' variables+=VariableDeclaration)* ':' type=Type (':=' value=Expression)?;
	public VariablesDeclarationElements getVariablesDeclarationAccess() {
		return pVariablesDeclaration;
	}
	
	public ParserRule getVariablesDeclarationRule() {
		return getVariablesDeclarationAccess().getRule();
	}
	
	//VariableDeclaration:
	//	name=ID;
	public VariableDeclarationElements getVariableDeclarationAccess() {
		return pVariableDeclaration;
	}
	
	public ParserRule getVariableDeclarationRule() {
		return getVariableDeclarationAccess().getRule();
	}
	
	//PriorityDeclaration:
	//	groups+=PriorityGroup ('>' groups+=PriorityGroup)+;
	public PriorityDeclarationElements getPriorityDeclarationAccess() {
		return pPriorityDeclaration;
	}
	
	public ParserRule getPriorityDeclarationRule() {
		return getPriorityDeclarationAccess().getRule();
	}
	
	//PriorityGroup:
	//	ports+=[PortDeclaration] ('|' ports+=[PortDeclaration])*;
	public PriorityGroupElements getPriorityGroupAccess() {
		return pPriorityGroup;
	}
	
	public ParserRule getPriorityGroupRule() {
		return getPriorityGroupAccess().getRule();
	}
	
	//UnlessStatement Statement:
	//	StatementChoice ({UnlessStatement.followers+=current} 'unless' followers+=StatementChoice)*
	public UnlessStatementElements getUnlessStatementAccess() {
		return pUnlessStatement;
	}
	
	public ParserRule getUnlessStatementRule() {
		return getUnlessStatementAccess().getRule();
	}
	
	//StatementChoice Statement:
	//	StatementSequence ({StatementChoice.choices+=current} '[]' choices+=StatementSequence)*
	public StatementChoiceElements getStatementChoiceAccess() {
		return pStatementChoice;
	}
	
	public ParserRule getStatementChoiceRule() {
		return getStatementChoiceAccess().getRule();
	}
	
	//StatementSequence Statement:
	//	Statement ({StatementSequence.statements+=current} ';' statements+=Statement)*
	public StatementSequenceElements getStatementSequenceAccess() {
		return pStatementSequence;
	}
	
	public ParserRule getStatementSequenceRule() {
		return getStatementSequenceAccess().getRule();
	}
	
	//Statement:
	//	NullStatement
	//	| TaggedStatement
	//	| PatternStatement
	//	| ConditionalStatement
	//	| SelectStatement
	//	| WhileStatement
	//	| ForeachStatement
	//	| ToStatement
	//	| CaseStatement
	//	| LoopStatement
	//	| OnStatement
	//	| WaitStatement
	//	| ReturnStatement
	//	| BlockStatement;
	public StatementElements getStatementAccess() {
		return pStatement;
	}
	
	public ParserRule getStatementRule() {
		return getStatementAccess().getRule();
	}
	
	//BlockStatement:
	//	'begin' body=StatementSequence 'end';
	public BlockStatementElements getBlockStatementAccess() {
		return pBlockStatement;
	}
	
	public ParserRule getBlockStatementRule() {
		return getBlockStatementAccess().getRule();
	}
	
	//ReturnStatement:
	//	'return' expression=Expression;
	public ReturnStatementElements getReturnStatementAccess() {
		return pReturnStatement;
	}
	
	public ParserRule getReturnStatementRule() {
		return getReturnStatementAccess().getRule();
	}
	
	//NullStatement:
	//	{NullStatement} 'null';
	public NullStatementElements getNullStatementAccess() {
		return pNullStatement;
	}
	
	public ParserRule getNullStatementRule() {
		return getNullStatementAccess().getRule();
	}
	
	//TaggedStatement:
	//	'#' name=ID //tag=TagDeclaration
	//;
	public TaggedStatementElements getTaggedStatementAccess() {
		return pTaggedStatement;
	}
	
	public ParserRule getTaggedStatementRule() {
		return getTaggedStatementAccess().getRule();
	}
	
	////TagDeclaration:
	////	name=ID
	////;
	//PatternStatement:
	//	Pattern (',' {AssignStatement.patterns+=current} patterns+=Pattern (',' patterns+=Pattern)* ':=' values+=Expression
	//	(',' values+=Expression)* | ':=' {AssignStatement.patterns+=current} (values+=Expression (',' values+=Expression)*) |
	//	',' {AssignAnyStatement.patterns+=current} patterns+=Pattern (',' patterns+=Pattern)* ':=' 'any' ('where'
	//	exp=Expression)? | ':=' {AssignAnyStatement.patterns+=current} 'any' ('where' exp=Expression)? | '!'
	//	{SendStatement.port=current} values+=Expression (',' values+=Expression)* | '?' {ReceiveStatement.port=current}
	//	patterns+=Pattern (',' patterns+=Pattern)* ('where' exp=Expression)?)?;
	public PatternStatementElements getPatternStatementAccess() {
		return pPatternStatement;
	}
	
	public ParserRule getPatternStatementRule() {
		return getPatternStatementAccess().getRule();
	}
	
	//Pattern:
	//	AnyPattern
	//	| IntegerPattern
	//	| ConstantPattern
	//	| '(' Pattern ')'
	//	| IdentifierPattern;
	public PatternElements getPatternAccess() {
		return pPattern;
	}
	
	public ParserRule getPatternRule() {
		return getPatternAccess().getRule();
	}
	
	//AnyPattern:
	//	{AnyPattern} 'any';
	public AnyPatternElements getAnyPatternAccess() {
		return pAnyPattern;
	}
	
	public ParserRule getAnyPatternRule() {
		return getAnyPatternAccess().getRule();
	}
	
	//ConstantPattern:
	//	value=LiteralExpression;
	public ConstantPatternElements getConstantPatternAccess() {
		return pConstantPattern;
	}
	
	public ParserRule getConstantPatternRule() {
		return getConstantPatternAccess().getRule();
	}
	
	//IntegerPattern:
	//	('+' | negative?='-') value=INT;
	public IntegerPatternElements getIntegerPatternAccess() {
		return pIntegerPattern;
	}
	
	public ParserRule getIntegerPatternRule() {
		return getIntegerPatternAccess().getRule();
	}
	
	//IdentifierPattern:
	//	{ConstructorPattern} declaration=[PatternDeclarationUse] '(' (parameters+=Pattern (',' parameters+=Pattern)*)? ')' |
	//	declaration=[PatternDeclarationUse] ('[' {ArrayAccessPattern.source=current} index=Expression ']' | '.'
	//	{RecordAccessPattern.source=current} field=[RecordFieldDeclaration])*;
	public IdentifierPatternElements getIdentifierPatternAccess() {
		return pIdentifierPattern;
	}
	
	public ParserRule getIdentifierPatternRule() {
		return getIdentifierPatternAccess().getRule();
	}
	
	//ConditionalStatement:
	//	'if' condition=Expression
	//	'then' then=StatementSequence elseif+=ExtendedConditionalStatement* ('else' else=StatementSequence)? 'end' 'if'?;
	public ConditionalStatementElements getConditionalStatementAccess() {
		return pConditionalStatement;
	}
	
	public ParserRule getConditionalStatementRule() {
		return getConditionalStatementAccess().getRule();
	}
	
	//ExtendedConditionalStatement:
	//	'elsif' condition=Expression 'then' then=StatementSequence;
	public ExtendedConditionalStatementElements getExtendedConditionalStatementAccess() {
		return pExtendedConditionalStatement;
	}
	
	public ParserRule getExtendedConditionalStatementRule() {
		return getExtendedConditionalStatementAccess().getRule();
	}
	
	//SelectStatement:
	//	'select'
	//	body=UnlessStatement ('|' index=VariableDeclaration 'in' type=RangeType)?
	//	'end' 'select'?;
	public SelectStatementElements getSelectStatementAccess() {
		return pSelectStatement;
	}
	
	public ParserRule getSelectStatementRule() {
		return getSelectStatementAccess().getRule();
	}
	
	//WhileStatement:
	//	'while' condition=Expression 'do' body=StatementSequence 'end' 'while'?;
	public WhileStatementElements getWhileStatementAccess() {
		return pWhileStatement;
	}
	
	public ParserRule getWhileStatementRule() {
		return getWhileStatementAccess().getRule();
	}
	
	//ForeachStatement:
	//	'foreach' variable=VariableDeclaration 'do' body=StatementSequence 'end' 'foreach'?;
	public ForeachStatementElements getForeachStatementAccess() {
		return pForeachStatement;
	}
	
	public ParserRule getForeachStatementRule() {
		return getForeachStatementAccess().getRule();
	}
	
	//ToStatement:
	//	'to' state=[StateDeclaration];
	public ToStatementElements getToStatementAccess() {
		return pToStatement;
	}
	
	public ParserRule getToStatementRule() {
		return getToStatementAccess().getRule();
	}
	
	//CaseStatement:
	//	'case' value=Expression 'of'
	//	pattern+=Pattern '->' body+=StatementSequence ('|' pattern+=Pattern '->' body+=StatementSequence)*
	//	'end' 'case'?;
	public CaseStatementElements getCaseStatementAccess() {
		return pCaseStatement;
	}
	
	public ParserRule getCaseStatementRule() {
		return getCaseStatementAccess().getRule();
	}
	
	//LoopStatement:
	//	{LoopStatement} 'loop';
	public LoopStatementElements getLoopStatementAccess() {
		return pLoopStatement;
	}
	
	public ParserRule getLoopStatementRule() {
		return getLoopStatementAccess().getRule();
	}
	
	//OnStatement:
	//	'on' condition=Expression;
	public OnStatementElements getOnStatementAccess() {
		return pOnStatement;
	}
	
	public ParserRule getOnStatementRule() {
		return getOnStatementAccess().getRule();
	}
	
	//WaitStatement:
	//	'wait' left=LowerBound ',' right=UpperBound;
	public WaitStatementElements getWaitStatementAccess() {
		return pWaitStatement;
	}
	
	public ParserRule getWaitStatementRule() {
		return getWaitStatementAccess().getRule();
	}
	
	//Composition: // added ?
	//	'par' (global=PortSet 'in')? blocks+=Block ('||' blocks+=Block)* //('|' index=VariableDeclaration 'in' type=RangeType)?
	//	'end' 'par'?;
	public CompositionElements getCompositionAccess() {
		return pComposition;
	}
	
	public ParserRule getCompositionRule() {
		return getCompositionAccess().getRule();
	}
	
	//Block:
	//	CompositeBlock | InstanceDeclaration;
	public BlockElements getBlockAccess() {
		return pBlock;
	}
	
	public ParserRule getBlockRule() {
		return getBlockAccess().getRule();
	}
	
	//CompositeBlock:
	//	(local=PortSet '->' | '->')? composition=Composition;
	public CompositeBlockElements getCompositeBlockAccess() {
		return pCompositeBlock;
	}
	
	public ParserRule getCompositeBlockRule() {
		return getCompositeBlockAccess().getRule();
	}
	
	//InstanceDeclaration:
	//	(local=PortSet '->' | '->')? instance=ComponentInstance;
	public InstanceDeclarationElements getInstanceDeclarationAccess() {
		return pInstanceDeclaration;
	}
	
	public ParserRule getInstanceDeclarationRule() {
		return getInstanceDeclarationAccess().getRule();
	}
	
	//PortSet:
	//	allPorts?='*'
	//	| ports+=Expression (',' ports+=Expression)*;
	public PortSetElements getPortSetAccess() {
		return pPortSet;
	}
	
	public ParserRule getPortSetRule() {
		return getPortSetAccess().getRule();
	}
	
	//ComponentInstance:
	//	component=[ParameterizedDeclaration] ('[' ports+=Expression (',' ports+=Expression)* ']')? ('(' parameters+=Expression
	//	(',' parameters+=Expression)* ')')?;
	public ComponentInstanceElements getComponentInstanceAccess() {
		return pComponentInstance;
	}
	
	public ParserRule getComponentInstanceRule() {
		return getComponentInstanceAccess().getRule();
	}
	
	////GenericInstance:
	////	TypeInstance
	////	| ConstantInstance
	////	| UnionTagInstance
	////	| RecordFieldInstance
	////;
	////
	////TypeInstance:
	////	'type' type=Type
	////;
	////
	////ConstantInstance:
	////	'const' (const=[ConstantDeclarationUse] | value=LiteralExpression)
	////;
	////
	////UnionTagInstance:
	////	(constr0?='constr0' | constr1?='constr1') head=[UnionTagDeclarationUse]
	////;
	////
	////RecordFieldInstance:
	////	'field' field=[RecordFieldDeclarationUse]
	////;
	//Expression:
	//	QuantifiedExpression;
	public ExpressionElements getExpressionAccess() {
		return pExpression;
	}
	
	public ParserRule getExpressionRule() {
		return getExpressionAccess().getRule();
	}
	
	//QuantifiedExpression Expression:
	//	({AllExpression} 'all' | {ExistsExpression} 'exists') index=VariableDeclaration ('in' type=RangeType)? '.'
	//	child=QuantifiedExpression
	//	| Conditional
	public QuantifiedExpressionElements getQuantifiedExpressionAccess() {
		return pQuantifiedExpression;
	}
	
	public ParserRule getQuantifiedExpressionRule() {
		return getQuantifiedExpressionAccess().getRule();
	}
	
	//Conditional Expression:
	//	Disjunction ('?' {Conditional.condition=current} then=Disjunction ':' else=Disjunction)?
	public ConditionalElements getConditionalAccess() {
		return pConditional;
	}
	
	public ParserRule getConditionalRule() {
		return getConditionalAccess().getRule();
	}
	
	//Disjunction Expression:
	//	Implication ({Disjunction.left=current} 'or' right=Implication)*
	public DisjunctionElements getDisjunctionAccess() {
		return pDisjunction;
	}
	
	public ParserRule getDisjunctionRule() {
		return getDisjunctionAccess().getRule();
	}
	
	//Implication Expression:
	//	Conjunction ({Implication.left=current} '=>' right=Implication)?
	public ImplicationElements getImplicationAccess() {
		return pImplication;
	}
	
	public ParserRule getImplicationRule() {
		return getImplicationAccess().getRule();
	}
	
	//Conjunction Expression:
	//	Comparison ({Conjunction.left=current} 'and' right=Comparison)*
	public ConjunctionElements getConjunctionAccess() {
		return pConjunction;
	}
	
	public ParserRule getConjunctionRule() {
		return getConjunctionAccess().getRule();
	}
	
	//Comparison Expression:
	//	Addition (({ComparisonEqual.left=current} '='
	//	| {ComparisonNotEqual.left=current} '<>'
	//	| {ComparisonLesser.left=current} '<'
	//	| {ComparisonLesserEqual.left=current} '<='
	//	| {ComparisonGreater.left=current} '>'
	//	| {ComparisonGreaterEqual.left=current} '>=') right=Addition)?
	public ComparisonElements getComparisonAccess() {
		return pComparison;
	}
	
	public ParserRule getComparisonRule() {
		return getComparisonAccess().getRule();
	}
	
	//Addition Expression:
	//	Substraction ({Addition.left=current} '+' right=Substraction)*
	public AdditionElements getAdditionAccess() {
		return pAddition;
	}
	
	public ParserRule getAdditionRule() {
		return getAdditionAccess().getRule();
	}
	
	//Substraction Expression:
	//	Multiplication ({Substraction.left=current} '-' right=Multiplication)*
	public SubstractionElements getSubstractionAccess() {
		return pSubstraction;
	}
	
	public ParserRule getSubstractionRule() {
		return getSubstractionAccess().getRule();
	}
	
	//Multiplication Expression:
	//	Division ({Multiplication.left=current} '*' right=Division)*
	public MultiplicationElements getMultiplicationAccess() {
		return pMultiplication;
	}
	
	public ParserRule getMultiplicationRule() {
		return getMultiplicationAccess().getRule();
	}
	
	//Division Expression:
	//	Modulo ({Division.left=current} '/' right=Modulo)*
	public DivisionElements getDivisionAccess() {
		return pDivision;
	}
	
	public ParserRule getDivisionRule() {
		return getDivisionAccess().getRule();
	}
	
	//Modulo Expression:
	//	UnaryExpression ({Modulo.left=current} '%' right=UnaryExpression)*
	public ModuloElements getModuloAccess() {
		return pModulo;
	}
	
	public ParserRule getModuloRule() {
		return getModuloAccess().getRule();
	}
	
	//UnaryExpression Expression:
	//	({UnaryPlusExpression} '+'
	//	| {UnaryMinusExpression} '-'
	//	| {UnaryNegationExpression} 'not'
	//	| {UnaryFirstExpression} 'first'
	//	| {UnaryLengthExpression} 'length'
	//	| {UnaryCoerceExpression} '$'
	//	| {UnaryFullExpression} 'full'
	//	| {UnaryDeQueueExpression} 'dequeue'
	//	| {UnaryEmptyExpression} 'empty') child=UnaryExpression | Projection
	public UnaryExpressionElements getUnaryExpressionAccess() {
		return pUnaryExpression;
	}
	
	public ParserRule getUnaryExpressionRule() {
		return getUnaryExpressionAccess().getRule();
	}
	
	//Projection Expression:
	//	AtomicExpression ({Projection.channel=current} '^'
	//	field=AtomicExpression)?
	public ProjectionElements getProjectionAccess() {
		return pProjection;
	}
	
	public ParserRule getProjectionRule() {
		return getProjectionAccess().getRule();
	}
	
	//// Added to manage the type of current value of a fiacre value during execution		
	//ValueExpression:
	//	IdentifierExpression
	//	| LiteralExpression
	//	| RecordExpression
	//	| ArrayExpression
	//	| QueueExpression;
	public ValueExpressionElements getValueExpressionAccess() {
		return pValueExpression;
	}
	
	public ParserRule getValueExpressionRule() {
		return getValueExpressionAccess().getRule();
	}
	
	//AtomicExpression Expression:
	//	IdentifierExpression
	//	| ReferenceExpression
	//	| LiteralExpression
	//	| RecordExpression
	//	| ArrayExpression
	//	| QueueExpression
	//	| EnqueueExpression
	//	| AppendExpression
	//	| '(' Expression ')'
	public AtomicExpressionElements getAtomicExpressionAccess() {
		return pAtomicExpression;
	}
	
	public ParserRule getAtomicExpressionRule() {
		return getAtomicExpressionAccess().getRule();
	}
	
	//ReferenceExpression:
	//	'&' declaration=[ReferenceDeclarationUse];
	public ReferenceExpressionElements getReferenceExpressionAccess() {
		return pReferenceExpression;
	}
	
	public ParserRule getReferenceExpressionRule() {
		return getReferenceExpressionAccess().getRule();
	}
	
	//IdentifierExpression:
	//	{ConstructionExpression} declaration=[ExpressionDeclarationUse] '(' (parameters+=Expression (','
	//	parameters+=Expression)*)? ')' | declaration=[ExpressionDeclarationUse] ('[' {ArrayAccessExpression.child=current}
	//	indexes+=Expression (',' indexes+=Expression)* ']' | '.' {RecordAccessExpression.child=current}
	//	field=[RecordFieldDeclaration])*;
	public IdentifierExpressionElements getIdentifierExpressionAccess() {
		return pIdentifierExpression;
	}
	
	public ParserRule getIdentifierExpressionRule() {
		return getIdentifierExpressionAccess().getRule();
	}
	
	//RecordExpression:
	//	'{' fields+=FieldExpression (',' fields+=FieldExpression)* '}';
	public RecordExpressionElements getRecordExpressionAccess() {
		return pRecordExpression;
	}
	
	public ParserRule getRecordExpressionRule() {
		return getRecordExpressionAccess().getRule();
	}
	
	//FieldExpression:
	//	field=[RecordFieldDeclarationUse] '=' value=Expression // TODO : Inconsistent
	//;
	public FieldExpressionElements getFieldExpressionAccess() {
		return pFieldExpression;
	}
	
	public ParserRule getFieldExpressionRule() {
		return getFieldExpressionAccess().getRule();
	}
	
	////ArrayExpression returns Expression :
	////	'[' Expression 
	////		(
	////			{ExplicitArrayExpression.values+=current} (',' values+=Expression)*
	////		|
	////			({ImplicitArrayExpression.body+=current} '|' index=VariableDeclaration 'in' type=RangeType)
	////		)
	////	 ']'
	////;
	//ArrayExpression:
	//	{ArrayExpression} '[' (values+=Expression (',' values+=Expression)*)? ']';
	public ArrayExpressionElements getArrayExpressionAccess() {
		return pArrayExpression;
	}
	
	public ParserRule getArrayExpressionRule() {
		return getArrayExpressionAccess().getRule();
	}
	
	//QueueExpression:
	//	{QueueExpression} '{|' (values+=Expression (',' values+=Expression)*)? '|}';
	public QueueExpressionElements getQueueExpressionAccess() {
		return pQueueExpression;
	}
	
	public ParserRule getQueueExpressionRule() {
		return getQueueExpressionAccess().getRule();
	}
	
	//EnqueueExpression:
	//	'enqueue' '(' element=Expression ',' queue=Expression ')';
	public EnqueueExpressionElements getEnqueueExpressionAccess() {
		return pEnqueueExpression;
	}
	
	public ParserRule getEnqueueExpressionRule() {
		return getEnqueueExpressionAccess().getRule();
	}
	
	//AppendExpression:
	//	'append' '(' left=Expression ',' right=Expression ')';
	public AppendExpressionElements getAppendExpressionAccess() {
		return pAppendExpression;
	}
	
	public ParserRule getAppendExpressionRule() {
		return getAppendExpressionAccess().getRule();
	}
	
	//LiteralExpression:
	//	BooleanLiteral
	//	| NaturalLiteral;
	public LiteralExpressionElements getLiteralExpressionAccess() {
		return pLiteralExpression;
	}
	
	public ParserRule getLiteralExpressionRule() {
		return getLiteralExpressionAccess().getRule();
	}
	
	//BooleanLiteral:
	//	{TrueLiteral} 'true' | {FalseLiteral} 'false';
	public BooleanLiteralElements getBooleanLiteralAccess() {
		return pBooleanLiteral;
	}
	
	public ParserRule getBooleanLiteralRule() {
		return getBooleanLiteralAccess().getRule();
	}
	
	//NaturalLiteral:
	//	value=INT;
	public NaturalLiteralElements getNaturalLiteralAccess() {
		return pNaturalLiteral;
	}
	
	public ParserRule getNaturalLiteralRule() {
		return getNaturalLiteralAccess().getRule();
	}
	
	//LowerBound:
	//	NaturalLowerBound
	//	| DecimalLowerBound
	//	| VariableLowerBound;
	public LowerBoundElements getLowerBoundAccess() {
		return pLowerBound;
	}
	
	public ParserRule getLowerBoundRule() {
		return getLowerBoundAccess().getRule();
	}
	
	//UpperBound:
	//	NaturalUpperBound
	//	| DecimalUpperBound
	//	| VariableUpperBound
	//	| InfiniteUpperBound;
	public UpperBoundElements getUpperBoundAccess() {
		return pUpperBound;
	}
	
	public ParserRule getUpperBoundRule() {
		return getUpperBoundAccess().getRule();
	}
	
	//NaturalLowerBound:
	//	(left?='[' | right?=']') value=INT;
	public NaturalLowerBoundElements getNaturalLowerBoundAccess() {
		return pNaturalLowerBound;
	}
	
	public ParserRule getNaturalLowerBoundRule() {
		return getNaturalLowerBoundAccess().getRule();
	}
	
	//NaturalUpperBound:
	//	value=INT (left?='[' | right?=']');
	public NaturalUpperBoundElements getNaturalUpperBoundAccess() {
		return pNaturalUpperBound;
	}
	
	public ParserRule getNaturalUpperBoundRule() {
		return getNaturalUpperBoundAccess().getRule();
	}
	
	//DecimalLowerBound:
	//	(left?='[' | right?=']') value=FLT;
	public DecimalLowerBoundElements getDecimalLowerBoundAccess() {
		return pDecimalLowerBound;
	}
	
	public ParserRule getDecimalLowerBoundRule() {
		return getDecimalLowerBoundAccess().getRule();
	}
	
	//DecimalUpperBound:
	//	value=FLT (left?='[' | right?=']');
	public DecimalUpperBoundElements getDecimalUpperBoundAccess() {
		return pDecimalUpperBound;
	}
	
	public ParserRule getDecimalUpperBoundRule() {
		return getDecimalUpperBoundAccess().getRule();
	}
	
	//VariableLowerBound:
	//	(left?='[' | right?=']') variable=[BoundDeclarationUse];
	public VariableLowerBoundElements getVariableLowerBoundAccess() {
		return pVariableLowerBound;
	}
	
	public ParserRule getVariableLowerBoundRule() {
		return getVariableLowerBoundAccess().getRule();
	}
	
	//VariableUpperBound:
	//	variable=[BoundDeclarationUse] (left?='[' | right?=']');
	public VariableUpperBoundElements getVariableUpperBoundAccess() {
		return pVariableUpperBound;
	}
	
	public ParserRule getVariableUpperBoundRule() {
		return getVariableUpperBoundAccess().getRule();
	}
	
	//InfiniteUpperBound:
	//	{InfiniteUpperBound} '...' '[';
	public InfiniteUpperBoundElements getInfiniteUpperBoundAccess() {
		return pInfiniteUpperBound;
	}
	
	public ParserRule getInfiniteUpperBoundRule() {
		return getInfiniteUpperBoundAccess().getRule();
	}
	
	//Requirement:
	//	'assert' property=[PropertyDeclaration] ('-true' positive=STRING)? ('-false' negative=STRING)?;
	public RequirementElements getRequirementAccess() {
		return pRequirement;
	}
	
	public ParserRule getRequirementRule() {
		return getRequirementAccess().getRule();
	}
	
	//PropertyDeclaration:
	//	'property' name=ID 'is' property=Property;
	public PropertyDeclarationElements getPropertyDeclarationAccess() {
		return pPropertyDeclaration;
	}
	
	public ParserRule getPropertyDeclarationRule() {
		return getPropertyDeclarationAccess().getRule();
	}
	
	//Property:
	//	QuantifiedProperty;
	public PropertyElements getPropertyAccess() {
		return pProperty;
	}
	
	public ParserRule getPropertyRule() {
		return getPropertyAccess().getRule();
	}
	
	//QuantifiedProperty Property:
	//	({AllProperty} 'all' | {ExistsProperty} 'exists') variable=VariableDeclaration
	//	'in' type=RangeType '.' child=QuantifiedProperty | PropertyDisjunction
	public QuantifiedPropertyElements getQuantifiedPropertyAccess() {
		return pQuantifiedProperty;
	}
	
	public ParserRule getQuantifiedPropertyRule() {
		return getQuantifiedPropertyAccess().getRule();
	}
	
	//PropertyDisjunction Property:
	//	PropertyImplication ({PropertyDisjunction.left=current} 'or' right=PropertyImplication)*
	public PropertyDisjunctionElements getPropertyDisjunctionAccess() {
		return pPropertyDisjunction;
	}
	
	public ParserRule getPropertyDisjunctionRule() {
		return getPropertyDisjunctionAccess().getRule();
	}
	
	//PropertyImplication Property:
	//	PropertyConjunction ({PropertyImplication.left=current} '=>' right=PropertyImplication)?
	public PropertyImplicationElements getPropertyImplicationAccess() {
		return pPropertyImplication;
	}
	
	public ParserRule getPropertyImplicationRule() {
		return getPropertyImplicationAccess().getRule();
	}
	
	//PropertyConjunction Property:
	//	PropertyNegation ({PropertyConjunction.left=current} 'and' right=PropertyNegation)*
	public PropertyConjunctionElements getPropertyConjunctionAccess() {
		return pPropertyConjunction;
	}
	
	public ParserRule getPropertyConjunctionRule() {
		return getPropertyConjunctionAccess().getRule();
	}
	
	//PropertyNegation Property:
	//	{PropertyNegation} 'not' child=PropertyNegation | AtomicProperty
	public PropertyNegationElements getPropertyNegationAccess() {
		return pPropertyNegation;
	}
	
	public ParserRule getPropertyNegationRule() {
		return getPropertyNegationAccess().getRule();
	}
	
	//AtomicProperty Property:
	//	PatternProperty | '(' Property ')'
	public AtomicPropertyElements getAtomicPropertyAccess() {
		return pAtomicProperty;
	}
	
	public ParserRule getAtomicPropertyRule() {
		return getAtomicPropertyAccess().getRule();
	}
	
	//PatternProperty:
	//	LTLPattern | DeadlockFreePattern | InfinitelyOftenPattern | MortalPattern | PresencePattern | AbsencePattern |
	//	AlwaysPattern | SequencePattern;
	public PatternPropertyElements getPatternPropertyAccess() {
		return pPatternProperty;
	}
	
	public ParserRule getPatternPropertyRule() {
		return getPatternPropertyAccess().getRule();
	}
	
	//LTLPattern:
	//	'ltl' property=LTLUnary;
	public LTLPatternElements getLTLPatternAccess() {
		return pLTLPattern;
	}
	
	public ParserRule getLTLPatternRule() {
		return getLTLPatternAccess().getRule();
	}
	
	//DeadlockFreePattern:
	//	{DeadlockFreePattern} 'deadlockfree';
	public DeadlockFreePatternElements getDeadlockFreePatternAccess() {
		return pDeadlockFreePattern;
	}
	
	public ParserRule getDeadlockFreePatternRule() {
		return getDeadlockFreePatternAccess().getRule();
	}
	
	//InfinitelyOftenPattern:
	//	'infinitelyoften' subject=AtomicObservable;
	public InfinitelyOftenPatternElements getInfinitelyOftenPatternAccess() {
		return pInfinitelyOftenPattern;
	}
	
	public ParserRule getInfinitelyOftenPatternRule() {
		return getInfinitelyOftenPatternAccess().getRule();
	}
	
	//MortalPattern:
	//	'mortal' subject=AtomicObservable;
	public MortalPatternElements getMortalPatternAccess() {
		return pMortalPattern;
	}
	
	public ParserRule getMortalPatternRule() {
		return getMortalPatternAccess().getRule();
	}
	
	//PresencePattern:
	//	'present' subject=AtomicObservable ('lasting' lasting=INT | ('after' after=AtomicObservable) ('within'
	//	lower=LowerBound ',' upper=UpperBound | 'until' until=AtomicObservable)?
	//	| ('before' before=AtomicObservable) ('within' lower=LowerBound ',' upper=UpperBound)?
	//	| 'between' min=AtomicObservable 'and' max=AtomicObservable)?;
	public PresencePatternElements getPresencePatternAccess() {
		return pPresencePattern;
	}
	
	public ParserRule getPresencePatternRule() {
		return getPresencePatternAccess().getRule();
	}
	
	//AbsencePattern:
	//	'absent' subject=AtomicObservable (('after' after=AtomicObservable) ('within' lower=LowerBound ',' upper=UpperBound |
	//	'until' until=AtomicObservable)?
	//	| ('before' before=AtomicObservable) ('for' lower=LowerBound ',' upper=UpperBound)?
	//	| 'between' min=AtomicObservable 'and' max=AtomicObservable)?;
	public AbsencePatternElements getAbsencePatternAccess() {
		return pAbsencePattern;
	}
	
	public ParserRule getAbsencePatternRule() {
		return getAbsencePatternAccess().getRule();
	}
	
	//AlwaysPattern:
	//	'always' subject=AtomicObservable ('before' before=AtomicObservable | 'after' after=AtomicObservable ('until'
	//	until=AtomicObservable)? | 'between' min=AtomicObservable 'and' max=AtomicObservable)?;
	public AlwaysPatternElements getAlwaysPatternAccess() {
		return pAlwaysPattern;
	}
	
	public ParserRule getAlwaysPatternRule() {
		return getAlwaysPatternAccess().getRule();
	}
	
	//SequencePattern:
	//	AtomicObservable ('leadsto' {LeadsToPattern.subject=current} follower=AtomicObservable ('before'
	//	before=AtomicObservable ('within' lower=LowerBound ',' upper=UpperBound)? | 'within' lower=LowerBound ','
	//	upper=UpperBound | 'after' after=AtomicObservable ('within' lower=LowerBound ',' upper=UpperBound | 'until'
	//	until=AtomicObservable)?
	//	| 'between' min=AtomicObservable 'and' max=AtomicObservable)?
	//	| 'precedes' {PrecedesPattern.subject=current} follower=AtomicObservable ('before' before=AtomicObservable | 'after'
	//	after=AtomicObservable ('until' until=AtomicObservable)? | 'between' min=AtomicObservable 'and'
	//	max=AtomicObservable)?);
	public SequencePatternElements getSequencePatternAccess() {
		return pSequencePattern;
	}
	
	public ParserRule getSequencePatternRule() {
		return getSequencePatternAccess().getRule();
	}
	
	//LTLProperty:
	//	LTLQuantified;
	public LTLPropertyElements getLTLPropertyAccess() {
		return pLTLProperty;
	}
	
	public ParserRule getLTLPropertyRule() {
		return getLTLPropertyAccess().getRule();
	}
	
	//LTLQuantified LTLProperty:
	//	({LTLAll} 'all' | {LTLExists} 'exists') index=VariableDeclaration
	//	'in' type=RangeType '.' child=LTLQuantified | LTLDisjunction
	public LTLQuantifiedElements getLTLQuantifiedAccess() {
		return pLTLQuantified;
	}
	
	public ParserRule getLTLQuantifiedRule() {
		return getLTLQuantifiedAccess().getRule();
	}
	
	//LTLDisjunction LTLProperty:
	//	LTLImplication ({LTLDisjunction.left=current} 'or' right=LTLImplication)*
	public LTLDisjunctionElements getLTLDisjunctionAccess() {
		return pLTLDisjunction;
	}
	
	public ParserRule getLTLDisjunctionRule() {
		return getLTLDisjunctionAccess().getRule();
	}
	
	//LTLImplication LTLProperty:
	//	LTLConjunction ({LTLImplication.left=current} '=>' right=LTLImplication)?
	public LTLImplicationElements getLTLImplicationAccess() {
		return pLTLImplication;
	}
	
	public ParserRule getLTLImplicationRule() {
		return getLTLImplicationAccess().getRule();
	}
	
	//LTLConjunction LTLProperty:
	//	LTLBinary ({LTLConjunction.left=current} 'and' right=LTLBinary)*
	public LTLConjunctionElements getLTLConjunctionAccess() {
		return pLTLConjunction;
	}
	
	public ParserRule getLTLConjunctionRule() {
		return getLTLConjunctionAccess().getRule();
	}
	
	//LTLBinary LTLProperty:
	//	LTLUnary ({LTLUntil.left=current} 'until' right=LTLUnary | {LTLRelease.left=current} 'release' right=LTLUnary)?
	public LTLBinaryElements getLTLBinaryAccess() {
		return pLTLBinary;
	}
	
	public ParserRule getLTLBinaryRule() {
		return getLTLBinaryAccess().getRule();
	}
	
	//LTLUnary LTLProperty:
	//	({LTLUnaryNegation} 'not' | {LTLUnaryNext} 'next' | {LTLUnaryAlways} '[]' | {LTLUnaryEventually} '<>')
	//	operand=LTLUnary | AtomicLTL
	public LTLUnaryElements getLTLUnaryAccess() {
		return pLTLUnary;
	}
	
	public ParserRule getLTLUnaryRule() {
		return getLTLUnaryAccess().getRule();
	}
	
	//AtomicLTL LTLProperty:
	//	{LTLVariable} declaration=[PropertyDeclarationUse] | ObservableEvent
	//	| '(' LTLProperty ')'
	public AtomicLTLElements getAtomicLTLAccess() {
		return pAtomicLTL;
	}
	
	public ParserRule getAtomicLTLRule() {
		return getAtomicLTLAccess().getRule();
	}
	
	//StateEvent:
	//	EnterStateEvent
	//	| LeaveStateEvent;
	public StateEventElements getStateEventAccess() {
		return pStateEvent;
	}
	
	public ParserRule getStateEventRule() {
		return getStateEventAccess().getRule();
	}
	
	//EnterStateEvent:
	//	'enter' subject=AtomicObservable;
	public EnterStateEventElements getEnterStateEventAccess() {
		return pEnterStateEvent;
	}
	
	public ParserRule getEnterStateEventRule() {
		return getEnterStateEventAccess().getRule();
	}
	
	//LeaveStateEvent:
	//	'leave' subject=AtomicObservable;
	public LeaveStateEventElements getLeaveStateEventAccess() {
		return pLeaveStateEvent;
	}
	
	public ParserRule getLeaveStateEventRule() {
		return getLeaveStateEventAccess().getRule();
	}
	
	//Observable:
	//	ObservableDisjunction;
	public ObservableElements getObservableAccess() {
		return pObservable;
	}
	
	public ParserRule getObservableRule() {
		return getObservableAccess().getRule();
	}
	
	//ObservableDisjunction Observable:
	//	ObservableImplication ({ObservableDisjunction.left=current} 'or' right=ObservableImplication)*
	public ObservableDisjunctionElements getObservableDisjunctionAccess() {
		return pObservableDisjunction;
	}
	
	public ParserRule getObservableDisjunctionRule() {
		return getObservableDisjunctionAccess().getRule();
	}
	
	//ObservableImplication Observable:
	//	ObservableConjunction ({ObservableImplication.left=current} '=>' right=ObservableImplication)?
	public ObservableImplicationElements getObservableImplicationAccess() {
		return pObservableImplication;
	}
	
	public ParserRule getObservableImplicationRule() {
		return getObservableImplicationAccess().getRule();
	}
	
	//ObservableConjunction Observable:
	//	ObservableNegation ({ObservableConjunction.left=current} 'and' right=ObservableNegation)*
	public ObservableConjunctionElements getObservableConjunctionAccess() {
		return pObservableConjunction;
	}
	
	public ParserRule getObservableConjunctionRule() {
		return getObservableConjunctionAccess().getRule();
	}
	
	//ObservableNegation Observable:
	//	{ObservableNegation} 'not' child=ObservableNegation | AtomicObservable
	public ObservableNegationElements getObservableNegationAccess() {
		return pObservableNegation;
	}
	
	public ParserRule getObservableNegationRule() {
		return getObservableNegationAccess().getRule();
	}
	
	//AtomicObservable Observable:
	//	'(' Observable ')' | ObservableEvent
	public AtomicObservableElements getAtomicObservableAccess() {
		return pAtomicObservable;
	}
	
	public ParserRule getAtomicObservableRule() {
		return getAtomicObservableAccess().getRule();
	}
	
	//ObservableEvent:
	//	PathEvent | StateEvent;
	public ObservableEventElements getObservableEventAccess() {
		return pObservableEvent;
	}
	
	public ParserRule getObservableEventRule() {
		return getObservableEventAccess().getRule();
	}
	
	//PathEvent:
	//	path=Path item=Subject;
	public PathEventElements getPathEventAccess() {
		return pPathEvent;
	}
	
	public ParserRule getPathEventRule() {
		return getPathEventAccess().getRule();
	}
	
	//Path:
	//	(items+=PathItem '/')+;
	public PathElements getPathAccess() {
		return pPath;
	}
	
	public ParserRule getPathRule() {
		return getPathAccess().getRule();
	}
	
	//PathItem:
	//	NaturalItem | NamedItem;
	public PathItemElements getPathItemAccess() {
		return pPathItem;
	}
	
	public ParserRule getPathItemRule() {
		return getPathItemAccess().getRule();
	}
	
	//NaturalItem:
	//	value=INT;
	public NaturalItemElements getNaturalItemAccess() {
		return pNaturalItem;
	}
	
	public ParserRule getNaturalItemRule() {
		return getNaturalItemAccess().getRule();
	}
	
	//NamedItem:
	//	declaration=[PathDeclarationUse];
	public NamedItemElements getNamedItemAccess() {
		return pNamedItem;
	}
	
	public ParserRule getNamedItemRule() {
		return getNamedItemAccess().getRule();
	}
	
	//Subject:
	//	StateSubject | ValueSubject | TagSubject | EventSubject;
	public SubjectElements getSubjectAccess() {
		return pSubject;
	}
	
	public ParserRule getSubjectRule() {
		return getSubjectAccess().getRule();
	}
	
	//StateSubject:
	//	'state' state=[StateDeclaration];
	public StateSubjectElements getStateSubjectAccess() {
		return pStateSubject;
	}
	
	public ParserRule getStateSubjectRule() {
		return getStateSubjectAccess().getRule();
	}
	
	//ValueSubject:
	//	'value' value=AtomicExpression;
	public ValueSubjectElements getValueSubjectAccess() {
		return pValueSubject;
	}
	
	public ParserRule getValueSubjectRule() {
		return getValueSubjectAccess().getRule();
	}
	
	//TagSubject:
	//	'tag' tag=[TaggedStatement];
	public TagSubjectElements getTagSubjectAccess() {
		return pTagSubject;
	}
	
	public ParserRule getTagSubjectRule() {
		return getTagSubjectAccess().getRule();
	}
	
	//EventSubject:
	//	'event' event=ID;
	public EventSubjectElements getEventSubjectAccess() {
		return pEventSubject;
	}
	
	public ParserRule getEventSubjectRule() {
		return getEventSubjectAccess().getRule();
	}
	
	//terminal INT returns ecore::EInt:
	//	'0'..'9'+;
	public TerminalRule getINTRule() {
		return tINT;
	}
	
	//terminal ID:
	//	('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '0'..'9' | '_')*;
	public TerminalRule getIDRule() {
		return tID;
	}
	
	//terminal FLT returns ecore::EFloat:
	//	INT '.' INT;
	public TerminalRule getFLTRule() {
		return tFLT;
	}
	
	//terminal STRING:
	//	'"' ('\\' . | !('\\' | '"'))* '"' |
	//	"'" ('\\' . | !('\\' | "'"))* "'";
	public TerminalRule getSTRINGRule() {
		return gaTerminals.getSTRINGRule();
	}
	
	//terminal ML_COMMENT:
	//	'/ *'->'* /';
	public TerminalRule getML_COMMENTRule() {
		return gaTerminals.getML_COMMENTRule();
	}
	
	//terminal SL_COMMENT:
	//	'//' !('\n' | '\r')* ('\r'? '\n')?;
	public TerminalRule getSL_COMMENTRule() {
		return gaTerminals.getSL_COMMENTRule();
	}
	
	//terminal WS:
	//	' ' | '\t' | '\r' | '\n'+;
	public TerminalRule getWSRule() {
		return gaTerminals.getWSRule();
	}
	
	//terminal ANY_OTHER:
	//	.;
	public TerminalRule getANY_OTHERRule() {
		return gaTerminals.getANY_OTHERRule();
	}
}
