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

import ca.queensu.cs.mase.services.UrmlGrammarAccess;
import ca.queensu.cs.mase.urml.ActionCode;
import ca.queensu.cs.mase.urml.Assignment;
import ca.queensu.cs.mase.urml.Attribute;
import ca.queensu.cs.mase.urml.BoolLiteral;
import ca.queensu.cs.mase.urml.Capsule;
import ca.queensu.cs.mase.urml.CapsuleInst;
import ca.queensu.cs.mase.urml.ChooseStatement;
import ca.queensu.cs.mase.urml.ConcatenateExpression;
import ca.queensu.cs.mase.urml.ConditionalAndExpression;
import ca.queensu.cs.mase.urml.ConditionalOrExpression;
import ca.queensu.cs.mase.urml.Connector;
import ca.queensu.cs.mase.urml.Divide;
import ca.queensu.cs.mase.urml.Equal;
import ca.queensu.cs.mase.urml.FunctionCall;
import ca.queensu.cs.mase.urml.GreaterThan;
import ca.queensu.cs.mase.urml.GreaterThanOrEqual;
import ca.queensu.cs.mase.urml.Identifier;
import ca.queensu.cs.mase.urml.IfStatement;
import ca.queensu.cs.mase.urml.IfStatementOperation;
import ca.queensu.cs.mase.urml.IncomingVariable;
import ca.queensu.cs.mase.urml.InformTimer;
import ca.queensu.cs.mase.urml.IntLiteral;
import ca.queensu.cs.mase.urml.Invoke;
import ca.queensu.cs.mase.urml.LessThan;
import ca.queensu.cs.mase.urml.LessThanOrEqual;
import ca.queensu.cs.mase.urml.LocalVar;
import ca.queensu.cs.mase.urml.LogPort;
import ca.queensu.cs.mase.urml.LogStatement;
import ca.queensu.cs.mase.urml.Minus;
import ca.queensu.cs.mase.urml.Model;
import ca.queensu.cs.mase.urml.Modulo;
import ca.queensu.cs.mase.urml.Multiply;
import ca.queensu.cs.mase.urml.NoOp;
import ca.queensu.cs.mase.urml.NotBooleanExpression;
import ca.queensu.cs.mase.urml.NotEqual;
import ca.queensu.cs.mase.urml.Operation;
import ca.queensu.cs.mase.urml.OperationCode;
import ca.queensu.cs.mase.urml.Plus;
import ca.queensu.cs.mase.urml.Port;
import ca.queensu.cs.mase.urml.Protocol;
import ca.queensu.cs.mase.urml.ReturnStatement;
import ca.queensu.cs.mase.urml.SendTrigger;
import ca.queensu.cs.mase.urml.Signal;
import ca.queensu.cs.mase.urml.StateMachine;
import ca.queensu.cs.mase.urml.State_;
import ca.queensu.cs.mase.urml.StringExpression;
import ca.queensu.cs.mase.urml.TimerPort;
import ca.queensu.cs.mase.urml.Transition;
import ca.queensu.cs.mase.urml.Trigger_in;
import ca.queensu.cs.mase.urml.Trigger_out;
import ca.queensu.cs.mase.urml.UnaryExpression;
import ca.queensu.cs.mase.urml.UrmlPackage;
import ca.queensu.cs.mase.urml.Variable;
import ca.queensu.cs.mase.urml.WhileLoop;
import ca.queensu.cs.mase.urml.WhileLoopOperation;
import com.google.inject.Inject;
import java.util.Set;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.xtext.Action;
import org.eclipse.xtext.Parameter;
import org.eclipse.xtext.ParserRule;
import org.eclipse.xtext.serializer.ISerializationContext;
import org.eclipse.xtext.serializer.acceptor.SequenceFeeder;
import org.eclipse.xtext.serializer.sequencer.AbstractDelegatingSemanticSequencer;
import org.eclipse.xtext.serializer.sequencer.ITransientValueService.ValueTransient;

@SuppressWarnings("all")
public class UrmlSemanticSequencer extends AbstractDelegatingSemanticSequencer {

	@Inject
	private UrmlGrammarAccess grammarAccess;
	
	@Override
	public void sequence(ISerializationContext context, EObject semanticObject) {
		EPackage epackage = semanticObject.eClass().getEPackage();
		ParserRule rule = context.getParserRule();
		Action action = context.getAssignedAction();
		Set<Parameter> parameters = context.getEnabledBooleanParameters();
		if (epackage == UrmlPackage.eINSTANCE)
			switch (semanticObject.eClass().getClassifierID()) {
			case UrmlPackage.ACTION_CODE:
				sequence_ActionCode(context, (ActionCode) semanticObject); 
				return; 
			case UrmlPackage.ASSIGNMENT:
				sequence_Assignment(context, (Assignment) semanticObject); 
				return; 
			case UrmlPackage.ATTRIBUTE:
				sequence_Attribute(context, (Attribute) semanticObject); 
				return; 
			case UrmlPackage.BOOL_LITERAL:
				sequence_BoolLiteral(context, (BoolLiteral) semanticObject); 
				return; 
			case UrmlPackage.CAPSULE:
				sequence_Capsule(context, (Capsule) semanticObject); 
				return; 
			case UrmlPackage.CAPSULE_INST:
				sequence_CapsuleInst(context, (CapsuleInst) semanticObject); 
				return; 
			case UrmlPackage.CHOOSE_STATEMENT:
				sequence_ChooseStatement(context, (ChooseStatement) semanticObject); 
				return; 
			case UrmlPackage.CONCATENATE_EXPRESSION:
				sequence_StringExpression(context, (ConcatenateExpression) semanticObject); 
				return; 
			case UrmlPackage.CONDITIONAL_AND_EXPRESSION:
				sequence_ConditionalAndExpression(context, (ConditionalAndExpression) semanticObject); 
				return; 
			case UrmlPackage.CONDITIONAL_OR_EXPRESSION:
				sequence_ConditionalOrExpression(context, (ConditionalOrExpression) semanticObject); 
				return; 
			case UrmlPackage.CONNECTOR:
				sequence_Connector(context, (Connector) semanticObject); 
				return; 
			case UrmlPackage.DIVIDE:
				sequence_MultiplicativeExpression(context, (Divide) semanticObject); 
				return; 
			case UrmlPackage.EQUAL:
				sequence_RelationalOpExpression(context, (Equal) semanticObject); 
				return; 
			case UrmlPackage.FUNCTION_CALL:
				sequence_FunctionCall(context, (FunctionCall) semanticObject); 
				return; 
			case UrmlPackage.GREATER_THAN:
				sequence_RelationalOpExpression(context, (GreaterThan) semanticObject); 
				return; 
			case UrmlPackage.GREATER_THAN_OR_EQUAL:
				sequence_RelationalOpExpression(context, (GreaterThanOrEqual) semanticObject); 
				return; 
			case UrmlPackage.IDENTIFIER:
				sequence_Identifier(context, (Identifier) semanticObject); 
				return; 
			case UrmlPackage.IF_STATEMENT:
				sequence_IfStatement(context, (IfStatement) semanticObject); 
				return; 
			case UrmlPackage.IF_STATEMENT_OPERATION:
				sequence_IfStatementOperation(context, (IfStatementOperation) semanticObject); 
				return; 
			case UrmlPackage.INCOMING_VARIABLE:
				sequence_IncomingVariable(context, (IncomingVariable) semanticObject); 
				return; 
			case UrmlPackage.INFORM_TIMER:
				sequence_InformTimer(context, (InformTimer) semanticObject); 
				return; 
			case UrmlPackage.INT_LITERAL:
				sequence_IntLiteral(context, (IntLiteral) semanticObject); 
				return; 
			case UrmlPackage.INVOKE:
				sequence_Invoke(context, (Invoke) semanticObject); 
				return; 
			case UrmlPackage.LESS_THAN:
				sequence_RelationalOpExpression(context, (LessThan) semanticObject); 
				return; 
			case UrmlPackage.LESS_THAN_OR_EQUAL:
				sequence_RelationalOpExpression(context, (LessThanOrEqual) semanticObject); 
				return; 
			case UrmlPackage.LOCAL_VAR:
				sequence_LocalVar(context, (LocalVar) semanticObject); 
				return; 
			case UrmlPackage.LOG_PORT:
				sequence_LogPort(context, (LogPort) semanticObject); 
				return; 
			case UrmlPackage.LOG_STATEMENT:
				sequence_LogStatement(context, (LogStatement) semanticObject); 
				return; 
			case UrmlPackage.MINUS:
				sequence_AdditiveExpression(context, (Minus) semanticObject); 
				return; 
			case UrmlPackage.MODEL:
				sequence_Model(context, (Model) semanticObject); 
				return; 
			case UrmlPackage.MODULO:
				sequence_MultiplicativeExpression(context, (Modulo) semanticObject); 
				return; 
			case UrmlPackage.MULTIPLY:
				sequence_MultiplicativeExpression(context, (Multiply) semanticObject); 
				return; 
			case UrmlPackage.NO_OP:
				sequence_NoOp(context, (NoOp) semanticObject); 
				return; 
			case UrmlPackage.NOT_BOOLEAN_EXPRESSION:
				sequence_NotBooleanExpression(context, (NotBooleanExpression) semanticObject); 
				return; 
			case UrmlPackage.NOT_EQUAL:
				sequence_RelationalOpExpression(context, (NotEqual) semanticObject); 
				return; 
			case UrmlPackage.OPERATION:
				sequence_Operation(context, (Operation) semanticObject); 
				return; 
			case UrmlPackage.OPERATION_CODE:
				sequence_OperationCode(context, (OperationCode) semanticObject); 
				return; 
			case UrmlPackage.PLUS:
				sequence_AdditiveExpression(context, (Plus) semanticObject); 
				return; 
			case UrmlPackage.PORT:
				sequence_Port(context, (Port) semanticObject); 
				return; 
			case UrmlPackage.PROTOCOL:
				sequence_Protocol(context, (Protocol) semanticObject); 
				return; 
			case UrmlPackage.RETURN_STATEMENT:
				sequence_ReturnStatement(context, (ReturnStatement) semanticObject); 
				return; 
			case UrmlPackage.SEND_TRIGGER:
				sequence_SendTrigger(context, (SendTrigger) semanticObject); 
				return; 
			case UrmlPackage.SIGNAL:
				sequence_Signal(context, (Signal) semanticObject); 
				return; 
			case UrmlPackage.STATE_MACHINE:
				sequence_StateMachine(context, (StateMachine) semanticObject); 
				return; 
			case UrmlPackage.STATE_:
				sequence_State_(context, (State_) semanticObject); 
				return; 
			case UrmlPackage.STRING_EXPRESSION:
				sequence_IndividualExpression(context, (StringExpression) semanticObject); 
				return; 
			case UrmlPackage.TIMER_PORT:
				sequence_TimerPort(context, (TimerPort) semanticObject); 
				return; 
			case UrmlPackage.TRANSITION:
				sequence_Transition(context, (Transition) semanticObject); 
				return; 
			case UrmlPackage.TRIGGER_IN:
				sequence_Trigger_in(context, (Trigger_in) semanticObject); 
				return; 
			case UrmlPackage.TRIGGER_OUT:
				sequence_Trigger_out(context, (Trigger_out) semanticObject); 
				return; 
			case UrmlPackage.UNARY_EXPRESSION:
				sequence_UnaryExpression(context, (UnaryExpression) semanticObject); 
				return; 
			case UrmlPackage.VARIABLE:
				sequence_Variable(context, (Variable) semanticObject); 
				return; 
			case UrmlPackage.WHILE_LOOP:
				sequence_WhileLoop(context, (WhileLoop) semanticObject); 
				return; 
			case UrmlPackage.WHILE_LOOP_OPERATION:
				sequence_WhileLoopOperation(context, (WhileLoopOperation) semanticObject); 
				return; 
			}
		if (errorAcceptor != null)
			errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context));
	}
	
	/**
	 * Contexts:
	 *     ActionCode returns ActionCode
	 *
	 * Constraint:
	 *     statements+=Statement+
	 */
	protected void sequence_ActionCode(ISerializationContext context, ActionCode semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns Minus
	 *     ConditionalOrExpression returns Minus
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns Minus
	 *     ConditionalAndExpression returns Minus
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns Minus
	 *     RelationalOpExpression returns Minus
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns Minus
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns Minus
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns Minus
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns Minus
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns Minus
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns Minus
	 *     AdditiveExpression returns Minus
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns Minus
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns Minus
	 *     MultiplicativeExpression returns Minus
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns Minus
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns Minus
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns Minus
	 *     UnaryExpression returns Minus
	 *     UnaryExpressionNotPlusMinus returns Minus
	 *     PrimaryExpression returns Minus
	 *
	 * Constraint:
	 *     (left=AdditiveExpression_Minus_1_0_0_1_0 rest=MultiplicativeExpression)
	 */
	protected void sequence_AdditiveExpression(ISerializationContext context, Minus semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.MINUS__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.MINUS__LEFT));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.MINUS__REST) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.MINUS__REST));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getAdditiveExpressionAccess().getMinusLeftAction_1_0_0_1_0(), semanticObject.getLeft());
		feeder.accept(grammarAccess.getAdditiveExpressionAccess().getRestMultiplicativeExpressionParserRuleCall_1_1_0(), semanticObject.getRest());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns Plus
	 *     ConditionalOrExpression returns Plus
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns Plus
	 *     ConditionalAndExpression returns Plus
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns Plus
	 *     RelationalOpExpression returns Plus
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns Plus
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns Plus
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns Plus
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns Plus
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns Plus
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns Plus
	 *     AdditiveExpression returns Plus
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns Plus
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns Plus
	 *     MultiplicativeExpression returns Plus
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns Plus
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns Plus
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns Plus
	 *     UnaryExpression returns Plus
	 *     UnaryExpressionNotPlusMinus returns Plus
	 *     PrimaryExpression returns Plus
	 *
	 * Constraint:
	 *     (left=AdditiveExpression_Plus_1_0_0_0_0 rest=MultiplicativeExpression)
	 */
	protected void sequence_AdditiveExpression(ISerializationContext context, Plus semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.PLUS__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.PLUS__LEFT));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.PLUS__REST) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.PLUS__REST));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getAdditiveExpressionAccess().getPlusLeftAction_1_0_0_0_0(), semanticObject.getLeft());
		feeder.accept(grammarAccess.getAdditiveExpressionAccess().getRestMultiplicativeExpressionParserRuleCall_1_1_0(), semanticObject.getRest());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     StatementOperation returns Assignment
	 *     Statement returns Assignment
	 *     Assignment returns Assignment
	 *
	 * Constraint:
	 *     (lvalue=[Assignable|ID] exp=Expression)
	 */
	protected void sequence_Assignment(ISerializationContext context, Assignment semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.ASSIGNMENT__LVALUE) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.ASSIGNMENT__LVALUE));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.ASSIGNMENT__EXP) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.ASSIGNMENT__EXP));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getAssignmentAccess().getLvalueAssignableIDTerminalRuleCall_0_0_1(), semanticObject.eGet(UrmlPackage.Literals.ASSIGNMENT__LVALUE, false));
		feeder.accept(grammarAccess.getAssignmentAccess().getExpExpressionParserRuleCall_2_0(), semanticObject.getExp());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     Attribute returns Attribute
	 *     Assignable returns Attribute
	 *     Identifiable returns Attribute
	 *
	 * Constraint:
	 *     ((isBool?='bool' | isInt?='int') name=ID defaultValue=Expression?)
	 */
	protected void sequence_Attribute(ISerializationContext context, Attribute semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns BoolLiteral
	 *     ConditionalOrExpression returns BoolLiteral
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns BoolLiteral
	 *     ConditionalAndExpression returns BoolLiteral
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns BoolLiteral
	 *     RelationalOpExpression returns BoolLiteral
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns BoolLiteral
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns BoolLiteral
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns BoolLiteral
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns BoolLiteral
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns BoolLiteral
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns BoolLiteral
	 *     AdditiveExpression returns BoolLiteral
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns BoolLiteral
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns BoolLiteral
	 *     MultiplicativeExpression returns BoolLiteral
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns BoolLiteral
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns BoolLiteral
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns BoolLiteral
	 *     UnaryExpression returns BoolLiteral
	 *     UnaryExpressionNotPlusMinus returns BoolLiteral
	 *     PrimaryExpression returns BoolLiteral
	 *     LiteralOrIdentifier returns BoolLiteral
	 *     Literal returns BoolLiteral
	 *     BoolLiteral returns BoolLiteral
	 *
	 * Constraint:
	 *     true=BOOLEAN
	 */
	protected void sequence_BoolLiteral(ISerializationContext context, BoolLiteral semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.BOOL_LITERAL__TRUE) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.BOOL_LITERAL__TRUE));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getBoolLiteralAccess().getTrueBOOLEANTerminalRuleCall_1_0(), semanticObject.isTrue());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     CapsuleInst returns CapsuleInst
	 *
	 * Constraint:
	 *     (name=ID type=[Capsule|ID])
	 */
	protected void sequence_CapsuleInst(ISerializationContext context, CapsuleInst semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.CAPSULE_INST__NAME) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.CAPSULE_INST__NAME));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.CAPSULE_INST__TYPE) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.CAPSULE_INST__TYPE));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getCapsuleInstAccess().getNameIDTerminalRuleCall_1_0(), semanticObject.getName());
		feeder.accept(grammarAccess.getCapsuleInstAccess().getTypeCapsuleIDTerminalRuleCall_3_0_1(), semanticObject.eGet(UrmlPackage.Literals.CAPSULE_INST__TYPE, false));
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     Capsule returns Capsule
	 *
	 * Constraint:
	 *     (
	 *         root?='root'? 
	 *         name=ID 
	 *         (
	 *             interfacePorts+=Port | 
	 *             internalPorts+=Port | 
	 *             timerPorts+=TimerPort | 
	 *             logPorts+=LogPort | 
	 *             attributes+=Attribute | 
	 *             capsuleInsts+=CapsuleInst | 
	 *             connectors+=Connector | 
	 *             operations+=Operation | 
	 *             statemachines+=StateMachine
	 *         )*
	 *     )
	 */
	protected void sequence_Capsule(ISerializationContext context, Capsule semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     Statement returns ChooseStatement
	 *     ChooseStatement returns ChooseStatement
	 *
	 * Constraint:
	 *     (intVar=[LocalVar|ID] intExp=AdditiveExpression)
	 */
	protected void sequence_ChooseStatement(ISerializationContext context, ChooseStatement semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.CHOOSE_STATEMENT__INT_VAR) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.CHOOSE_STATEMENT__INT_VAR));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.CHOOSE_STATEMENT__INT_EXP) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.CHOOSE_STATEMENT__INT_EXP));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getChooseStatementAccess().getIntVarLocalVarIDTerminalRuleCall_2_0_1(), semanticObject.eGet(UrmlPackage.Literals.CHOOSE_STATEMENT__INT_VAR, false));
		feeder.accept(grammarAccess.getChooseStatementAccess().getIntExpAdditiveExpressionParserRuleCall_4_0(), semanticObject.getIntExp());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns ConditionalAndExpression
	 *     ConditionalOrExpression returns ConditionalAndExpression
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns ConditionalAndExpression
	 *     ConditionalAndExpression returns ConditionalAndExpression
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns ConditionalAndExpression
	 *     RelationalOpExpression returns ConditionalAndExpression
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns ConditionalAndExpression
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns ConditionalAndExpression
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns ConditionalAndExpression
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns ConditionalAndExpression
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns ConditionalAndExpression
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns ConditionalAndExpression
	 *     AdditiveExpression returns ConditionalAndExpression
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns ConditionalAndExpression
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns ConditionalAndExpression
	 *     MultiplicativeExpression returns ConditionalAndExpression
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns ConditionalAndExpression
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns ConditionalAndExpression
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns ConditionalAndExpression
	 *     UnaryExpression returns ConditionalAndExpression
	 *     UnaryExpressionNotPlusMinus returns ConditionalAndExpression
	 *     PrimaryExpression returns ConditionalAndExpression
	 *
	 * Constraint:
	 *     (left=ConditionalAndExpression_ConditionalAndExpression_1_0_0 rest=RelationalOpExpression)
	 */
	protected void sequence_ConditionalAndExpression(ISerializationContext context, ConditionalAndExpression semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.CONDITIONAL_AND_EXPRESSION__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.CONDITIONAL_AND_EXPRESSION__LEFT));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.CONDITIONAL_AND_EXPRESSION__REST) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.CONDITIONAL_AND_EXPRESSION__REST));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getConditionalAndExpressionAccess().getConditionalAndExpressionLeftAction_1_0_0(), semanticObject.getLeft());
		feeder.accept(grammarAccess.getConditionalAndExpressionAccess().getRestRelationalOpExpressionParserRuleCall_1_0_2_0(), semanticObject.getRest());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns ConditionalOrExpression
	 *     ConditionalOrExpression returns ConditionalOrExpression
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns ConditionalOrExpression
	 *     ConditionalAndExpression returns ConditionalOrExpression
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns ConditionalOrExpression
	 *     RelationalOpExpression returns ConditionalOrExpression
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns ConditionalOrExpression
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns ConditionalOrExpression
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns ConditionalOrExpression
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns ConditionalOrExpression
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns ConditionalOrExpression
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns ConditionalOrExpression
	 *     AdditiveExpression returns ConditionalOrExpression
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns ConditionalOrExpression
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns ConditionalOrExpression
	 *     MultiplicativeExpression returns ConditionalOrExpression
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns ConditionalOrExpression
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns ConditionalOrExpression
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns ConditionalOrExpression
	 *     UnaryExpression returns ConditionalOrExpression
	 *     UnaryExpressionNotPlusMinus returns ConditionalOrExpression
	 *     PrimaryExpression returns ConditionalOrExpression
	 *
	 * Constraint:
	 *     (left=ConditionalOrExpression_ConditionalOrExpression_1_0_0 rest=ConditionalAndExpression)
	 */
	protected void sequence_ConditionalOrExpression(ISerializationContext context, ConditionalOrExpression semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.CONDITIONAL_OR_EXPRESSION__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.CONDITIONAL_OR_EXPRESSION__LEFT));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.CONDITIONAL_OR_EXPRESSION__REST) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.CONDITIONAL_OR_EXPRESSION__REST));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getConditionalOrExpressionAccess().getConditionalOrExpressionLeftAction_1_0_0(), semanticObject.getLeft());
		feeder.accept(grammarAccess.getConditionalOrExpressionAccess().getRestConditionalAndExpressionParserRuleCall_1_0_2_0(), semanticObject.getRest());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     Connector returns Connector
	 *
	 * Constraint:
	 *     (capsuleInst1=[CapsuleInst|ID]? port1=[Port|ID] capsuleInst2=[CapsuleInst|ID]? port2=[Port|ID])
	 */
	protected void sequence_Connector(ISerializationContext context, Connector semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns FunctionCall
	 *     ConditionalOrExpression returns FunctionCall
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns FunctionCall
	 *     ConditionalAndExpression returns FunctionCall
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns FunctionCall
	 *     RelationalOpExpression returns FunctionCall
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns FunctionCall
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns FunctionCall
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns FunctionCall
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns FunctionCall
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns FunctionCall
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns FunctionCall
	 *     AdditiveExpression returns FunctionCall
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns FunctionCall
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns FunctionCall
	 *     MultiplicativeExpression returns FunctionCall
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns FunctionCall
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns FunctionCall
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns FunctionCall
	 *     UnaryExpression returns FunctionCall
	 *     UnaryExpressionNotPlusMinus returns FunctionCall
	 *     PrimaryExpression returns FunctionCall
	 *     LiteralOrIdentifier returns FunctionCall
	 *     Literal returns FunctionCall
	 *     FunctionCall returns FunctionCall
	 *
	 * Constraint:
	 *     (call=[Operation|ID] (params+=Expression params+=Expression*)?)
	 */
	protected void sequence_FunctionCall(ISerializationContext context, FunctionCall semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns Identifier
	 *     ConditionalOrExpression returns Identifier
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns Identifier
	 *     ConditionalAndExpression returns Identifier
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns Identifier
	 *     RelationalOpExpression returns Identifier
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns Identifier
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns Identifier
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns Identifier
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns Identifier
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns Identifier
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns Identifier
	 *     AdditiveExpression returns Identifier
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns Identifier
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns Identifier
	 *     MultiplicativeExpression returns Identifier
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns Identifier
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns Identifier
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns Identifier
	 *     UnaryExpression returns Identifier
	 *     UnaryExpressionNotPlusMinus returns Identifier
	 *     PrimaryExpression returns Identifier
	 *     LiteralOrIdentifier returns Identifier
	 *     Identifier returns Identifier
	 *
	 * Constraint:
	 *     id=[Identifiable|ID]
	 */
	protected void sequence_Identifier(ISerializationContext context, Identifier semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.IDENTIFIER__ID) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.IDENTIFIER__ID));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getIdentifierAccess().getIdIdentifiableIDTerminalRuleCall_0_1(), semanticObject.eGet(UrmlPackage.Literals.IDENTIFIER__ID, false));
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     StatementOperation returns IfStatementOperation
	 *     IfStatementOperation returns IfStatementOperation
	 *
	 * Constraint:
	 *     (condition=Expression thenStatements+=StatementOperation+ elseStatements+=StatementOperation*)
	 */
	protected void sequence_IfStatementOperation(ISerializationContext context, IfStatementOperation semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     Statement returns IfStatement
	 *     IfStatement returns IfStatement
	 *
	 * Constraint:
	 *     (condition=Expression thenStatements+=Statement+ elseStatements+=Statement*)
	 */
	protected void sequence_IfStatement(ISerializationContext context, IfStatement semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     IncomingVariable returns IncomingVariable
	 *     Identifiable returns IncomingVariable
	 *
	 * Constraint:
	 *     ((isBool?='bool' | isInt?='int') name=ID)
	 */
	protected void sequence_IncomingVariable(ISerializationContext context, IncomingVariable semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     StringExpression returns StringExpression
	 *     StringExpression.ConcatenateExpression_1_0_0 returns StringExpression
	 *     IndividualExpression returns StringExpression
	 *
	 * Constraint:
	 *     (expr=Expression | str=STRING)
	 */
	protected void sequence_IndividualExpression(ISerializationContext context, StringExpression semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     StatementOperation returns InformTimer
	 *     Statement returns InformTimer
	 *     InformTimer returns InformTimer
	 *
	 * Constraint:
	 *     (timerPort=[TimerPort|ID] time=AdditiveExpression)
	 */
	protected void sequence_InformTimer(ISerializationContext context, InformTimer semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.INFORM_TIMER__TIMER_PORT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.INFORM_TIMER__TIMER_PORT));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.INFORM_TIMER__TIME) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.INFORM_TIMER__TIME));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getInformTimerAccess().getTimerPortTimerPortIDTerminalRuleCall_1_0_1(), semanticObject.eGet(UrmlPackage.Literals.INFORM_TIMER__TIMER_PORT, false));
		feeder.accept(grammarAccess.getInformTimerAccess().getTimeAdditiveExpressionParserRuleCall_3_0(), semanticObject.getTime());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns IntLiteral
	 *     ConditionalOrExpression returns IntLiteral
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns IntLiteral
	 *     ConditionalAndExpression returns IntLiteral
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns IntLiteral
	 *     RelationalOpExpression returns IntLiteral
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns IntLiteral
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns IntLiteral
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns IntLiteral
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns IntLiteral
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns IntLiteral
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns IntLiteral
	 *     AdditiveExpression returns IntLiteral
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns IntLiteral
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns IntLiteral
	 *     MultiplicativeExpression returns IntLiteral
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns IntLiteral
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns IntLiteral
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns IntLiteral
	 *     UnaryExpression returns IntLiteral
	 *     UnaryExpressionNotPlusMinus returns IntLiteral
	 *     PrimaryExpression returns IntLiteral
	 *     LiteralOrIdentifier returns IntLiteral
	 *     Literal returns IntLiteral
	 *     IntLiteral returns IntLiteral
	 *
	 * Constraint:
	 *     int=INT
	 */
	protected void sequence_IntLiteral(ISerializationContext context, IntLiteral semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.INT_LITERAL__INT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.INT_LITERAL__INT));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getIntLiteralAccess().getIntINTTerminalRuleCall_1_0(), semanticObject.getInt());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     StatementOperation returns Invoke
	 *     Statement returns Invoke
	 *     Invoke returns Invoke
	 *
	 * Constraint:
	 *     (operation=[Operation|ID] (parameters+=Expression parameters+=Expression*)?)
	 */
	protected void sequence_Invoke(ISerializationContext context, Invoke semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     LocalVar returns LocalVar
	 *     Assignable returns LocalVar
	 *     Identifiable returns LocalVar
	 *
	 * Constraint:
	 *     ((isBool?='bool' | isInt?='int') name=ID)
	 */
	protected void sequence_LocalVar(ISerializationContext context, LocalVar semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     LogPort returns LogPort
	 *
	 * Constraint:
	 *     name=ID
	 */
	protected void sequence_LogPort(ISerializationContext context, LogPort semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.LOG_PORT__NAME) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.LOG_PORT__NAME));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getLogPortAccess().getNameIDTerminalRuleCall_1_0(), semanticObject.getName());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     StatementOperation returns LogStatement
	 *     Statement returns LogStatement
	 *     LogStatement returns LogStatement
	 *
	 * Constraint:
	 *     (logPort=[LogPort|ID] left=StringExpression)
	 */
	protected void sequence_LogStatement(ISerializationContext context, LogStatement semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.LOG_STATEMENT__LOG_PORT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.LOG_STATEMENT__LOG_PORT));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.LOG_STATEMENT__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.LOG_STATEMENT__LEFT));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getLogStatementAccess().getLogPortLogPortIDTerminalRuleCall_1_0_1(), semanticObject.eGet(UrmlPackage.Literals.LOG_STATEMENT__LOG_PORT, false));
		feeder.accept(grammarAccess.getLogStatementAccess().getLeftStringExpressionParserRuleCall_3_0(), semanticObject.getLeft());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     Model returns Model
	 *
	 * Constraint:
	 *     (name=ID (capsules+=Capsule | protocols+=Protocol)*)
	 */
	protected void sequence_Model(ISerializationContext context, Model semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns Divide
	 *     ConditionalOrExpression returns Divide
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns Divide
	 *     ConditionalAndExpression returns Divide
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns Divide
	 *     RelationalOpExpression returns Divide
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns Divide
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns Divide
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns Divide
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns Divide
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns Divide
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns Divide
	 *     AdditiveExpression returns Divide
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns Divide
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns Divide
	 *     MultiplicativeExpression returns Divide
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns Divide
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns Divide
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns Divide
	 *     UnaryExpression returns Divide
	 *     UnaryExpressionNotPlusMinus returns Divide
	 *     PrimaryExpression returns Divide
	 *
	 * Constraint:
	 *     (left=MultiplicativeExpression_Divide_1_0_0_1_0 rest=UnaryExpression)
	 */
	protected void sequence_MultiplicativeExpression(ISerializationContext context, Divide semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.DIVIDE__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.DIVIDE__LEFT));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.DIVIDE__REST) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.DIVIDE__REST));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getMultiplicativeExpressionAccess().getDivideLeftAction_1_0_0_1_0(), semanticObject.getLeft());
		feeder.accept(grammarAccess.getMultiplicativeExpressionAccess().getRestUnaryExpressionParserRuleCall_1_1_0(), semanticObject.getRest());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns Modulo
	 *     ConditionalOrExpression returns Modulo
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns Modulo
	 *     ConditionalAndExpression returns Modulo
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns Modulo
	 *     RelationalOpExpression returns Modulo
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns Modulo
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns Modulo
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns Modulo
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns Modulo
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns Modulo
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns Modulo
	 *     AdditiveExpression returns Modulo
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns Modulo
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns Modulo
	 *     MultiplicativeExpression returns Modulo
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns Modulo
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns Modulo
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns Modulo
	 *     UnaryExpression returns Modulo
	 *     UnaryExpressionNotPlusMinus returns Modulo
	 *     PrimaryExpression returns Modulo
	 *
	 * Constraint:
	 *     (left=MultiplicativeExpression_Modulo_1_0_0_2_0 rest=UnaryExpression)
	 */
	protected void sequence_MultiplicativeExpression(ISerializationContext context, Modulo semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.MODULO__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.MODULO__LEFT));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.MODULO__REST) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.MODULO__REST));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getMultiplicativeExpressionAccess().getModuloLeftAction_1_0_0_2_0(), semanticObject.getLeft());
		feeder.accept(grammarAccess.getMultiplicativeExpressionAccess().getRestUnaryExpressionParserRuleCall_1_1_0(), semanticObject.getRest());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns Multiply
	 *     ConditionalOrExpression returns Multiply
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns Multiply
	 *     ConditionalAndExpression returns Multiply
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns Multiply
	 *     RelationalOpExpression returns Multiply
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns Multiply
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns Multiply
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns Multiply
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns Multiply
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns Multiply
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns Multiply
	 *     AdditiveExpression returns Multiply
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns Multiply
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns Multiply
	 *     MultiplicativeExpression returns Multiply
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns Multiply
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns Multiply
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns Multiply
	 *     UnaryExpression returns Multiply
	 *     UnaryExpressionNotPlusMinus returns Multiply
	 *     PrimaryExpression returns Multiply
	 *
	 * Constraint:
	 *     (left=MultiplicativeExpression_Multiply_1_0_0_0_0 rest=UnaryExpression)
	 */
	protected void sequence_MultiplicativeExpression(ISerializationContext context, Multiply semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.MULTIPLY__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.MULTIPLY__LEFT));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.MULTIPLY__REST) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.MULTIPLY__REST));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getMultiplicativeExpressionAccess().getMultiplyLeftAction_1_0_0_0_0(), semanticObject.getLeft());
		feeder.accept(grammarAccess.getMultiplicativeExpressionAccess().getRestUnaryExpressionParserRuleCall_1_1_0(), semanticObject.getRest());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     StatementOperation returns NoOp
	 *     Statement returns NoOp
	 *     NoOp returns NoOp
	 *
	 * Constraint:
	 *     {NoOp}
	 */
	protected void sequence_NoOp(ISerializationContext context, NoOp semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns NotBooleanExpression
	 *     ConditionalOrExpression returns NotBooleanExpression
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns NotBooleanExpression
	 *     ConditionalAndExpression returns NotBooleanExpression
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns NotBooleanExpression
	 *     RelationalOpExpression returns NotBooleanExpression
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns NotBooleanExpression
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns NotBooleanExpression
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns NotBooleanExpression
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns NotBooleanExpression
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns NotBooleanExpression
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns NotBooleanExpression
	 *     AdditiveExpression returns NotBooleanExpression
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns NotBooleanExpression
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns NotBooleanExpression
	 *     MultiplicativeExpression returns NotBooleanExpression
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns NotBooleanExpression
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns NotBooleanExpression
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns NotBooleanExpression
	 *     UnaryExpression returns NotBooleanExpression
	 *     UnaryExpressionNotPlusMinus returns NotBooleanExpression
	 *     NotBooleanExpression returns NotBooleanExpression
	 *     PrimaryExpression returns NotBooleanExpression
	 *
	 * Constraint:
	 *     exp=UnaryExpression
	 */
	protected void sequence_NotBooleanExpression(ISerializationContext context, NotBooleanExpression semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.NOT_BOOLEAN_EXPRESSION__EXP) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.NOT_BOOLEAN_EXPRESSION__EXP));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getNotBooleanExpressionAccess().getExpUnaryExpressionParserRuleCall_1_0(), semanticObject.getExp());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     OperationCode returns OperationCode
	 *
	 * Constraint:
	 *     statements+=StatementOperation+
	 */
	protected void sequence_OperationCode(ISerializationContext context, OperationCode semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     Operation returns Operation
	 *
	 * Constraint:
	 *     ((isBool?='bool' | isInt?='int' | isVoid?='void') name=ID (LocalVars+=LocalVar LocalVars+=LocalVar*)? operationCode=OperationCode)
	 */
	protected void sequence_Operation(ISerializationContext context, Operation semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     Port returns Port
	 *
	 * Constraint:
	 *     (conjugated?='~'? name=ID protocol=[Protocol|ID])
	 */
	protected void sequence_Port(ISerializationContext context, Port semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     Protocol returns Protocol
	 *
	 * Constraint:
	 *     (name=ID (incomingMessages+=Signal | outgoingMessages+=Signal)*)
	 */
	protected void sequence_Protocol(ISerializationContext context, Protocol semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns Equal
	 *     ConditionalOrExpression returns Equal
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns Equal
	 *     ConditionalAndExpression returns Equal
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns Equal
	 *     RelationalOpExpression returns Equal
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns Equal
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns Equal
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns Equal
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns Equal
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns Equal
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns Equal
	 *     AdditiveExpression returns Equal
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns Equal
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns Equal
	 *     MultiplicativeExpression returns Equal
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns Equal
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns Equal
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns Equal
	 *     UnaryExpression returns Equal
	 *     UnaryExpressionNotPlusMinus returns Equal
	 *     PrimaryExpression returns Equal
	 *
	 * Constraint:
	 *     (left=RelationalOpExpression_Equal_1_0_0_4_0 rest=AdditiveExpression)
	 */
	protected void sequence_RelationalOpExpression(ISerializationContext context, Equal semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.EQUAL__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.EQUAL__LEFT));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.EQUAL__REST) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.EQUAL__REST));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getRelationalOpExpressionAccess().getEqualLeftAction_1_0_0_4_0(), semanticObject.getLeft());
		feeder.accept(grammarAccess.getRelationalOpExpressionAccess().getRestAdditiveExpressionParserRuleCall_1_1_0(), semanticObject.getRest());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns GreaterThan
	 *     ConditionalOrExpression returns GreaterThan
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns GreaterThan
	 *     ConditionalAndExpression returns GreaterThan
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns GreaterThan
	 *     RelationalOpExpression returns GreaterThan
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns GreaterThan
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns GreaterThan
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns GreaterThan
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns GreaterThan
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns GreaterThan
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns GreaterThan
	 *     AdditiveExpression returns GreaterThan
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns GreaterThan
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns GreaterThan
	 *     MultiplicativeExpression returns GreaterThan
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns GreaterThan
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns GreaterThan
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns GreaterThan
	 *     UnaryExpression returns GreaterThan
	 *     UnaryExpressionNotPlusMinus returns GreaterThan
	 *     PrimaryExpression returns GreaterThan
	 *
	 * Constraint:
	 *     (left=RelationalOpExpression_GreaterThan_1_0_0_3_0 rest=AdditiveExpression)
	 */
	protected void sequence_RelationalOpExpression(ISerializationContext context, GreaterThan semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.GREATER_THAN__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.GREATER_THAN__LEFT));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.GREATER_THAN__REST) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.GREATER_THAN__REST));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getRelationalOpExpressionAccess().getGreaterThanLeftAction_1_0_0_3_0(), semanticObject.getLeft());
		feeder.accept(grammarAccess.getRelationalOpExpressionAccess().getRestAdditiveExpressionParserRuleCall_1_1_0(), semanticObject.getRest());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns GreaterThanOrEqual
	 *     ConditionalOrExpression returns GreaterThanOrEqual
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns GreaterThanOrEqual
	 *     ConditionalAndExpression returns GreaterThanOrEqual
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns GreaterThanOrEqual
	 *     RelationalOpExpression returns GreaterThanOrEqual
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns GreaterThanOrEqual
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns GreaterThanOrEqual
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns GreaterThanOrEqual
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns GreaterThanOrEqual
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns GreaterThanOrEqual
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns GreaterThanOrEqual
	 *     AdditiveExpression returns GreaterThanOrEqual
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns GreaterThanOrEqual
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns GreaterThanOrEqual
	 *     MultiplicativeExpression returns GreaterThanOrEqual
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns GreaterThanOrEqual
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns GreaterThanOrEqual
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns GreaterThanOrEqual
	 *     UnaryExpression returns GreaterThanOrEqual
	 *     UnaryExpressionNotPlusMinus returns GreaterThanOrEqual
	 *     PrimaryExpression returns GreaterThanOrEqual
	 *
	 * Constraint:
	 *     (left=RelationalOpExpression_GreaterThanOrEqual_1_0_0_2_0 rest=AdditiveExpression)
	 */
	protected void sequence_RelationalOpExpression(ISerializationContext context, GreaterThanOrEqual semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.GREATER_THAN_OR_EQUAL__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.GREATER_THAN_OR_EQUAL__LEFT));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.GREATER_THAN_OR_EQUAL__REST) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.GREATER_THAN_OR_EQUAL__REST));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getRelationalOpExpressionAccess().getGreaterThanOrEqualLeftAction_1_0_0_2_0(), semanticObject.getLeft());
		feeder.accept(grammarAccess.getRelationalOpExpressionAccess().getRestAdditiveExpressionParserRuleCall_1_1_0(), semanticObject.getRest());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns LessThan
	 *     ConditionalOrExpression returns LessThan
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns LessThan
	 *     ConditionalAndExpression returns LessThan
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns LessThan
	 *     RelationalOpExpression returns LessThan
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns LessThan
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns LessThan
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns LessThan
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns LessThan
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns LessThan
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns LessThan
	 *     AdditiveExpression returns LessThan
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns LessThan
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns LessThan
	 *     MultiplicativeExpression returns LessThan
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns LessThan
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns LessThan
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns LessThan
	 *     UnaryExpression returns LessThan
	 *     UnaryExpressionNotPlusMinus returns LessThan
	 *     PrimaryExpression returns LessThan
	 *
	 * Constraint:
	 *     (left=RelationalOpExpression_LessThan_1_0_0_1_0 rest=AdditiveExpression)
	 */
	protected void sequence_RelationalOpExpression(ISerializationContext context, LessThan semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.LESS_THAN__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.LESS_THAN__LEFT));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.LESS_THAN__REST) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.LESS_THAN__REST));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getRelationalOpExpressionAccess().getLessThanLeftAction_1_0_0_1_0(), semanticObject.getLeft());
		feeder.accept(grammarAccess.getRelationalOpExpressionAccess().getRestAdditiveExpressionParserRuleCall_1_1_0(), semanticObject.getRest());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns LessThanOrEqual
	 *     ConditionalOrExpression returns LessThanOrEqual
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns LessThanOrEqual
	 *     ConditionalAndExpression returns LessThanOrEqual
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns LessThanOrEqual
	 *     RelationalOpExpression returns LessThanOrEqual
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns LessThanOrEqual
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns LessThanOrEqual
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns LessThanOrEqual
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns LessThanOrEqual
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns LessThanOrEqual
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns LessThanOrEqual
	 *     AdditiveExpression returns LessThanOrEqual
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns LessThanOrEqual
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns LessThanOrEqual
	 *     MultiplicativeExpression returns LessThanOrEqual
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns LessThanOrEqual
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns LessThanOrEqual
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns LessThanOrEqual
	 *     UnaryExpression returns LessThanOrEqual
	 *     UnaryExpressionNotPlusMinus returns LessThanOrEqual
	 *     PrimaryExpression returns LessThanOrEqual
	 *
	 * Constraint:
	 *     (left=RelationalOpExpression_LessThanOrEqual_1_0_0_0_0 rest=AdditiveExpression)
	 */
	protected void sequence_RelationalOpExpression(ISerializationContext context, LessThanOrEqual semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.LESS_THAN_OR_EQUAL__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.LESS_THAN_OR_EQUAL__LEFT));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.LESS_THAN_OR_EQUAL__REST) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.LESS_THAN_OR_EQUAL__REST));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getRelationalOpExpressionAccess().getLessThanOrEqualLeftAction_1_0_0_0_0(), semanticObject.getLeft());
		feeder.accept(grammarAccess.getRelationalOpExpressionAccess().getRestAdditiveExpressionParserRuleCall_1_1_0(), semanticObject.getRest());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns NotEqual
	 *     ConditionalOrExpression returns NotEqual
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns NotEqual
	 *     ConditionalAndExpression returns NotEqual
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns NotEqual
	 *     RelationalOpExpression returns NotEqual
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns NotEqual
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns NotEqual
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns NotEqual
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns NotEqual
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns NotEqual
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns NotEqual
	 *     AdditiveExpression returns NotEqual
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns NotEqual
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns NotEqual
	 *     MultiplicativeExpression returns NotEqual
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns NotEqual
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns NotEqual
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns NotEqual
	 *     UnaryExpression returns NotEqual
	 *     UnaryExpressionNotPlusMinus returns NotEqual
	 *     PrimaryExpression returns NotEqual
	 *
	 * Constraint:
	 *     (left=RelationalOpExpression_NotEqual_1_0_0_5_0 rest=AdditiveExpression)
	 */
	protected void sequence_RelationalOpExpression(ISerializationContext context, NotEqual semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.NOT_EQUAL__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.NOT_EQUAL__LEFT));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.NOT_EQUAL__REST) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.NOT_EQUAL__REST));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getRelationalOpExpressionAccess().getNotEqualLeftAction_1_0_0_5_0(), semanticObject.getLeft());
		feeder.accept(grammarAccess.getRelationalOpExpressionAccess().getRestAdditiveExpressionParserRuleCall_1_1_0(), semanticObject.getRest());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     StatementOperation returns ReturnStatement
	 *     ReturnStatement returns ReturnStatement
	 *
	 * Constraint:
	 *     returnValue=Expression?
	 */
	protected void sequence_ReturnStatement(ISerializationContext context, ReturnStatement semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     StatementOperation returns SendTrigger
	 *     Statement returns SendTrigger
	 *     SendTrigger returns SendTrigger
	 *
	 * Constraint:
	 *     (triggers+=Trigger_out triggers+=Trigger_out*)
	 */
	protected void sequence_SendTrigger(ISerializationContext context, SendTrigger semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     Signal returns Signal
	 *
	 * Constraint:
	 *     (name=ID (LocalVars+=LocalVar LocalVars+=LocalVar*)?)
	 */
	protected void sequence_Signal(ISerializationContext context, Signal semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     StateMachine returns StateMachine
	 *
	 * Constraint:
	 *     (states+=State_ | transitions+=Transition)*
	 */
	protected void sequence_StateMachine(ISerializationContext context, StateMachine semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     State_ returns State_
	 *
	 * Constraint:
	 *     (final?='final'? name=ID entryCode=ActionCode? exitCode=ActionCode? substatemachine=StateMachine?)
	 */
	protected void sequence_State_(ISerializationContext context, State_ semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     StringExpression returns ConcatenateExpression
	 *     StringExpression.ConcatenateExpression_1_0_0 returns ConcatenateExpression
	 *
	 * Constraint:
	 *     (left=StringExpression_ConcatenateExpression_1_0_0 rest=IndividualExpression)
	 */
	protected void sequence_StringExpression(ISerializationContext context, ConcatenateExpression semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.CONCATENATE_EXPRESSION__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.CONCATENATE_EXPRESSION__LEFT));
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.CONCATENATE_EXPRESSION__REST) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.CONCATENATE_EXPRESSION__REST));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getStringExpressionAccess().getConcatenateExpressionLeftAction_1_0_0(), semanticObject.getLeft());
		feeder.accept(grammarAccess.getStringExpressionAccess().getRestIndividualExpressionParserRuleCall_1_0_2_0(), semanticObject.getRest());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     TimerPort returns TimerPort
	 *
	 * Constraint:
	 *     name=ID
	 */
	protected void sequence_TimerPort(ISerializationContext context, TimerPort semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.TIMER_PORT__NAME) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.TIMER_PORT__NAME));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getTimerPortAccess().getNameIDTerminalRuleCall_1_0(), semanticObject.getName());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     Transition returns Transition
	 *
	 * Constraint:
	 *     (
	 *         name=ID? 
	 *         (init?='initial' | from=[State_|ID]) 
	 *         to=[State_|ID] 
	 *         guard=Expression? 
	 *         ((triggers+=Trigger_in triggers+=Trigger_in*) | timerPort=[TimerPort|ID] | universal?='*')? 
	 *         action=ActionCode?
	 *     )
	 */
	protected void sequence_Transition(ISerializationContext context, Transition semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     Trigger_in returns Trigger_in
	 *
	 * Constraint:
	 *     (from=[Port|ID] signal=[Signal|ID] (parameters+=IncomingVariable parameters+=IncomingVariable*)?)
	 */
	protected void sequence_Trigger_in(ISerializationContext context, Trigger_in semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     Trigger_out returns Trigger_out
	 *
	 * Constraint:
	 *     (to=[Port|ID] signal=[Signal|ID] (parameters+=Expression parameters+=Expression*)?)
	 */
	protected void sequence_Trigger_out(ISerializationContext context, Trigger_out semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     Expression returns UnaryExpression
	 *     ConditionalOrExpression returns UnaryExpression
	 *     ConditionalOrExpression.ConditionalOrExpression_1_0_0 returns UnaryExpression
	 *     ConditionalAndExpression returns UnaryExpression
	 *     ConditionalAndExpression.ConditionalAndExpression_1_0_0 returns UnaryExpression
	 *     RelationalOpExpression returns UnaryExpression
	 *     RelationalOpExpression.LessThanOrEqual_1_0_0_0_0 returns UnaryExpression
	 *     RelationalOpExpression.LessThan_1_0_0_1_0 returns UnaryExpression
	 *     RelationalOpExpression.GreaterThanOrEqual_1_0_0_2_0 returns UnaryExpression
	 *     RelationalOpExpression.GreaterThan_1_0_0_3_0 returns UnaryExpression
	 *     RelationalOpExpression.Equal_1_0_0_4_0 returns UnaryExpression
	 *     RelationalOpExpression.NotEqual_1_0_0_5_0 returns UnaryExpression
	 *     AdditiveExpression returns UnaryExpression
	 *     AdditiveExpression.Plus_1_0_0_0_0 returns UnaryExpression
	 *     AdditiveExpression.Minus_1_0_0_1_0 returns UnaryExpression
	 *     MultiplicativeExpression returns UnaryExpression
	 *     MultiplicativeExpression.Multiply_1_0_0_0_0 returns UnaryExpression
	 *     MultiplicativeExpression.Divide_1_0_0_1_0 returns UnaryExpression
	 *     MultiplicativeExpression.Modulo_1_0_0_2_0 returns UnaryExpression
	 *     UnaryExpression returns UnaryExpression
	 *     UnaryExpressionNotPlusMinus returns UnaryExpression
	 *     PrimaryExpression returns UnaryExpression
	 *
	 * Constraint:
	 *     exp=UnaryExpression
	 */
	protected void sequence_UnaryExpression(ISerializationContext context, UnaryExpression semanticObject) {
		if (errorAcceptor != null) {
			if (transientValues.isValueTransient(semanticObject, UrmlPackage.Literals.UNARY_EXPRESSION__EXP) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, UrmlPackage.Literals.UNARY_EXPRESSION__EXP));
		}
		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
		feeder.accept(grammarAccess.getUnaryExpressionAccess().getExpUnaryExpressionParserRuleCall_1_2_0(), semanticObject.getExp());
		feeder.finish();
	}
	
	
	/**
	 * Contexts:
	 *     StatementOperation returns Variable
	 *     Statement returns Variable
	 *     Variable returns Variable
	 *
	 * Constraint:
	 *     (var=LocalVar (assign?=':=' exp=Expression)?)
	 */
	protected void sequence_Variable(ISerializationContext context, Variable semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     StatementOperation returns WhileLoopOperation
	 *     WhileLoopOperation returns WhileLoopOperation
	 *
	 * Constraint:
	 *     (condition=Expression statements+=StatementOperation+)
	 */
	protected void sequence_WhileLoopOperation(ISerializationContext context, WhileLoopOperation semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Contexts:
	 *     Statement returns WhileLoop
	 *     WhileLoop returns WhileLoop
	 *
	 * Constraint:
	 *     (condition=Expression statements+=Statement+)
	 */
	protected void sequence_WhileLoop(ISerializationContext context, WhileLoop semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
}
